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


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 相关文章推荐
js和jquery使按钮失效为不可用状态的方法
Jan 26 Javascript
嵌入式iframe子页面与父页面js通信的方法
Jan 20 Javascript
动态加载js的方法汇总
Feb 13 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
Aug 11 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
Mar 13 Javascript
老生常谈js中0到底是 true 还是 false
Mar 08 Javascript
Angular4学习笔记之准备和环境搭建项目
Aug 01 Javascript
js简单遍历获取对象中的属性值的方法示例
Jun 19 Javascript
微信小程序实现上拉加载功能
Nov 20 Javascript
vue实现购物车结算功能
Jun 18 Javascript
详解React 元素渲染
Jul 07 Javascript
Vue组件通信$attrs、$listeners实现原理解析
Sep 03 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数组删除元素示例
2014/03/21 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
javascript处理table表格的代码
2010/12/06 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
python实现给数组按片赋值的方法
2015/07/28 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
Python切片操作实例分析
2018/03/16 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
python一键去抖音视频水印工具
2018/09/14 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
python爬虫解决验证码的思路及示例
2019/08/01 Python
html5时钟实现代码
2010/10/22 HTML / CSS
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
波兰在线体育用品商店:Hop-Sport.pl
2019/07/23 全球购物
2014高中生入党思想汇报范文
2014/09/13 职场文书
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫