一步一步搭建客服系统 (3) js 实现“截图粘贴”及“生成网页缩略图”

 

最近在做一个客服系统的demo,在聊天过程中,我们经常要发一些图片,而且需要用其它工具截图后,直接在聊天窗口里粘贴,就可以发送;另外用户输入一个网址后,把这个网址先转到可以直接点击的link,并马上显示这个网址的缩略图。

1 截屏粘贴

1.1 用clipboardData来实现截屏粘贴

 

 


 

1.2 firefox 不支持clipboardData

用上面的方法一般浏览器都支持,但firefox就是不支持,后来才发现,它支持直接粘贴截屏的图片到div里(textarea里不行)。于是把发送消息的框由textarea改成了div。

1.3 取值

用jquery取textarea的值,我们用的是val,但div我们用val是取不到值的。虽然我们可以用html来取到所有内容,但对于文本来说用text取到的值更简洁;只有要取截屏图片时,才用html,于是写成这样:

var msg = $('#text').text().trim() || $('#text').html().trim();

 

1.4 效果图

image

 

作者:疯吻IT 出处:http://fengwenit.cnblogs.com

 

2 根据网址生成缩略图

2.1 效果图

当用户输入 http://qq.com 时, 自动转成link,并生成一个小的缩略图,效果如下:

image

 

2.2 实现

先判断是不是link, 如果是link,就生成一个iframe:

 

初始设置iframe的宽、高为1000,最开始是不可见的,因为加载完后,要缩小到45%,所以一开始就可见的话,界面会闪一下。缩小的方法zoomEle如下:

 

这里最后二行,是设置其可见,并把父控件高度设置成500,不然它为最开始的1000。

 

2.3 细节处理

最开始,为了让接收到的消息都在最下面,因为消息多了,会有滚动条,所以每收到消息后,会设置收消息的控件div的scrollTop:

 

虽然在上一步,把父控件的高度也设成了500(不是1000了),但整个div的滚动条还是根据1000出现了,所以div的最下面还是会有500px的空白,这时用上面的这种方式,就会在下一个消息前出现一大段空白,感觉很怪。于是调整了下,不滚到底,而是根据滚动到最后的一个消息处:


这里要区分有没有iframe, 另外普通的消息是用的div来包了一层。

 

另外如果不想让这个缩略图里的link能被点击,可以在iframe里加上sandbox属性,这样就不会在点击后打开新的网页了。

 

另外,在网上找到了一个生成当前网页缩略图的方法,感觉还不错,分享一下:


调用 generate() 方法即可生成。

 

 一步一步搭建客服系统

 

 

.

posted @ 2015-09-14 09:45  疯吻IT  阅读(4466)  评论(4编辑  收藏  举报