我有一個簡單的拖放腳本,我正在玩弄學習..要嘗試代碼,只需在頁面上使用id爲「TEST」的元素並將腳本放置在頁。JavaScript removeEventListener將不起作用
元素將開始拖動,並且當您向上滑動時,它看起來像removeEventListener似乎不工作。我一直在搞2個小時,請幫忙!有沒有明顯的原因,它不起作用?這裏是腳本:
var Example = function() {
var exa = this;
this.elem = null;
this.init = function() {
exa.elem = document.getElementById('TEST');
console.log('exa.init()');
exa.attachEvent(exa.elem, 'mousedown', function(event) {
console.log('mousedown');
exa.drag.anchor(event);
});
}
this.attachEvent = function (object, event, handler) {
if (window.attachEvent) {
object.attachEvent('on'+event, function() {
handler.apply(object, arguments);
}, false);
} else {
object.addEventListener(event, function() {
handler.apply(object, arguments);
}, false);
}
}
this.detachEvent = function(object, event, handler){
if (window.detachEvent) {
object.detachEvent('on'+event, function(){
handler.apply(object, arguments);
}, false) ;
} else {
object.removeEventListener(event, function() {
handler.apply(object, arguments);
}, false);
}
}
this.drag = {
'release' : function(event) {
exa.elem.removeEventListener('mousemove', function(event) { exa.drag.move(event) }, true);
console.log('drag.release2');
},
'anchor' : function(event){
console.log('exa.drag.anchor();');
offY= event.clientY-parseInt(exa.elem.offsetTop);
offX= event.clientX-parseInt(exa.elem.offsetLeft);
exa.attachEvent(window, 'mousemove', function(event) {
exa.drag.move(event);
});
},
'move' : function(event) {
exa.elem.style.position = 'absolute';
var topPosition = (event.clientY-offY);
var leftPosition = (event.clientX-offX);
exa.elem.style.top = topPosition+ 'px';
exa.elem.style.left = leftPosition + 'px';
//console.log('FROM THE TOP: ' + topPosition);
//console.log('FROM THE LEFT: ' + leftPosition);
exa.attachEvent(window, 'mouseup', function(event) {
exa.drag.release(event);
});
}
}
}
var example = new Example();
example.attachEvent(window, 'load', function(event) {
example.init(event);
});
我們對此深感抱歉,我發佈的代碼已經爲功能和一對夫婦的錯誤混淆的名字,請看下面的例子:
var Example = function() {
var exa = this;
this.elem = null;
this.init = function() {
exa.elem = document.getElementById('TEST');
console.log('exa.init()');
exa.newEvent(exa.elem, 'mousedown', function(event) {
console.log('mousedown');
exa.drag.anchor(event);
});
}
this.newEvent = function (object, event, handler) {
if (window.attachEvent) {
object.attachEvent('on'+event, function() {
handler.apply(object, arguments);
}, false);
} else {
object.addEventListener(event, function() {
handler.apply(object, arguments);
}, false);
}
}
this.removeEvent = function(object, event, handler){
if (window.detachEvent) {
object.detachEvent('on'+event, function(){
handler.apply(object, arguments);
}, false) ;
} else {
object.removeEventListener(event, function() {
handler.apply(object, arguments);
}, false);
}
}
this.drag = {
'release' : function(event) {
exa.removeEvent(exa.elem, 'mousemove', exa.drag.move);
console.log('drag.release2');
},
'anchor' : function(event){
console.log('exa.drag.anchor();');
offY= event.clientY-parseInt(exa.elem.offsetTop);
offX= event.clientX-parseInt(exa.elem.offsetLeft);
exa.newEvent(window, 'mousemove', function(event) {
exa.drag.move(event);
});
},
'move' : function(event) {
exa.elem.style.position = 'absolute';
var topPosition = (event.clientY-offY);
var leftPosition = (event.clientX-offX);
exa.elem.style.top = topPosition+ 'px';
exa.elem.style.left = leftPosition + 'px';
exa.newEvent(window, 'mouseup', function(event) {
exa.drag.release(event);
});
}
}
}
var example = new Example();
example.newEvent(window, 'load', function(event) {
example.init(event);
});
您要添加鼠標移動到EXA,而且,你用exa.attachEvent對窗口中添加鼠標移動偵聽器exa.elem –
實際刪除它,並使用exa.elem.removeEventListener除去不同的功能(儘管它看起來是一樣的,它不是相同的功能)從mousemove –
我發佈了一個新的代碼,因爲我有一些令人困惑的功能名稱。我沒有添加鼠標懸停在EXA上,因爲它看起來像我在做的事情。請查看第二個代碼塊。 – RON2015