javascript实例:逐条记录停顿的走马灯

简介:

效果:

需求:

1.记录循环滚动;

2.每组记录之间不能有留白;

3.每条记录上移到容器的顶部时要停顿一下;

4.鼠标移入容器时停止滚动,移出时继续滚动。

 

曾想用的实现方法:

1.使用Marquee:本来想用Marquee搞定,使用十分方便,但不满足需求2,3,加上只能用于IE浏览器。。。。。。。。

2.使用Jquery:我没有学过Jquery,只是简单调用同事的方法,但发现居然出现语法错误,同事也只是从网上拷过来不懂得哪里出错。。。。。。

于是只好硬着头皮自己写一个吧!

我的思路是:当最顶的记录完全移出容器时,把该记录移动到所有记录的底部

(图很丑但很温柔^_^)

下面是实现:(ie6、7、8,chrome都OK!)

css文件



<style type="text/css">
   #divContainer{
    width:110px;
    height:100px;
    overflow:hidden;
    border:none 0;/*如果不设置IE上border虽然看不到但宽度依然为1px*/ 
} 
    .item{
    position:relative;
    border:none 0;/*原因同上*/
    word-break:break-all;
    word-wrap:break-word;
    line-height:25px;
}
    </style>

html:
<div id="divContainer">
        <div class="item" style="top:0;color:orange">1.abcdefghijklmnopqrstuvwsyz</div>
        <div class="item"  style="top:0;color:blue">2.0123456789</div> 
        <div class="item"  style="top:0;color:red">3.一行中文字符</div> 
        <div class="item"  style="top:0;color:green">4.多行中文字符,今天天气真好啊!!</div> 
   </div>

注意:每条记录的div必须在内嵌的style中设定top为0,否则在js中获取的是空字符串。

js:

<script type="text/javascript">
function MessageLooper(){
    var divs = document.getElementById("divContainer").getElementsByTagName("div");
      for(var i=0;i<divs.length;++i)
        {
            divs[i].style.top=(parseInt(divs[i].style.top.replace("px"))-1)+"px"; 
        }
        if(divs[0].offsetHeight+parseInt(divs[0].style.top.replace("px"))<0)
        {
            var divs1 =  divs[0];
            for(var j=1;j<divs.length;++j)
           {
                 divs[j].style.top=(parseInt(divs[j].style.top.replace("px"))+divs1.offsetHeight+1)+"px"; 
           }
           document.getElementById("divContainer").removeChild(divs1);
           divs1.style.top="0" ;
           document.getElementById("divContainer").appendChild(divs1);
          
           clearInterval(setupML);
           toML=setTimeout("setupML=setInterval(MessageLooper,80);",800);/*逐条记录停顿*/
        }
}
  /*完成需求4的功能*/
if(document.getElementById("divContainer").childNodes.length!=0){
    setupML = setInterval(MessageLooper,80);
    document.getElementById("divContainer").onmouseover=function(){clearInterval(setupML);if(typeof(toML)!="undefined")clearTimeout(toML)}
    document.getElementById("divContainer").onmouseout=function(){setupML=setInterval(MessageLooper,80)}
} 
</script>

注意点:

1.offsetTop和style.top的区别:

(1)offsetTop指的是元素上外边框离父容器上外边框的Y轴距离(单位px);style.top指的是元素上外边框离自己原来位置上外边框的Y轴距离(单位px)。

当容器的position设置为relative时子元素的offsetTop才是子元素离容器上边框的距离,否则为子元素离浏览器工作区上边框的距离。

(2)offsetTop为只读属性,值为纯数字;style.top为可读可写属性,值如12px这样的字符串。

因为offsetTop为只读,最终控制元素位置要用style.top,而两者表达的含义又有所区别,所以这里我直接用style.top来获取定位和设置定位。

2.因为要将头元素移动到其他兄弟元素的后面,这个移动过程会使其他兄弟元素的定位发生变化,均向上移动了头元素高度的距离,所以要为各个兄弟元素的style.top加上头元素的高度。

目录
相关文章
|
3月前
|
前端开发 JavaScript
基础 JavaScript 实例
基础 JavaScript 实例
26 1
|
8月前
|
数据可视化 JavaScript 架构师
D3.js实战:数据可视化高级技巧实例应用
本文介绍了D3.js入门,包括创建HTML文件引入库、绘制简单线图、柱状图和饼图。示例展示了数据绑定、交互性和动画效果,如柱状图的悬停效果和线图的数据平滑过渡。此外,还提及力导向图和地图可视化的实现,以及使用Enter, Update, Exit模式进行动态更新。最后提到了复杂图表和高级技巧,如使用组件库、动画、交互性和性能优化。
175 0
|
3月前
|
JavaScript 前端开发
原生js实现走马灯效果
原生js实现走马灯效果
47 0
|
3月前
|
JavaScript 前端开发
JavaScript走马灯实现
JavaScript走马灯实现
|
5月前
|
JavaScript
js之选项卡制作实例
js之选项卡制作实例
38 0
|
6月前
|
设计模式 缓存 JavaScript
js设计模式实例
【7月更文挑战第2天】JavaScript设计模式包含工厂、单例、建造者、抽象工厂和代理模式等,它们是最佳实践和可重用模板,解决创建、职责分配和通信等问题。例如,工厂模式封装对象创建,单例确保全局唯一实例,建造者模式用于复杂对象构建,抽象工厂创建相关对象集合,而代理模式则控制对象访问。这些模式提升代码质量、可读性和灵活性,是高效开发的关键。
46 0
|
7月前
|
前端开发 JavaScript 容器
程序技术好文:纯原生javascript下拉框表单美化实例教程
程序技术好文:纯原生javascript下拉框表单美化实例教程
124 0
|
7月前
|
JavaScript BI
技术笔记:JS获取子节点、父节点和兄弟节点的方法实例总结
技术笔记:JS获取子节点、父节点和兄弟节点的方法实例总结
115 0
|
7月前
|
JavaScript 前端开发
JS走马灯小功能制作
JS走马灯小功能制作
37 0