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.move直接传递给setTimeout。但是,您可以。做:

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

但这不适用于所有浏览器。

PS 传递一个字符串setInterval是不好的做法,你应该总是传递一个函数。

于 2013-09-25T14:45:55.250 回答