0

右から左にスクロールするテキストを含む div を備えた HTML ページがあります。次の JavaScript は、ドキュメントの HEAD タグの間にあります。

function scroll(oid, iid) {
            this.oCont = document.getElementById(oid);
            this.ele = document.getElementById(iid);
            this.width = this.ele.clientWidth;
            this.n = this.oCont.clientWidth;
            this.move = function() {
                this.ele.style.left=this.n + "px"
                this.n--
                if(this.n<(-this.width)){this.n=this.oCont.clientWidth}
            }
        }
        var vScroll
        function setup() {
            vScroll = new scroll("oScroll", "scroll");
            setInterval("vScroll.move()", 20);
            }           
        onload = function(){
            setup()
        }

        $("scroll").hover(function() {
            $("scroll").stop(true, false)
        }, function(){
            scroll();
        });
        scroll();

テキストのスクロールは正常に機能します。ただし、マウスのホバーでスクロールを停止したかったのです。マウス カーソルが div の上を通過すると、テキストのスクロールは停止しますが、「オブジェクトが必要です」という JavaScript エラーが発生します。私はJavaScriptが初めてで、どこが間違っているのかわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

1

あなたの問題はあなたのものsetIntervalです。あなたはそれに文字列を渡しています!これはそれを使用しますeval!つまり、コードはグローバル スコープで実行されるため、vScroll存在しません。

代わりに、関数をsetInterval次のように渡します。

setInterval(function(){
    vScroll.move();
}, 20);

に渡された関数はsetInterval、「コンテキスト」(this値) を に設定して呼び出されるため、に直接null渡すことはできません。ただし、できます。行う:vScroll.movesetTimeout

setInterval(vScroll.move.bind(vScroll), 20);

ただし、これはすべてのブラウザーで機能するわけではありません。

PS文字列を渡すのsetIntervalは悪い習慣です。常に関数を渡す必要があります。

于 2013-09-25T14:45:55.250 に答える