我有一个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错误“Object expected”。 我是javascript的新手,不知道我哪里出错了。
非常感谢任何帮助。
答案 0 :(得分:1)
您的问题出在setInterval
上。你传给它一个字符串!这使得它使用eval
!这意味着代码在全局范围内运行,因此vScroll
不存在。
相反,将函数传递给setInterval
:
setInterval(function(){
vScroll.move();
}, 20);
使用&#34; context&#34;调用传递给setInterval
的函数。 (this
值)设置为null
,因此您无法将vScroll.move
直接传递给setTimeout
。但是,你可以。做:
setInterval(vScroll.move.bind(vScroll), 20);
但这并不适用于所有浏览器。
P.S。将字符串传递给setInterval
是不好的做法,您应该始终传递函数。