css如何实现移动端点击态处理
小编给大家分享一下css如何实现移动端点击态处理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
一、伪类:active
:active伪类常用于设定点击状态下或其他被激活状态下一个链接的样式。最常用于锚点<a href="#">这种情况,一般主流浏览器下也支持其他元素,如button等。在多按键的鼠标系统中,:active只适用于主按键,目前的大部分情况都是左键即主键。
该伪类下定义的CSS样式只在按下鼠标按钮与释放鼠标按钮之间的短暂瞬间被触发显示。使用键盘的tab键也可以触发:active状态。
值得注意的是:伪类是一种比较方便的实现方式,但在ios中,需要在相关的元素或者body
上绑定touchstart
事件才能使元素的:active
生效。
By default, Safari Mobile does not use the :active state unless there is a touchstart event handler on the relevant element or on the .―MDN
document.body.addEventListener('touchstart', function (){});
也可以直接在body
上添加
<body touchstart> <!-- ... --></body>
此外,由于移动端300ms延迟问题,触摸反馈会有延迟,可以使用Fastclick解决。
二、webkit-tap-highlight-color
这个属性并不是标准的,被用于设置超链接被点击时高亮的颜色,在ios设备上表现为一个半透膜的灰色背景,可以设置-webkit-tap-highlight-color
为任何颜色,例如rgba(0,0,0,0.5)
,如果未设置颜色的alpha
值,将使用默认的透明度,alpha
为0时,将禁用高亮,alpha
为1时,元素在点击时将不可见
大部分安卓设备也支持这个属性,但是显示的效果不同,表现为一个边框, -webkit-tap-highlight-color
的值为边框的颜色
三、touch事件
当用户手指放在移动设备在屏幕上滑动会触发的touch事件。原理就是touchstart
时,给元素添加className
,touchstend
时移除className
<!-- 省略 --><li data-touch="true">点我</li><!-- 省略 --><script> document.body.addEventListener('touchstart', function(e){ var target = e.target if(target.dataset.touch === 'true'){ target.classList.add('active') } }) document.body.addEventListener('touchmove', function(e){ var target = e.target, rect = target.getBoundingClientRect() if(target.dataset.touch === 'true'){ // 移出元素时,取消active状态 if(e.changedTouches[0].pageX<rect.left || e.changedTouches[0].pageX>rect.right || e.changedTouches[0].pageY<rect.top || e.changedTouches[0].pageY>rect.bottom){ target.classList.remove('active') } } }) document.body.addEventListener('touchcancel', function(e){ var target = e.target if(target.dataset.touch === 'true'){ target.classList.remove('active') } }) document.body.addEventListener('touchend', function(e){ var target = e.target if(target.dataset.touch === 'true'){ target.classList.remove('active') } })</script>
以上是“css如何实现移动端点击态处理”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341