1

steven.tlvweb.comをご覧ください。

左右のキーボード矢印がフローを制御するように実装したいと思います。

現在、スクロール ホイールは動作し、コンストラクターで次のように設定されています。

/*  ImageFlow Constructor */    

    /* add mouse wheel events ==== */
    if (window.addEventListener)
        this.oc.addEventListener('DOMMouseScroll', function(e) {
            if (e.preventDefault) e.preventDefault();
            this.parent.scroll(-e.detail);
            return false;
        }, false);

    this.oc.onmousewheel = function () {
        this.parent.scroll(event.wheelDelta);
        return false;
    }

imageflow.prototype のさらに下のコードは次のとおりです。

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

そこで、コンストラクターのコードをいくつか書きました。

this.oc.onkeydown=function(){
        this.parent.keypress(event.keyCode);
        return false;
    }

そして imageflow.prototype に以下を含めました:

    /* ==== arrow keys ==== */
    keypress : function(kp) {   
        switch (kp) {

        case 39:                        //right Key
        if (this.view < this.NF - 1) {  //if not at far right of gallery
                    this.calc(1);       //move gallery left
        break;
                    }

                    case 37:            //left Key
        if (this.view > 0) {            //if not at far left of gallery
                    this.calc(-1);      //move gallery left
        break; 
                    } 

        }
    },  

注:実際には現在、imageflow コンストラクターにコードがありますが、機能しません (まとめて削除しても効果はありません)。

    /* ==== right arrow ==== */
    this.arR.onclick = this.arR.ondblclick = function () {
        if (this.parent.view < this.parent.NF - 1)
            this.parent.calc(1);
    }
    /* ==== Left arrow ==== */
    this.arL.onclick = this.arL.ondblclick = function () {
        if (this.parent.view > 0)
            this.parent.calc(-1);
    }

比較的基本的な何かが欠けていると思います。

4

2 に答える 2

0

OK、ジェイソンのおかげで私はどこかに行きました! steven.tlvweb.com を見て、左右の矢印キーが機能していることを確認してください。

只今回線トラブル中です

this.parent.scroll(120);

基本的に、スクロールはプロトタイプでセットアップされ、整数を取り、正か負かに応じて左または右に移動します。私はそれを正しく呼んでいないようです。

this.parent.scroll(event.wheelDelta);

コンストラクターの正しいコーディングですが、 window.document.onkeydown=function() 内では機能しません。

function ImageFlow(oCont, xmlfile, horizon, size, zoom, border, start, interval) {

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


/* ==== add keydown events ==== */  
    window.document.onkeydown=function(){
    switch (event.keyCode) {

    case 39:  //right Key
        alert('keyRight'); //move gallery right
        this.parent.scroll(120);

        break;

    case 37: //left Key

        alert('keyleft'); //move gallery left   
        this.parent.scroll(-120);
        break;

    }

    return false;
    }
}

ImageFlow.prototype = {

    scroll : function (sc) {

        alert('here');

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

}
于 2012-12-12T12:09:47.050 に答える
0

JSFiddle で、より単純な例を作成しました。

http://jsfiddle.net/nLaGz/

<div id="imageFlow">基本的に、キーボード イベントを、基本的に要素を表す this.oc オブジェクトにアタッチしようとしているようです。

問題は、<div>要素が入力要素ではないため、フォーム入力のように実際に「フォーカス」を得ることがないため、キーボードイベントでうまく機能しないことです。

幸いなことに、window.document オブジェクトはキーボード イベントをアタッチするのに適した場所です。どの dom 要素にフォーカスがあってもリッスンするからです。

行を変更してみてください:

this.oc.onkeydown

window.document.onkeydown
于 2012-12-12T00:02:55.877 に答える