2014-11-11 1 views
0

Я пытаюсь реализовать hammer.js для прокрутки страниц (например, книги), и я это сделал. Проблема заключается в том, что это работаетJavascript Параметры Функция во многих событиях

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') 
    { 
    } 
    } 

и так как мне нужно, чтобы добавить это событие для многих страницы (переменная #) Я не могу сделать хард-код ... Как я могу сделать это переменной внутри цикла?

Спасибо!

+1

Вы получаете ошибку javascript? Какая часть не работает? –

+0

Если я делаю первый, он отлично работает (салфетки и все!), Но 2-й и 3-й не отображают экран вообще (я думаю, потому что есть ошибка, и все это останавливается). Я забыл сказать, что это PhoneGap, поэтому ... почти нет возможности отладки – AriWais

ответ

1

Ах, не зная степень ошибок, я вижу:

objHammer1.on('panleft panright', fSwipe1(ev)); 

Здесь вы автоматически делает функцию, но то, что вы на самом деле хотите, чтобы использовать замыкание, так что функция не получать рендеринг до тех пор, пока событие не пострадает. Я не уверен, что ev представляет, но если это объект события, то это должно работать:

objHammer1.on('panleft panright', fSwipe1); 

Где все, что вы делаете, передавая функции, что вы хотите быть обратного вызова и даже будет автоматически вызывают эту функцию и передают объект event в качестве первого параметра.

Несколько других вещей, которые я заметил:

  1. убедитесь, что вы включили библиотеку JavaScript для Хаммера
  2. Убедитесь, что gSceneActual определяется, прежде чем она оценивается в gSceneActual===2
  3. Убедитесь, что JQuery библиотека включена
+0

спасибо за ответ ... 123 элемента проверены. Я попытался вытащить «(ev)», но не воспользоваться ... (и да! Ev означает событие ... – AriWais

+0

Убедитесь, что вы удалили скобку «()», те, которые фактически вызывают функцию, и вы делаете не хочу, чтобы вызванная функция. Вы хотите передать функцию так, чтобы она вызывается обработчиком события. –

+1

ОК. Я исправил ее. Я объявлял функцию var = вне функции (в «глобальной» области) и (не знаю точно, почему) это не сработало. Теперь я помещаю его в функцию, которая называет это и работает. Спасибо! – AriWais