Javascript 可在iOS上拖动的脚本库

Javascript 可在iOS上拖动的脚本库,javascript,prototypejs,scriptaculous,Javascript,Prototypejs,Scriptaculous,如何将touch事件设置为Dragable类,使其在iOS(iPad、iPhone等)上工作?我读过,它有很多jQuery选项,但不确定如何将其应用于Scriptaculous。任何帮助都将不胜感激。谢谢。您可以通过编辑dragdrop.js来完成此操作,如前所述: 在DragTables中: register: function(draggable) { if(this.drags.length == 0) { this.eventMouseUp = this.en

如何将touch事件设置为Dragable类,使其在iOS(iPad、iPhone等)上工作?我读过,它有很多jQuery选项,但不确定如何将其应用于Scriptaculous。任何帮助都将不胜感激。谢谢。

您可以通过编辑dragdrop.js来完成此操作,如前所述:

在DragTables中:

  register: function(draggable) {
    if(this.drags.length == 0) {
      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
      this.eventKeypress  = this.keyPress.bindAsEventListener(this);


      Event.observe(document, "mouseup", this.eventMouseUp);
      Event.observe(document, "mousemove", this.eventMouseMove);
      Event.observe(document, "keypress", this.eventKeypress);


      Event.observe(document, "touchstart", this.eventKeypress);
      Event.observe(document, "touchmove", this.eventMouseMove);
      Event.observe(document, "touchend", this.eventMouseUp);
    }
    this.drags.push(draggable);
  },


  unregister: function(draggable) {
    this.drags = this.drags.reject(function(d) { return d==draggable });
    if(this.drags.length == 0) {
      Event.stopObserving(document, "touchstart", this.eventKeypress);
      Event.stopObserving(document, "touchmove", this.eventMouseMove);
      Event.stopObserving(document, "touchend", this.eventMouseUp);


      Event.stopObserving(document, "mouseup", this.eventMouseUp);
      Event.stopObserving(document, "mousemove", this.eventMouseMove);
      Event.stopObserving(document, "keypress", this.eventKeypress);
    }
  },
可拖动:

initialize:
...
    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
    Event.observe(this.handle, "mousedown", this.eventMouseDown);
      Event.observe(this.handle, "touchstart", this.eventMouseDown);


    Draggables.register(this);
  },


  destroy: function() {
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
    Event.stopObserving(this.handle, "touchstart", this.eventMouseDown);
    Draggables.unregister(this);
  },

...

initDrag: function(event) {
    if(!Object.isUndefined(Draggable._dragging[this.element]) &&
      Draggable._dragging[this.element]) return;
    if(Event.isLeftClick(event) || event.type == "touchstart") {
在编辑prototype.js的同时:

function pointerX(event) {
    var docElement = document.documentElement,
     body = document.body || { scrollLeft: 0 };


    if (event.changedTouches) return (event.changedTouches[0].clientX +
      (docElement.scrollLeft || body.scrollLeft) -
      (docElement.clientLeft || 0));


    return event.pageX || (event.clientX +
      (docElement.scrollLeft || body.scrollLeft) -
      (docElement.clientLeft || 0));
  }


  function pointerY(event) {
    var docElement = document.documentElement,
     body = document.body || { scrollTop: 0 };


    if (event.changedTouches) return (event.changedTouches[0].clientY +
      (docElement.scrollTop || body.scrollTop) -
      (docElement.clientTop || 0));


    return  event.pageY || (event.clientY +
       (docElement.scrollTop || body.scrollTop) -
       (docElement.clientTop || 0));
  }

我认为,你必须对X,Y坐标使用parseInt函数,因为我对Android上的Chrome浏览器有一些问题,它把23.45435345之类的东西放在坐标上

//Add parseInt ----------------[start]  
if (event.changedTouches) return (parseInt(event.changedTouches[0].clientY +
      (docElement.scrollTop || body.scrollTop) -
      (docElement.clientTop || 0),10));
//Add parseInt ----------------[end]

这值得投票表决。很抱歉,如果你愿意的话,我不得不提到直接操作方法的良好使用,但这不被认为是编辑核心功能吗?如果你能帮我决定,我可能会转换到另一个应用程序的原型,这是我唯一能找到人谈论它的地方。应该可以很好地工作,我会让它旋转一下,看看我能把它推到多高的中心星。:-)