Ø  前言

今天在做商城首页时,遇到一个上下跑马灯功能,因为之前也只是接触过左右的跑马灯,一时还不知道从何下手。在网上看了几个 demo,并亲自运行了一下,是可以实现的。但是,能运行不知其所以然也不行,所以还需要自己编码去真正的理解,下面是我的示例。

1.   首先定义 css 样式

#div1{

width: 180px;

margin: auto;

border: 1px solid blue;

overflow: hidden;   /*必须设置该属性*/

}

.child{

width: 100%;

height: 100%;

text-align: center;

line-height: 30px;

}

2.   Js 代码

var div1;           //外层div

var height = 30;    //外层div高度

var rollIndex = 0;  //当前滚动的索引

var millisec = 2000;    //滚动间隔时间(毫秒)

var intervalIds = new Array();  //计时器 id 数组

var datas = ["上下滚动跑马灯1", "上下滚动跑马灯2", "上下滚动跑马灯3"];

window.onload = function() {

div1 = document.getElementById("div1");

div1.style.height = height + "px";

//鼠标进入停止滚动

div1.onmouseover = function() {

clearInterval(intervalIds[0]);

}

//鼠标离开开始滚动

div1.onmouseout = function() {

intervalIds[0] = setInterval("addItem()", millisec);

}

addItem();  //首先加载第一项

intervalIds[0] = setInterval("addItem()", millisec);

}

//添加滚动项

function addItem(){

var content = datas[rollIndex];

console.log("滚动item: " + rollIndex)

if(div1.childNodes.length <= 1) {

var div = document.createElement("div");

div.setAttribute("class", "child");

div.innerHTML = content;

div1.appendChild(div);

//设置两个 div 的背景色

if(rollIndex % 2 == 0)

div.style.background = "#EEE9E9";

else

div.style.background = "#F0FFF0";

}

else {

div1.childNodes[0].innerHTML = content;

div1.appendChild(div1.childNodes[0]);

div1.scrollTop = 0; //兼容Firefox

}

rollIndex++;

rollIndex = rollIndex < datas.length ? rollIndex : 0;

if(div1.childNodes.length > 1) {

clearInterval(intervalIds[1]);

intervalIds[1] = setInterval("setScroll()", 20);

}

}

//设置外层div.scrollTop

function setScroll(){

div1.scrollTop++;

if(div1.scrollTop >= height) {

clearInterval(intervalIds[1]);

console.log("stop");

}

}

3.   Html 代码

<div id="div1"></div>

4.   运行效果

Ø  总结

看代码其实并不难,但是当时我还真没看明白是如何实现滚动的。

其实是这样:

1.   首先加如一个div。

2.   然后再追加一个div,此时开始滚动(第一个div慢慢从上面移除,第二个div就随着从下面浮现出来)。

3.   第三次进入,就不再追加div了,只是将第一个的内容(也就是innerHTML)改变成新的内容,然后再将这个div重新追加(其实是调换了位置(这点很重要))到下面,然后再次滚动就看到了新的内容的div了,最后就这样反复循环。

使用 JS 实现文字上下跑马灯的更多相关文章

  1. 使用 JS 实现文字左右跑马灯

    Ø  前言 其实,前面两篇已经基本上实现了图片.文字跑马灯,这里为什么还要学下文字左右跑马灯呢?因为,虽然基本一样,但实现起来还是有很大不同的,所以为了完整再补充一下.代码如下: 1.   首先定义 ...

  2. 使用 JS 实现图片左右跑马灯

    Ø  前言 之前写了一篇使用 JS 实现文字上下跑马灯,现在乘热打铁在把图片左右跑马灯一起贴出来,不多说直接看代码. 1.   首先定义 css 样式 <style type="tex ...

  3. CSS文字的跑马灯特效

    上学时同学有个来电带跑马灯的手机,可把我羡慕坏了,可等我买的起手机时,跑马灯不流行了,甚伤萝卜心! 今天就用CSS做个文字的跑马灯特效,缅怀一下本萝卜逝去的青春! 道具:会敲代码的巧手.七窍玲珑心.会 ...

  4. Unity3D 文字滚动跑马灯效果

    需求 在日常游戏中,文字滚动效果是比较常用的.例如日常游戏顶部的新闻公告,聊天系统的文字滚动,都属于这个范围. 思路 由于使用的地方比较广泛,所以希望能够尽量独立的游戏之外,能够做到随处使用的功能.N ...

  5. JS写一个列表跑马灯效果--基于touchslide.js

    先放上效果图: 类似于这样的,在列表中循环添加背景样式的跑马灯效果. 准备引入JS插件: <script type="text/javascript" src="x ...

  6. jquery.marquee.js - 有点奇怪的跑马灯动画,不过还是加上去了

    客户想要一个跑马灯的效果,最终我用了jquery.marquee.js. 这个库很简单就能用. 效果是这样,从左到右,移动速度都不一样. 1. HTML <div class="mar ...

  7. JavaScript实现文字跑马灯

    其实实现文字的跑马灯和实现图片轮播的原理是一样的. 下面是我自己实现的,文字的位置可以随便更改,效果不会变,文字的内容可以通过ajax获取,同时,可以直接用Jquery改写一下,很方便. <!D ...

  8. android使用TextView实现跑马灯的效果(1)

    android使用TextView实现跑马灯的效果 1.activity_main.xml <?xml version="1.0" encoding="utf-8& ...

  9. android实现跑马灯效果

    第一步:新建一个新项目,MarqueeTextView 首先为了观察到跑马灯效果,将要显示的文字极可能 写长.在strings.xml目录里面将 <string name="hello ...

随机推荐

  1. [HNOI2007]梦幻岛宝珠(背包)

    给你N颗宝石,每颗宝石都有重量和价值.要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为,并输出最大的总价值.数据范围:N<=100;W<=2^30,并且保证每颗宝石的重量符 ...

  2. smtp

    新闻系统的定时通知初步有三种实用方式,1.短信 2.邮箱 3.微信 短信就不得不使用第三方平台,虽说5分一条,但耐不住量大,一天1000条的话,50元也是一笔不小的支出. 这时,邮箱和微信的优势就体现 ...

  3. Gym-100451B:Double Towers of Hanoi

    题目链接 题目大意:把汉诺双塔按指定顺序排好的最少步数 我写这题写了很久...终于发现不dp不行 把一个双重塔从一根桩柱移动到另一根桩柱需要移动多少次? 最佳策略是移动一个双重 (n-1) 塔,接着移 ...

  4. Hyper-V:无法打开虚拟机XXX,因为虚拟机监控程序未运行

    异常处理汇总-服务器系列:http://www.cnblogs.com/dunitian/p/4522983.html 异常处理汇总-开发工具  http://www.cnblogs.com/duni ...

  5. Linux中OBS在Wayland环境下黑屏只显示鼠标的应对措施

    本文写于2018-02-10.截至到此文完成时,没有已知的方法可以让OBS在Wayland环境下正常工作. 解决方法 放弃使用Wayland,改用X Window 在Wanyland上录制屏幕,可以使 ...

  6. 既然写CSS很容易,那为什么大家还是把CSS写的那么烂呢?

    在众成翻译上看到一篇不错的css文章,所以就给转过来. 在你开始阅读这篇文章之前,一定要做好心理准备.因为我写的 90% 都是在发牢骚,只有最后大概 10% 介绍 CSS 技巧之最佳实践.提前给你们打 ...

  7. RSA签名验证

    /// <summary> /// 验证签名 /// </summary> /// <param name="content">待签名字符串&l ...

  8. '新', '泽' - ImageMagick - UTF-8非最短形式及编码安全问题

    最近偶然发现,把软件放到 [新建文件夹]  中,ImageMagick 竟无法正常的加载图片了. 我去!什么情况? 抛出的错误是找不到相关的dll,软件中已对中文进行了utf-8编码,这几年来一直没发 ...

  9. Constructor >> @Autowired >> @PostConstruct

    从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象p与对象a,才能执行注入.所以,如果一个类A中有个成员变量p被@Autowired注解,那么@Autowired注入是发 ...

  10. Go结构体

    当我们要表示同一种数据类型时候,可以用到数组,切片和字典. 当我们要表示不同的数据类型呢?这时候就要用到结构体了 一:定义struct 关键字 type 和 struct 来定义结构体 type st ...