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


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 相关文章推荐
Jquery替换已存在于element上的event的方法
Mar 09 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
Dec 16 Javascript
给应用部分的js代码设定一个统一的入口
Jun 15 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
Mar 24 Javascript
在Node.js应用中读写Redis数据库的简单方法
Jun 30 Javascript
深入学习jQuery Validate表单验证(二)
Jan 18 Javascript
批量下载对路网图片并生成html的实现方法
Jun 07 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
Jun 15 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
Jun 11 Javascript
Node.js 使用request模块下载文件的实例
Sep 05 Javascript
js序列化和反序列化的使用讲解
Jan 19 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
Nov 06 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 smarty的预保留变量总结
2008/12/04 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
python Opencv将图片转为字符画
2021/02/19 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
深入浅析Python2.x和3.x版本的主要区别
2018/11/30 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
python创建学生成绩管理系统
2019/11/22 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
如何用python写个模板引擎
2021/01/14 Python
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
Linux如何压缩可执行文件
2013/10/21 面试题
学校门卫管理制度
2014/01/30 职场文书
节能环保标语
2014/06/12 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js
python使用shell脚本创建kafka连接器
2022/04/29 Python
app场景下uniapp的扫码记录
2022/07/23 Java/Android