Hammer.js过了一段时间就停止工作了
Hammer.js stops working after a while
我遇到了这个奇怪的问题,我正在使用hammer.js库来创建一些响应表功能。
当我在iPhone上测试页面时(这个问题在任何Android设备上都不会发生,只在iPhone上发生),如果我在本地机器上测试它,功能会很好——我使用Ghostlab从本地机器测试页面。然而,当我将代码部署到暂存服务器时,功能会中断。我所说的breaks的意思是它工作得很好,但在两个pan事件之后就停止了(pan事件是hammer.js事件)。这个问题在Chrome和iPhone上的Safari上都有。
我还在手机上打开了Safari控制台,没有收到任何JS错误。我尝试将本地.js文件复制到临时服务器,但这也没有解决问题。
有人知道为什么同样的代码在暂存服务器上不起作用,但在本地服务器上起作用吗?
我相信这是因为包含平移事件的元素被移出了屏幕。
因此,不需要在pan上添加回调函数来设置.gallery-inner
上的left
css值,如下所示:
<script>
var startPos = 0;
var scrollContainer = document.getElementById('scrollable');
var hammertime = new Hammer(scrollContainer);
hammertime.on('panend', function(ev) {
startPos = parseInt(scrollContainer.style.left.replace('px', ''));
});
hammertime.on('pan', function(ev) {
var pos = parseInt(startPos) + ev.deltaX;
scrollContainer.style.left = pos + 'px';
});
</script>
<style>
.gallery {
overflow: hidden;
height: 200px;
width: 300px;
position: relative;
}
.gallery-inner {
position: relative;
white-space: nowrap;
overflow: visible;
}
.gallery-inner > div {
display: inline-block;
width: 50px;
height: 200px;
background: #000;
color: #fff;
}
</style>
<div class="gallery">
<div id="scrollable" class="gallery-inner">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
<div>13</div>
</div>
</div>
为触摸区域添加另一个容器,并在其上设置left
值。
例如。
<script>
var startPos = 0;
var hammerContainer = document.getElementById('hammer');
var scrollContainer = document.getElementById('scrollable');
var hammertime = new Hammer(hammerContainer);
hammertime.on('panend', function(ev) {
startPos = parseInt(scrollContainer.style.left.replace('px', ''));
});
hammertime.on('pan', function(ev) {
var pos = parseInt(startPos) + ev.deltaX;
scrollContainer.style.left = pos + 'px';
});
</script>
<style>
.gallery {
overflow: hidden;
height: 200px;
width: 300px;
position: relative;
}
.gallery-scrollable {
position: relative;
white-space: nowrap;
overflow: visible;
}
.gallery-scrollable > div {
display: inline-block;
width: 50px;
height: 200px;
background: #000;
color: #fff;
}
</style>
<div class="gallery">
<div id="hammer" class="gallery-inner">
<div id="scrollable" class="gallery-scrollable">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
<div>13</div>
</div>
</div>
</div>
此处的代码示例:http://codepen.io/anon/pen/QbgLzz
相关文章:
- 如何停止字幕文本一段时间,然后继续
- HTTP服务器在一段时间后停止(Node.js)
- Hammer.js过了一段时间就停止工作了
- SignalR在一段时间后停止工作
- 停止JavaScript一段时间
- 在页面加载时禁用 CSS 动画,但每隔一段时间工作一次
- 执行了一段时间的javascript/jquery函数,然后停止
- 自动刷新JavaScript功能在一段时间后停止工作
- 如何在JavaScript中一段时间后停止递归函数
- 为什么setInterval在一段时间后无法正常工作
- 如何使setInterval在一段时间后或多次操作后停止
- jQuery在一段时间后停止$.post进程
- 停止setInterval()函数一段时间
- Angularjs应用会在一段时间后停止加载资源
- 如何在一段时间后停止执行包含无限循环的Javascript函数
- setTimeout在我的循环javascript幻灯片函数中工作了一段时间,然后停止延迟
- 带有node.js管道接收器的ZeroMQ在一段时间后停止接收消息
- Javascript弹出停止一段时间后
- 为什么这个轮询在空转一段时间后停止工作
- 表行在不工作一段时间后变得褪色