将jQuery事件应用于所有类元素?

Cha*_*lie 5 javascript jquery mobile-safari dom-events

我有以下代码,允许运行iOS的用户在页面上移动一个<div>.drag.当有一个istance时.drag,这可以正常工作,但是当有两个实例时,它无法工作.是否可以让代码找到所有的代码<div>,然后让它们可以拖动?

var drag = $(".drag")[0];
    xPos = drag.offsetWidth / 2;
    yPos = drag.offsetHeight / 2;
    drag.addEventListener("touchmove", function() {
        event.preventDefault();
        $(this).css({
        'left' : event.targetTouches[0].pageX - xPos + 'px', 
        'top' : event.targetTouches[0].pageY - yPos + 'px'
    });
});
Run Code Online (Sandbox Code Playgroud)

Joã*_*lva 9

使用时$(selector)[0],您将获得与选择器匹配的第一个 DOM元素..each()而是使用事件侦听器添加到与选择器匹配的所有元素:

$(".drag").each(function () {
    var drag = this;
    xPos = drag.offsetWidth / 2;
    yPos = drag.offsetHeight / 2;
    drag.addEventListener("touchmove", function() {
        event.preventDefault();
        $(this).css({
          'left' : event.targetTouches[0].pageX - xPos + 'px', 
          'top' : event.targetTouches[0].pageY - yPos + 'px'
        });
    });
});?
Run Code Online (Sandbox Code Playgroud)

  • 将 jQuery 与 JavaScript 混合使用并不是一个好习惯。你应该使用 `var drag = $(this)` 而不是 `var drag = this`。 (2认同)