移动端点击态处理的三种实现方式


Posted in Javascript onJanuary 12, 2017

前言

在开发移动端页面的时候,为了提高用户体验,通常会给被触控的元素加上一个效果来对用户的操作进行反馈。这种反馈主要有三种实现方式,有需要的朋友们下面来一起看看吧。

一、伪类: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时,给元素添加classNametouchstend时移除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>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
复制小说文本时出现的随机乱码的去除方法
Sep 07 Javascript
基于jQuery的动态表格插件
Mar 28 Javascript
js转化毫秒为时间格式代码
Apr 10 Javascript
详解javascript中原始数据类型Null和Undefined
Dec 17 Javascript
AngularJS动态生成div的ID源码解析
Aug 29 Javascript
JS HTML图片显示Canvas 压缩功能
Jul 21 Javascript
js封装成插件的步骤方法
Sep 11 Javascript
vue动态路由配置及路由传参的方式
May 23 Javascript
node中modules.exports与exports导出的区别
Jun 08 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
Sep 25 Javascript
React父子组件间的传值的方法
Nov 13 Javascript
jquery-ui 进度条功能示例【测试可用】
Jul 25 jQuery
js手机号批量滚动抽奖实现代码
Apr 17 #Javascript
js图片轮播手动切换特效
Jan 12 #Javascript
原生js实现倒计时功能(多种格式调用)
Jan 12 #Javascript
JavaScript定义全局对象的方法示例
Jan 12 #Javascript
Node.js制作简单聊天室
Jan 12 #Javascript
jQuery 插件实现随机自由弹跳气泡样式
Jan 12 #Javascript
微信小程序学习(4)-系统配置app.json详解
Jan 12 #Javascript
You might like
PHP脚本的10个技巧(2)
2006/10/09 PHP
php中计算程序运行时间的类代码
2012/11/03 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
通过Jquery的Ajax方法读取将table转换为Json
2014/05/31 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
JavaScript中的连续赋值问题实例分析
2019/07/12 Javascript
javascript实现点击按钮切换轮播图功能
2020/09/23 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
浅析python参数的知识点
2018/12/10 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
Python实现GIF图倒放
2020/07/16 Python
详解python 内存优化
2020/08/17 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
医院检讨书范文
2014/02/01 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
校外活动方案
2014/08/28 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
办公室主任岗位职责
2015/01/31 职场文书
教师节祝酒词
2015/08/11 职场文书
2016国培研修心得体会
2016/01/08 职场文书
Django模型层实现多表关系创建和多表操作
2021/07/21 Python