2013-07-09 135 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