![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
html中<div>层的疑问,希望高手帮我解答,谢啦!!!, 详细问题请看补充..
我这里有三个层一个叫dome,一个叫dome1,还一个叫dome2,dome这个层相当一个容器,包含了dome1和dome2,然后这代码的特效就是dome1有内容的话就会...
我这里有三个层 一个叫dome , 一个叫dome1 ,还一个叫 dome2 , dome这个层相当一个容器,包含了dome1和dome2, 然后这代码的特效就是dome1有内容的话就会循环向上滚动。希望您能帮我详细的解析这一段代码,非常感谢啦!!
<SCRIPT language="JavaScript">
var speed=20;
dome2.innerHTML=dome1.innerHTML
function Marquee(){
if(dome2.offsetTop-dome.scrollTop<=0)
dome.scrollTop-=dome1.offsetHeight
else{
dome.scrollTop++
}
}
var MyMar=setInterval(Marquee,speed)
dome.onmouseover=function() {clearInterval(MyMar)}
dome.onmouseout=function() {MyMar=setInterval(Marquee,speed)}
</SCRIPT> 展开
<SCRIPT language="JavaScript">
var speed=20;
dome2.innerHTML=dome1.innerHTML
function Marquee(){
if(dome2.offsetTop-dome.scrollTop<=0)
dome.scrollTop-=dome1.offsetHeight
else{
dome.scrollTop++
}
}
var MyMar=setInterval(Marquee,speed)
dome.onmouseover=function() {clearInterval(MyMar)}
dome.onmouseout=function() {MyMar=setInterval(Marquee,speed)}
</SCRIPT> 展开
1个回答
展开全部
恩。。。
这个你代码不是很全。
不过简单说下!
二个概念的理解。offsetHeight scrollTop 。
前者是说对象的高度,后者是说滚动最顶端到最顶端的距离!不清楚可以百度下别的地方。简单说就是超出浏览器上面看不见的部分。
然后讲解上面的代码:
var speed=20; 这个用来设置setInterval(Marquee,speed) 表示0.02s执行一次Marquee。
function Marquee(){
if(dome2.offsetTop-dome.scrollTop<=0) //dome2的高度减dome滚动到上面的距距离。开始0.
dome.scrollTop-=dome1.offsetHeight
else{
dome.scrollTop++
}
}
//dome2的高度减dome滚动到上面的距距离。开始0.于是执行else语句。
dome.scrollTop++ 这个让最上面的内容隐没在了顶部。而让后面的显示出来了。而且一直加1.
这样造就了滚动的效果!
dome2.innerHTML=dome1.innerHTML
把原始的dome1里面的内容复制到dome2.父元素样式里宽度固定,设置为超出隐藏(overflow:hidden;)
var MyMar=setInterval(Marquee,speed)
Marquee函数每隔speed毫秒便执行。函数执行的效果上面有讲过了。
然后是鼠标事件:
悬浮上函数执行取消。
离开后,继续执行!
这个你代码不是很全。
不过简单说下!
二个概念的理解。offsetHeight scrollTop 。
前者是说对象的高度,后者是说滚动最顶端到最顶端的距离!不清楚可以百度下别的地方。简单说就是超出浏览器上面看不见的部分。
然后讲解上面的代码:
var speed=20; 这个用来设置setInterval(Marquee,speed) 表示0.02s执行一次Marquee。
function Marquee(){
if(dome2.offsetTop-dome.scrollTop<=0) //dome2的高度减dome滚动到上面的距距离。开始0.
dome.scrollTop-=dome1.offsetHeight
else{
dome.scrollTop++
}
}
//dome2的高度减dome滚动到上面的距距离。开始0.于是执行else语句。
dome.scrollTop++ 这个让最上面的内容隐没在了顶部。而让后面的显示出来了。而且一直加1.
这样造就了滚动的效果!
dome2.innerHTML=dome1.innerHTML
把原始的dome1里面的内容复制到dome2.父元素样式里宽度固定,设置为超出隐藏(overflow:hidden;)
var MyMar=setInterval(Marquee,speed)
Marquee函数每隔speed毫秒便执行。函数执行的效果上面有讲过了。
然后是鼠标事件:
悬浮上函数执行取消。
离开后,继续执行!
更多追问追答
追问
当满足上面代码中的 if 条件后 , dome.scrollTop-=dome1.offsetHeight (dome.scrollTop(卷去的部分) 减掉 dome1.offsetHeigh t(高度),然后再把值赋给dome.scrollTop) 这句话是上面意思呢? dome1 现在还有值么? 开始的时候dome1直接把赋值给了dome2 ,那现在dome1的高度还有值么?
追答
if(dome2.offsetTop-dome.scrollTop<=0)
这句话我觉得有点问题:
我理解 if(dome2.offsetTop-dome.scrollTop<=0) //dome2的高度减dome滚动到上面的距距离。开始0.
dome2.offsetTop这个有问题,改为下面的部分语句:
if(dome2.offsetHeight-
这才说的过去。
实现了开始的滚动 但是滚动到条件不成立呢。?
这时候就执行dome.scrollTop-=dome1.offsetHeight
用此时的dome.scrollTop 减去dome1.offsetHeight 这个固定的高度,因为条件不成立的时候想必是滚动增加到相等的时候,减去的时候吧滚动又初始化为了0,从而继续执行else的滚动增加语句,实现滚动效果!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询