您现在的位置是:网站首页> 编程资料编程资料
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案 HTML5 Canvas实现的鼠标点击长按粒子动画特效源码移动端html5模拟长按事件的实现方法HTML5对手机页面长按会粘贴复制禁用的解决方法一文彻底解决HTML5页面中长按保存图片功能
2023-10-13
307人已围观
简介 这篇文章主要介绍了详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案 ,具有一定的参考价值,有兴趣的可以了解一下。
最近需要给HTML5的WebAPP在页面上实现一个复制功能:用户点击长按文本会全选文字并弹出系统“复制”菜单,用户可以点击“复制”进行复制操作,然后粘贴到AppStore搜索对应的应用。之所以不是采用链接形式直接跳转到AppStore对应应用是为了通过用户的主动输入关键词搜索给推广的企业App增加权重。所以这一个“复制”功能对用户的体验至关重要。
尝试了一些做法,在安卓/iOS平台上的兼容性都不是很好。在微信浏览器内是很容易实现长按文本激发系统菜单,高亮全选文本内容的。但是在其他浏览器的表现就不是很一致了。包括模拟focus input,JavaScript Selection, 使用a标签尝试激活系统菜单。这些方法都存在兼容的缺陷。
1)虽然使用带有href属性的a标签在uc浏览器和百度浏览器上长按文本会出现“自由复制”/“选择文本”菜单,选择该菜单后会出现“全选/复制”的菜单,但是在一些安卓手机的系统浏览器和iPhone中却被视为纯链接,只弹出“复制链接”,没有“复制文本”菜单。况且即使只考虑少部分浏览器可行,这样也给用户操作多了一步,增加了复杂度。所以该方案不可取。
2)借助selection和range的方法需要考虑到不同浏览器的兼容性,代码如下:
function selectText(element) { var doc = document, text = docgetElementById(element), range, selection; if (docbodycreateTextRange) { range = documentbodycreateTextRange(); rangemoveToElementText(text); rangeselect(); } else if (windowgetSelection) { selection = windowgetSelection(); range = documentcreateRange(); rangeselectNodeContents(text); selectionremoveAllRanges(); selectionaddRange(range); /*if(selectionsetBaseAndExtent){ selectionsetBaseAndExtent(text, 0, text, 1); }*/ }else{ alert("none"); } } 遗憾的是在iphone Safari上依然无法通过点击或长按高亮选中所有文本(既然也支持window.getSelection,为何在Safari浏览器addRange操作后文本不能默认选中,知道原因的请留言指教)。因此,该方式存在缺陷。主动选中文本区域的方法后面后附上。
3)iPhone用户可能知道,长按某一文本选区内文字周围的空白区域,Safari会自动将该选区内的文本高亮全选(目标文本需要放在独立的div块级容器内)。根据这一特性,用CSS margin修饰一下,利用这个特点,正好可以解决上述第二种方法在ios设备的不兼容。经过测试,无论安卓和ios平台,一般手机自带的系统浏览器都是可以兼容的。至于uc浏览器、百度浏览器等其他厂家的移动端产品,由于有不同的机制,只能使用这些浏览器菜单提供的“自由复制”功能。
所以,我综合了第二种和第三种方式,使用jQuery mobile中的taphold事件来模拟longtap操作激发手机系统的复制菜单,这样基本上可以做到在所有移动设备浏览器上都能实现长按文本区域来高亮选中所有文本内容。再提一句,taphold的兼容bug这里就不详细附解决方法了,如果你的项目要求精益求精,你可以自行搜索解决方案。
下面列出我的解决方案。具体代码如下:
HTML代码:
JavaScript代码:
关键的CSS代码:
cparea{ text-align: center; font-family: Microsoft Yahei; margin: -2em 0 0; } kwd{ display: inline-block; color: #272727; background-color: #fff; font-size: 1875em; font-size: 1875em; padding: 75em 1em; border: 1px dashed #e60012; -webkit-user-select:element; margin: 2em; } kwd span{ display: block; border: 1px solid #fff; } kdes{ display: inline-block; color: #212121; font-size: 875em; padding-top: 0; } kdes b{ color: #ed5353; font-size: 25em; padding-right: 1em; } 说明:这里的margin:2em正是为了实现Safari浏览器上的长按全选功能,为了尊重还原设计稿效果,父容器.cparea又使用了负边距来抵消这个2em的外边距。最终,不仅视觉上和设计图保持了一致,也实现了长按全选激发系统菜单。
最后再补充一下支持Safari下的完整方法:
$("#kwd").bind("taphold", function(){ var doc = document, text = docgetElementById("kwd"), range, selection; if (docbodycreateTextRange) { //IE range = documentbodycreateTextRange(); rangemoveToElementText(text); rangeselect(); } else if (windowgetSelection) { //FF CH SF selection = windowgetSelection(); range = documentcreateRange(); rangeselectNodeContents(text); selectionremoveAllRanges(); selectionaddRange(range); //测试 consolelog(texttextContent); textinnerText && consolelog(textinnerText); //FireFox不支持innerText consolelog(texttextContentlength); textinnerText && consolelog(textinnerTextlength); //在Chrome下长度比IE/FF下多1 consolelog(textfirstChildtextContentlength); textinnerText && consolelog(textfirstChildinnerTextlength); consolelog(textfirstChildinnerHTMLlength); //注意IE9-不支持textContent makeSelection(0, textfirstChildtextContentlength, 0, textfirstChild); /* if(selectionsetBaseAndExtent){ selectionselectAllChildren(text); selectionsetBaseAndExtent(text, 0, text, 4); } */ }else{ alert("浏览器不支持长按复制功能"); } }); function makeSelection(start, end, child, parent) { var range = documentcreateRange(); //consolelog(parentchildNodes[child]); rangesetStart(parentchildNodes[child], start); rangesetEnd(parentchildNodes[child], end); var sel = windowgetSelection(); selremoveAllRanges(); seladdRange(range); } 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- HTML5标签大全Html5新增标签有哪些HTML5 新标签全部总汇(推荐)HTML5的video标签的浏览器兼容性增强方案分享HTML5标签嵌套规则详解【必看】HTML5文档结构标签
- HTML5拖放效果的实现代码HTML5 拖放(Drag 和 Drop)详解与实例代码HTML5中的拖放实现详解HTML5拖放API实现拖放排序的实例代码HTML5 拖放功能实现代码 HTML5逐步分析实现拖放功能的方法
- html5 div布局与table布局详解HTML利用九宫格原理进行网页布局吃透移动端 Html5 响应式布局详解html5页面 rem 布局适配方法HTML+CSS实现单列布局水平居中布局HTML使用栅格布局实现六种筛子样式的代码详解
- 纯HTML5+CSS3制作生日蛋糕(代码易懂)纯HTML5+CSS3制作生日蛋糕代码HTML5+CSS3实现非常有创意的生日蛋糕动画
- HTML5制作表格样式html中table表格的内容水平和垂直居中显示HTML用正则表达式检验表格的实例代码浅谈Html网页表格结构化标记的应用有关HTML表格边框的设置小技巧在线CSV转HTML表格工具HTML表格布局实际使用详解html 表格比较宽溢出的解决方法html+css给单独某一表格定义样式示例HTML表格_动力节点Java学院整理
- 详解HTML5中的拖放事件(Drag 和 drop)5分钟弄清楚html5的drag and drop(小结)HTML5 拖放(Drag 和 Drop)详解与实例代码HTML5+CSS3实现拖放(Drag and Drop)示例突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述HTML5 drag和drop具体使用详解
- HTML5头部<meta>标签的一些常用信息小结html中meta标签及用法详解HTML标签meta总结,HTML5 head meta 属性整理HTML5各种头部meta标签的功能(推荐)移动端html5 meta标签的神奇功效实例讲解HTML5的meta标签的一些应用 举例讲解HTML中META标签的一些使用技巧常用HTML meta 标签属性(网站兼容与优化需要)HTML头标签meta实现refresh重新定向HTML中的<meta>标签的使用详解
- HTML5页面音视频在微信和app下自动播放的实现方法html5 video全屏播放/自动播放的实现示例html5中嵌入视频自动播放的问题解决html5自动播放mov格式视频的实例代码解决HTML5中的audio在手机端和微信端的不能自动播放问题HTML5 解决苹果手机不能自动播放音乐问题有关HTML5中背景音乐的自动播放功能HTML5页面音频自动播放的实现方式
- 全民英雄T是什么意思? 全民英雄肉盾双T组合推荐_手机游戏_游戏攻略_
- 全民英雄紫卡熊猫发放公告通知_手机游戏_游戏攻略_
