jqueryを使わずにjqueryプラグインを書き直そうとしていますが、なぜ関数でイベントが更新されないのかわかりません'引数を持つ.bind()を使用しています。私は次のように問題を単純化している:あなたが青のdivにクリックしたとき関数の引数で.bind()を使用すると、mousedownでイベントが更新されない
function IMdraw(div) {
\t this.div = div
\t this.div.addEventListener('mousedown', this.mousedown.bind(this));
}
IMdraw.prototype = {
\t onMouseMove: function (fn) {
\t \t this.moveHandler = fn;
\t \t this.div.addEventListener('mousemove', this.moveHandler, false);
\t },
\t
\t move1: function(e, arg) {
\t \t console.log('move1')
\t \t console.log(e.offsetX);
console.log(e.offsetY);
\t },
\t move2: function(e) {
console.log('move2')
\t console.log(e.offsetX);
console.log(e.offsetY);
\t },
\t mousedown: function(e) {
var arg = 3;
this.onMouseMove(this.move1.bind(this));
this.onMouseMove(this.move2.bind(this, e, arg));
\t },
}
var obj = new IMdraw(document.querySelector('div'));
<div style="width:500px; height:500px; background: blue;">
</div>
を見ることができるようにし、MOVE2機能では、divの中にカーソルを動かし、offsetXとoffsetYはありません更新はしませんが、move1関数で行います。
このように動作する理由はありますか?私は.bind()を間違って使っていると思います。
その電子とのarg引数を削除し、this.arg –
は、残念ながら、これはプラグインでは最善の解決策ではないとして、あなたの引数を作る、私はむしろとしてそれを持って、それを通過したいですプロトタイプのグローバル変数。 – user4282812