2018正版葡京赌侠诗有关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);

此间大家队这些点子传入了一个render伊夫(Eve)rything的函数参数,那么些函数里面纵使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时候的性质。

    第一次写博文,不足之处请我们指教,我肯定虚心接受!

相关文章