removeEventListener无法从变量中运行

时间:2017-04-13 21:05:32

标签: javascript

简短的querySelector

function __(el){
  return document.querySelectorAll(el);
};

vars的例子

img = _('.thumbnail img'),
    canvas = _('#cs')

已更新以显示此

中的功能
img.addEventListener('mousemove', function colorCatcher(e){

spin = document.getElementsByClassName('spin');
parts = spin[0].className.split('-');
if(parts[4] == 'left'){
  preview = __('.stripes'),x = '',y = '';  
}else{
  preview = _('.strike-through'),x = '',y = '';  
}


  if(e.offsetX) {
    x = e.offsetX;
    y = e.offsetY; 
  }


  else if(e.layerX) {
    x = e.layerX;
    y = e.layerY;
  }


useCanvas(canvas,img,function(){

    var p = canvas.getContext('2d')
    .getImageData(x, y, 1, 1).data;

    if(preview.length == 2){
      preview[0].style.background = rgbToHex(p[0],p[1],p[2]);
      preview[1].style.background = rgbToHex(p[0],p[1],p[2]);
    }else{
      preview.style.background = rgbToHex(p[0],p[1],p[2]);
    }
  });
}, false);

我无法弄清楚如何在上面做removeEventListener。

我尝过这样的话:

img.removeEventListener('mousemove', img.colorCatcher, false);
document.removeEventListener('mousemove', img.colorCatcher, 
window.removeEventListener('mousemove', img.colorCatcher, false);

我做错了什么?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您不必在removeEventListener上指定目标,它应该是:

img.removeEventListener('mousemove', colorCatcher, false);

另一件事是在IE和Safari中你需要指定addEventListener的完全相同的签名,否则事件不会被删除所以如果你添加了一个事件:

// Added as
img.addEventListener('mousemove', colorCatcher, false); 
// Should be removed as
img.removeEventListener('mousemove', colorCatcher, false);

// Added as
img.addEventListener('mousemove', colorCatcher); 
// Should be removed as
img.removeEventListener('mousemove', colorCatcher);

修改

您需要确保定义您的功能,例如:

function colorCatcher(){
  // Actions here
}

// Added as
img.addEventListener('mousemove', colorCatcher, false); 
// Should be removed as
img.removeEventListener('mousemove', colorCatcher, false);