【发布时间】:2012-05-30 17:28:49
【问题描述】:
我有一个蓝色的#square 在我的 iOS 设备的视口中垂直和水平居中……
<div id="square"></div>
#square {
width:100px;
height:100px;
background:blue;
margin:0 auto;
}
我想在手机上进行捏合/缩放手势时在最小值和最大值范围内调整它的大小。
现在,这就是我使用的所有 javascript。
$(document).ready(function() {
var dom = document.body,
_width = parseInt($('#square').css('width')),
vel = 3,
min = _width,
max = 300,
scale;
dom.addEventListener("gesturechange", gestureChange, false);
function gestureChange(e) {
e.preventDefault();
scale = e.scale;
_width = Math.round(_width*(scale/vel));
if ( _width <= max && _width >= min )
$('#square').css({
'width' : _width + 'px',
'height' : _width + 'px'
});
if ( _width > max ) _width = max;
if ( _width < min ) _width = min;
}
});
但是,整个调整大小的体验感觉有点不稳定,并且对我的手指的反应不是很流畅。它确实有效,但没有我想要的那么顺利。
首先。我真的不明白javascript“触摸”事件和javascript“手势”事件之间的区别。我需要更多的事件监听器吗?像 gestureStart 和 gestureEnd 这样可以正常工作吗?
我现在遇到的问题是,当我放大 #square 时,它会非常快地跳到它的最大值 (300),但我无法用手指准确地控制它的大小。而且,一旦调整大小,我在做缩小手势时也很难再次减小大小。
我把我当前的代码放在 jsfiddle 上,这样你就可以自己测试了。 http://jsfiddle.net/Ec3az/
也许有人可以在这里帮助我,因为我很想完成这篇文章。总体结果应该只是在智能手机上放大和缩小时获得真正流畅的体验和对正方形大小的实际控制。
提前谢谢你
编辑:顺便说一句。我喜欢只使用标准的触摸事件,而不是使用额外的库。
【问题讨论】:
-
在 iOS 上,一些“触摸”事件(更复杂的 [双指] 事件)也会生成“手势”事件。您可以将(通用)触摸事件视为更“原始”,而附加(不太普遍支持的)手势事件则更“熟”。 “手势”事件可能更方便使用......如果它们存在的话。但是由于必要的延迟(一个触摸是滚动的开始,还是很快就会变成两指捏的开始?)它们往往不会很快被触发到 Javascript(尽管额外的时间只有几毫秒和人类通常几乎看不到)。
标签: javascript jquery ios touch gesture