JavaScript 错误:预期对象

JavaScript Error: Object expected

本文关键字:对象 错误 JavaScript      更新时间:2023-09-26

我有一个HTML页面,其中包含一个从右到左滚动文本的div;以下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的新手,不知道我哪里出错了。

任何帮助将不胜感激。

你的问题出在你的setInterval上。 你正在传递它一个字符串! 这使得它使用eval! 这意味着代码在全局范围内运行,因此vScroll不存在。

相反,将函数传递给setInterval

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

传递给setInterval的函数在"context"(this值)设置为null的情况下被调用,因此你不能将vScroll.move直接传递给setTimeout。 但是,您可以。做:

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

但这并非适用于所有浏览器。

附言:将字符串传递给setInterval是一种不好的做法,您应该始终传递一个函数。