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


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 相关文章推荐
a标签的href和onclick 的事件的区别介绍
Jul 26 Javascript
js中widow.open()方法使用详解
Jul 30 Javascript
JavaScript极简入门教程(一):基础篇
Oct 25 Javascript
JS控制弹出新页面窗口位置和大小的方法
Mar 02 Javascript
浅谈javascript的分号的使用
May 12 Javascript
js中json处理总结之JSON.parse
Oct 14 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
May 08 Javascript
深入理解Angular中的依赖注入
Jun 26 Javascript
Vuejs 页面的区域化与组件封装的实现
Sep 11 Javascript
JS多个表单数据提交下的serialize()应用实例分析
Aug 27 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
Feb 01 Javascript
vue自定义指令和动态路由实现权限控制
Aug 28 Javascript
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
Apache中php.ini的设置方法
2013/02/28 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
2013/04/24 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
浅析使用Python操作文件
2017/07/31 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
中专生学习生活的自我评价分享
2013/10/27 职场文书
旅游管理专业个人求职信范文
2013/12/24 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
法制教育主题班会
2015/08/13 职场文书
Java 数组内置函数toArray详解
2021/06/28 Java/Android
我去timi了,一起去timi是什么意思?
2022/04/13 杂记
cypress测试本地web应用
2022/06/01 Javascript