关于touch事件对于性能的影响
第一次写博客随笔,废话不多说,直接进入正题。
最近一直专注于移动终端的开发,碰到了一个比较棘手的事情,就是touch事件,大家都知道,touch事件有几种,无非就是touchstart,touchmove,touchend,touchstart和touchend应该算是单次触发式的事件,而touchmove因为是手指触碰之后,可以持续触发的事件,然后,每次触发一次或者说是某一段的touchmove的时候,也就是在持续进行js解析和执行,这样,会阻塞页面渲染,比如,我touchmove触发一段,然后渲染一次html页面,然后我手指按着不放,进入第二段touchmove事件,这个时候,从第一次的html渲染到第二次的html渲染之间,会有阻塞现象,短时间的触发还好,可能感觉不到,然后如果你需要长时间去触发的话,就会很明显的觉的卡顿,万一你的手机配置不高,性能不好的话,那就会卡的不要不要的!
然后,这个问题也不是不能得到解决,先附上一段代码:
$("body").on("touchstart", function(e) {
e.preventDefault();
startX = e.originalEvent.changedTouches[0].pageX,
startY = e.originalEvent.changedTouches[0].pageY;
});
$("body").on("touchmove", function(e) {
e.preventDefault();
moveEndX = e.originalEvent.changedTouches[0].pageX,
moveEndY = e.originalEvent.changedTouches[0].pageY,
X = moveEndX - startX,
Y = moveEndY - startY;
if ( Math.abs(X) > Math.abs(Y) && X > 0 ) {
//你要渲染的页面
}
});
这段代码意思是,当我手指触碰在手机显示屏时,从左滑到右边,会触发alert事件,然而大家看到了某个方法没有,对,没错,那就是e.preventDefault();只要触发一次touchmove,他就会做一次判断,取消body的默认行为,那这样子势必会有性能问题,所以,我们不妨把e.preventDefault()保存到一个变量中:
function updateTouches(event) {
touches = event.touches;
}
然后监听touchmove事件:
document.addEventListener('touchmove', updateTouches);
然后用windows的requestAnimationFrame,可以让动画更流畅,运行性能更高,通过requestAnimationFrame来更新渲染页面。当然,如果你想兼容各种浏览器,需要对不同的浏览器判断是否支持这个方法,这里我们假设浏览器支持这个方法。
window.requestAnimationFrame(renderEverything);
这里我们队这个方法传入了一个renderEverything的函数参数,这个函数里面就是touchmove事件具体要干的事情:
function renderEverything() {
//这里就是你要做的事情
}
我们把以上代码结合起来:
$("body").on("touchstart", function(e) {
document.addEventListener('touchmove', updateTouches);
startX = e.originalEvent.changedTouches[0].pageX,
startY = e.originalEvent.changedTouches[0].pageY;
});
window.requestAnimationFrame(renderEverything);
function updateTouches(e) {
touches = e.preventDefault();
}
function renderEverything() {
$("body").on("touchmove", function(e) {
moveEndX = e.originalEvent.changedTouches[0].pageX,
moveEndY = e.originalEvent.changedTouches[0].pageY,
X = moveEndX - startX,
Y = moveEndY - startY;
if (Math.abs(X) > Math.abs(Y) && X > 0) {
//你要渲染的页面
}
})
}
虽然这样子不能完完全全移除卡顿的现象,通常这和整个页面结构,以及js解析和css渲染紧密相关,但是,这样子的确可以大大的优化使用touch时候的性能。
第一次写博文,不足之处请大家指教,我肯定虚心接受!
关于touch事件对于性能的影响的更多相关文章
- 移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法
这两天自己在写一个手机网页,用到了触屏滑动的特效,就是往右滑动的时候左侧隐藏的菜单从左边划出来. 做完之后在手机原生浏览器中运行正常,但在QQ和微信中打开,发现touchmove只会触发一次,而且to ...
- JavaScript 事件对内存和性能的影响
程序代码: <%-- Created by IntelliJ IDEA. User: 乔克叔叔 Date: 2017/12/26 Time: 16:45 To change this templ ...
- Android开发之Touch事件分发机制
原地址http://www.cnblogs.com/linjzong/p/4191891.html Touch事件分发中只有两个主角:ViewGroup和View.Activity的Touch事件事实 ...
- H5案例分享:移动端滑屏 touch事件
移动端滑屏 touch事件 移动端触屏滑动的效果的效果在电子设备上已经被应用的越来越广泛,类似于PC端的图片轮播,但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch ...
- Android事件分发机制(二)30分钟弄明白Touch事件分发机制
Touch事件分发中只有两个主角:ViewGroup和View.Activity的Touch事件事实上是调用它内部的ViewGroup的Touch事件,可以直接当成ViewGroup处理. View在 ...
- 高性能JavaScript-JS脚本加载与执行对性能的影响
在web产品优化准则中,很重要的一条是针对js脚本的加载和执行方式的优化.本篇文章简单描述一下其中的优化准则. 1. 脚本加载优化 1.1 脚本位置对性能的影响 优化页面加载性能的原则之一是将scri ...
- Android:30分钟弄明白Touch事件分发机制
Touch事件分发中只有两个主角:ViewGroup和View.Activity的Touch事件事实上是调用它内部的ViewGroup的Touch事件,可以直接当成ViewGroup处理. View在 ...
- 移动端 js touch事件
随着智能手机和平板电脑的普及, 越来越多的人用移动设备浏览网页,我们平时在pc浏览器上用的鼠标事件,比如:click, mouseover等, 已经无法满足移动设备触摸屏的特点,触摸时代的到来,离不开 ...
- 【Stage3D学习笔记续】山寨Starling(十一):Touch事件体系
我们的山寨Starling版本将会在这里停止更新了,主要还是由于时间比较有限,而且我们的山寨版本也很好的完成了他的任务“了解Starling的核心渲染”,接下来的Starling解析我们将会直接阅读S ...
随机推荐
- Apache+tomcat+mod_jk+centos6.2负载均衡集群配置--转载
转载地址:http://blog.163.com/chenhui_java/blog/static/17267249420128101191860/ 注: 由于长期受转载毒害,所以本人日志均是原创:其 ...
- Transact-SQL 示例 - UPDATE中使用INNER JOIN
一般情况下博主已经对在SELECT语句当中使用INNER JOIN非常娴熟,但在UPDATE当中使用INNER JOIN的场景就为数不多了.以下博主将为你介绍在UPDATE场景当中使用INNER JO ...
- Office Online简介
一.什么是Office Online Office Online 将 Microsoft Office 体验扩展到了 Web 浏览器,这使您可以直接在存储文档的 SharePoint 网站上处理文档, ...
- TOGAF培训讲义
我作为国内首先进行TOGAF研究和实践的架构师之一,曾在中国软件技术大会和中国软件工程大会做过TOGAF相关的主题演讲,并在多家大中型企业做过企 业架构内训.这个是我在给需要企业架构的企业做内训时的讲 ...
- python之异常处理
异常处理是高级编程语言必备的一个功能模块. 一.异常基础 在编程过程中为了增加友好性.容错性和健壮性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大 ...
- Qt之QAbstractItemView视图项拖拽(一)
一.需求说明 最近在搞视图项的拖拽,也上网查了一些资料,好多的文档都是一样的,只是被不通的网站所收录了(也有可能是被爬过去的,不明所以),不过也有一些文档写的不错,不过就是太简易,都是点睛之笔,总之功 ...
- SpringMVC——对Ajax的处理(包含 JSON 类型)
一.首先要搞明白的一些事情. 1.从客户端来看,需要搞明白: (1)要发送什么样格式的 JSON 数据才能被服务器端的 SpringMVC 很便捷的处理,怎么才能让我们写更少的代码,如何做好 JSON ...
- 在C#后端处理一些结果然传给前端Javascript或是jQuery
在C#后端处理一些结果然传给前端Javascript或是jQuery,以前Insus.NET有做过一个例子<把CS值传给JS使用 >http://www.cnblogs.com/insus ...
- 2015年最热门前端框架React 入门实例教程
现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Face ...
- 关于Chrome Dev Tool
★注意点一:函数名,方法名要拼写准确;