0

こんにちは、画像ギャラリーの位置を制御する次のコードがあります (これは steven.tlvweb.com で見ることができます)。現在、スクロール ホイールはギャラリーの位置を制御していますが、キーダウン イベントは制御していません。以下のコードのアラート (keyLeft と keyRight) は見られますが、this.parent.scrollはまったく呼び出されていません。

引数 sc は正または負の整数である必要があります - それは結局 event.wheelDelta ですので、このプロトタイプ関数を呼び出す正しい方法は何ですか?

/* //////////// ==== ImageFlow Constructor ==== //////////// */


function ImageFlow(oCont, xmlfile, horizon, size, zoom, border, start, interval) {
    this.oc = document.getElementById(oCont); 
this.scrollbar  = getElementsByClass(this.oc,   'div', 'scrollbar');
this.text       = getElementsByClass(this.oc,   'div', 'text');
this.bar        = getElementsByClass(this.oc,   'img', 'bar');
this.arL        = getElementsByClass(this.oc,   'img', 'arrow-left');
this.arR        = getElementsByClass(this.oc,   'img', 'arrow-right');
    this.bar.parent = this.oc.parent = this; 
    this.arL.parent = this.arR.parent = this;

    /* === handle mouse scroll wheel === */
    this.oc.onmousewheel = function () {
        this.parent.scroll(event.wheelDelta);
        return false;
    }

    var pleasework = this;

/* ==== add keydown events ==== */
    window.document.onkeydown=function(){  
        pleasework.keypress(event.keyCode);
        return false;
    }

}
/* //////////// ==== ImageFlow prototype ==== //////////// */
ImageFlow.prototype = {

scroll: function (sc) {
        if (sc < 0) {
            if (this.view < this.NF - 1) this.calc(1);
        } else {
            if (this.view > 0) this.calc(-1);
        }
    },


keypress : function (kp) {

    switch (kp) {
        case 39:
            //right Key
            if (this.view < this.NF - 1) this.calc(1);
            break;
        case 37:
            //left Key
            if (this.view > 0) this.calc(-1);
            break;
    }

    },

}

よろしくお願いします Steven (初心者 Java プログラマー)

4

1 に答える 1

0

parentDOM 要素でそのプロパティを使用しないでください。代わりに、ローカル変数に対してクロージャーを作成するだけです。だから、交換

this.bar.parent = this.oc.parent = this; 
this.arL.parent = this.arR.parent = this;

/* === handle mouse scroll wheel === */
this.oc.onmousewheel = function () {
    this.parent.scroll(event.wheelDelta);
    return false;
}

/* ==== add keydown events ==== */
window.document.onkeydown=function(){  
    this.parent.keypress(event.keyCode);
    return false;
}

var parent = this;
this.oc.onmousewheel = function(e) {
    parent.scroll(e.wheelDelta);
    e.preventDefault();
};
window.document.onkeydown = function(e) { // notice this overwrites previous listeners
    parent.keypress(e.keyCode);
};
于 2012-12-12T21:43:50.757 に答える