gpt4 book ai didi

javascript - Hammer.js 在 pinchin/pinchout 上缓慢且不稳定

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:15:53 26 4
gpt4 key购买 nike

我正在使用 hammer.js 在宠物项目上实现一些触摸屏功能。

所需的产品是一张 map ,可以通过触摸屏四处拖动并放大和缩小。我让它工作了,一切都很好,除了 pinchin/pinchout 机制非常非常慢。在夹点发生和事件触发之间存在非常明显的延迟。

这是相关的 JQuery/JS 代码:

编辑:根据 Simon 的建议,代码现在更好(也更快)了。这是完成的版本

$(document).ready(function(){
//Function which simulates zoom on the map on pinchin/pinchout
$('#map').hammer()
.on("pinchin", function(e) {
var scale = $(this).css('transform');
scale = (scale == null ? $(this).css('-webkit-transform') : scale);
scale = (scale == null ? $(this).css('-ms-transform') : scale);
scale = scale.split(" ");
scale = parseFloat(scale[0].substring(7, scale[0].length - 1));

if(scale > 1) {
scale = ('scale(' + (scale - .1).toString() + ')');
$(this).css({'transform':scale, '-ms-transform':scale, '-webkit-transform':scale });
}
})
.on("pinchout", function(e) {
var scale = $(this).css('transform');
scale = (scale == null ? $(this).css('-webkit-transform') : scale);
scale = (scale == null ? $(this).css('-ms-transform') : scale);
scale = scale.split(" ");
scale = parseFloat(scale[0].substring(7, scale[0].length - 1));

if(scale < 5) {
scale = ('scale(' + (scale + .1).toString() + ')');
$(this).css({'transform':scale, '-ms-transform':scale, '-webkit-transform':scale
}
});
});

hammer.js documentation

最佳答案

这很不稳定,因为您在每个事件处理程序中进行大量计算。

首先,缓存您的变量。调用 $('#map') 总是进入 DOM,获取对象并返回它。只做一次,缓存结果。

同样的事情在你的计算之后。不要一直调用这个a[0] + a[7],计算一次,应用多次。

然后,好吧,将您的 .css() 调用合并到一个具有多个属性的调用中。

这会有所帮助,但要获得如丝般顺滑的效果,请继续阅读:


拥有流畅的动画并不难,但您需要了解需要改进的地方以及如何限制布局成本、回流和重新布局。我不能在这里解释所有这些,但我可以给你一些概念来研究:

首先,在触发任何 css 更改之前使用 requestAnimationFrame。这将确保 css 修改发生在动画帧的开头,而不是结尾 - 因此它有助于降低跳过帧的风险。

然后,尽可能多地使用 css3 转换(我不是说使用 CSS 样式表,我是说使用 JavaScript 的 css3 属性)。这些属性表现得更好。同时,尝试删除大部分成本高昂的 CSS 样式并进行大量测试,因为有些样式的渲染时间成本很高(例如投影等)。

然后,查看并阅读大多数 Google 开发团队关于尊重 60 fps 速率的演示文稿,以及关于让您的网站无卡顿的任何内容。他们通常会介绍基本概念,帮助您更好地了解正在发生的事情,以及在何处/如何优化和跟踪您网站的性能。

关于javascript - Hammer.js 在 pinchin/pinchout 上缓慢且不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19454893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com