一步一步搭建客服系统 (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 @   疯吻IT  阅读(4471)  评论(4编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2014-09-14 Dynamic CRM 2013学习笔记(一)插件输入实体参数解析
点击右上角即可分享
微信分享提示