我正在尝试实现hammer.js来滑动页面(就像书本一样)并且我做到了。问题是这有效
var idHammer1 = document.getElementById("pageHoja1")
//var hammertime = new Hammer(myElement, hammerOptionsPan);
var objHammer1 = new Hammer(idHammer1);
objHammer1.on('panleft panright', function(ev)
{
//DBLog("obj1 - gSceneActual Antes: " + gSceneActual + " // X: " + ev.center.x + " Y: " + ev.center.y);
if (ev.type==='panleft')
{
if (!(gSceneActual===2))
{
gSceneActual = 2;
$(":mobile-pagecontainer").pagecontainer("change", "#pageHoja2", { transition: "slide", reverse: false});
}
}
else if (ev.type==='panright')
{
}
});
但这不是:
var fSwipe1 = function(ev)
{
//DBLog("obj1 - gSceneActual Antes: " + gSceneActual + " // X: " + ev.center.x + " Y: " + ev.center.y);
if (ev.type==='panleft')
{
if (!(gSceneActual===2))
{
gSceneActual = 2;
$(":mobile-pagecontainer").pagecontainer("change", "#pageHoja2", { transition: "slide", reverse: false});
}
}
else if (ev.type==='panright')
{
}
}
var idHammer1 = document.getElementById("pageHoja1")
//var hammertime = new Hammer(myElement, hammerOptionsPan);
var objHammer1 = new Hammer(idHammer1);
objHammer1.on('panleft panright', fSwipe1(ev))
这也行不通
function fSwipe1(ev)
{
//DBLog("obj1 - gSceneActual Antes: " + gSceneActual + " // X: " + ev.center.x + " Y: " + ev.center.y);
if (ev.type==='panleft')
{
if (!(gSceneActual===2))
{
gSceneActual = 2;
$(":mobile-pagecontainer").pagecontainer("change", "#pageHoja2", { transition: "slide", reverse: false});
}
}
else if (ev.type==='panright')
{
}
}
由于我需要将此事件添加到许多页面(变量#),所以我无法对其进行硬编码...如何使其在循环内可变?
谢谢!
最佳答案
啊,在不知道错误程度的情况下,我确实明白了:
objHammer1.on('panleft panright', fSwipe1(ev));
在这里,您正在自动渲染该函数,但您实际上想要的是使用闭包,以便在事件发生之前不会渲染该函数。我不确定 ev 代表什么,但如果它是事件对象,那么这应该有效:
objHammer1.on('panleft panright', fSwipe1);
您所做的就是传入您想要作为回调的函数,甚至会自动调用该函数并将 event
对象作为第一个参数传递。
我注意到的其他一些事情:
- 确保包含 Hammer 的 javascript 库
- 确保在
gSceneActual===2
求值之前已定义gSceneActual
- 确保包含 jQuery 库
关于Javascript 参数在许多事件上起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26870375/