2013-07-09 185 views
0

我想讓一個網站在我的iPad上工作,但唯一不起作用的是onmousemove方法。當用戶將手指放在屏幕上時,我希望onmousemove被觸發。iPad等價於onmousemove?

+3

也許嘗試'ontouchmove' - https://developer.mozilla.org/en-US/docs/Web/Guide/DOM/活動/ Touch_events – Ian

+0

@Ian這聽起來很適合[基於本節的第一行](https://developer.mozilla.org/en-US/docs/Web/Guide/DOM/Events/Touch_events#Drawing_as_the_touches_move) 。你想發佈這個答案,所以我可以upvote它? – doppelgreener

+0

@JonathanHobbs謝謝,我很感激:)剛發佈了一個答案。如果您覺得可以改進,請隨時添加/更改任何內容! – Ian

回答

1

啓用觸摸的設備中的mousemove事件的等效事件是touchmove事件。

所以,你可能綁定像這樣的事件:

var addEvent = (function() { 
    var tester, allHandlers, attachGenerator, addFunc, removeFunc; 

    tester = document.createElement("div"); 
    allHandlers = []; 

    attachGenerator = function (el, cb) { 
     var ret; 
     ret = function (e) { 
      e = e || window.event; 
      cb.call(el, e); 
     }; 
     return ret; 
    }; 

    if (tester.addEventListener) { 
     addFunc = function (element, eventName, callback) { 
      allHandlers.push({ 
       element: element, 
       eventName: eventName, 
       callback: callback 
      }); 
      element.addEventListener(eventName, callback, false); 
     }; 
     removeFunc = function (element, eventName, callback) { 
      element.removeEventListener(eventName, callback); 
     }; 
    } else if (tester.attachEvent) { 
     addFunc = function (element, eventName, callback) { 
      var finalCallback; 
      finalCallback = attachGenerator(element, callback); 
      allHandlers.push({ 
       element: element, 
       eventName: eventName, 
       callback: finalCallback 
      }); 
      element.attachEvent("on" + eventName, finalCallback); 
     }; 
     removeFunc = function (element, eventName, callback) { 
      element.detachEvent("on" + eventName, callback); 
     }; 
    } 

    addFunc(window, "unload", function() { 
     var i, j, cur; 
     // Don't remove this unload handler 
     for (i = 1, j = allHandlers.length; i < j; i++) { 
      cur = allHandlers[i]; 
      removeFunc(cur.element, cur.eventName, cur.callback); 
     } 
    }); 

    return addFunc; 
}()); 

function loadHandler() { 
    addEvent(document, "touchmove", touchmoveHandler); 
} 

function touchmoveHandler() { 
    // this callback should fire for every pixel (or whatever unit they may use) the touch moves 
} 

addEvent(window, "load", loadHandler); 

(該addEvent功能僅僅是一個普通的事件綁定功能,以幫助在舊IE工作...大概不必要的,如果你綁定到touch事件)

注意,我原來的通用addEvent功能不健全:http://www.quirksmode.org/blog/archives/2005/08/addevent_consid.html,但我修改了我以前用更好地支持處理器內的this的可用性時attachEvent必須使用,並刪除所有的處理程序當窗口的unload事件發生時。

參考文獻:

+0

我的印象是[addEvent()不是一段好用的代碼](http://www.quirksmode.org/blog/archives/2005/08/addevent_consid .html) - 或者至少盲目使用,而不會意識到危險。否則爲+1! – doppelgreener

+0

@JonathanHobbs嗯,從來沒有聽說過這些警告。我必須仔細閱讀,謝謝你的鏈接! – Ian

+0

@JonathanHobbs因此,似乎'attachEvent'的兩個主要問題是處理程序中對this的引用,以及頁面重新加載之間的內存泄漏。我更新了我的'addEvent'(和我的答案),希望能夠修復/幫助這兩者。我測試了IE7/8和最新版本的Chrome,而且這一切似乎都運行良好。這是我的小提琴,只是作爲參考:http://jsfiddle.net/tAQjf/ – Ian