У меня проблема с удалением прослушивателя событий из моего документа. В настоящее время я добавляю функцию в документ в свою функцию «drag_delta» и удаляю ее в своей функции «drag_stop». Я пытаюсь получить дельту мыши, перетаскивая изображение, используя данные clientY, и сравнивая его с clientY от события «начать перетаскивание». Текущий код выполняется до функции drag_stop, полностью игнорируя его (я попробовал распечатать слово «run», чтобы узнать, признает ли его даже его подтверждение). Я написал это в JSX, поскольку я использую React.- ДжастинEvent Listener не удаляется
//Creation of class, and initial state set
var Knob = React.createClass({
getInitialState: function(){
return{season: 1};
},
drag_start: function(data){
var startPos = data.clientY;
console.log(startPos);
document.addEventListener("mousemove",this.drag_delta);
},
drag_delta: function(data){
console.log(data.clientY);
this.setState({season: data.clientY});
document.addEventListener("mouseup",this.drag_stop);
},
drag_stop: function(data){
document.removeEventListener("mousemove",this.drag_stop);
console.log("run");
},
render: function(){
return(
<div>
<img src = "../style/img/wood-bg.png" />
<img src ={ '../style/img/Seasons/sprites_cut/'+this.state.season+'.png'} ref = "season" onDragStart = {this.drag_start} />
</div>
);//Ed
} //end render function
}); //end knob class
React.render(<Knob />, mountNode);
Проблема в том, что события перетаскивания отличаются от событий мыши. Если вы слушаете 'dragstart', тогда вы должны слушать« dragover »и« dragend »(или« drop'). 'mouseover' и' mouseup' не будут запущены. Я предлагаю прочитать больше о перетаскивании на MDN: https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Drag_and_drop. Или вы предотвращаете перетаскивание, и в этом случае вы могли бы использовать обычные события мыши ... –
ОК, так почему же «mousemove» срабатывает и печатает на консоли при каждом движении мыши? Я запускаю «onDragStop» в JSX, а затем использую «mouseup» в классе React как простой javascript. –
Я сделал скрипку здесь: https://jsfiddle.net/5oohsd3q/. Вы правы, «mousemove» запускается, но только * один раз *, а не непрерывно. Освобождение кнопки мыши не вызывает «мыши». Вы можете видеть, что вместо событий 'mousemove' продолжают срабатывать, пока вы не нажмете (' mousedown' + ** 'mouseup' **) еще раз. По крайней мере, это поведение, которое я наблюдаю в Chrome и Firefox. –