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


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 相关文章推荐
jquery1.83 之前所有与异步列队相关的模块详细介绍
Nov 13 Javascript
js单词形式的运算符
May 06 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
Nov 12 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
Aug 10 Javascript
Javascript之Date对象详解
Jun 07 Javascript
js print打印网页指定区域内容的简单实例
Nov 01 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
JavaScript仿支付宝6位数字密码输入框
Dec 29 Javascript
Angularjs的键盘事件的绑定
Jul 27 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
Mar 28 Javascript
vue实现树形结构样式和功能的实例代码
Oct 15 Javascript
微信小程序中的列表切换功能实例代码详解
Jun 09 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
php中文字符截取防乱码
2008/03/28 PHP
php变量范围介绍
2012/10/15 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
实例解析php的数据类型
2018/10/24 PHP
jQuery 前的按键判断代码
2010/03/19 Javascript
jQuery中调用WebService方法小结
2011/03/28 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
Jquery性能优化详解
2014/05/15 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
用python实现对比两张图片的不同
2018/02/05 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
在pycharm中显示python画的图方法
2019/08/31 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
Python实现壁纸下载与轮换
2020/10/19 Python
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
法学函授自我鉴定
2014/02/06 职场文书
公司委托书格式范文
2014/04/04 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
自荐信格式范文
2015/03/04 职场文书
会议通知范文
2015/04/15 职场文书
python实现简易名片管理系统
2021/04/11 Python
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
MySQL分布式恢复进阶
2022/07/23 MySQL