使用 JS 实现文字上下跑马灯
Ø 前言
今天在做商城首页时,遇到一个上下跑马灯功能,因为之前也只是接触过左右的跑马灯,一时还不知道从何下手。在网上看了几个 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 实现文字上下跑马灯的更多相关文章
- 使用 JS 实现文字左右跑马灯
Ø 前言 其实,前面两篇已经基本上实现了图片.文字跑马灯,这里为什么还要学下文字左右跑马灯呢?因为,虽然基本一样,但实现起来还是有很大不同的,所以为了完整再补充一下.代码如下: 1. 首先定义 ...
- 使用 JS 实现图片左右跑马灯
Ø 前言 之前写了一篇使用 JS 实现文字上下跑马灯,现在乘热打铁在把图片左右跑马灯一起贴出来,不多说直接看代码. 1. 首先定义 css 样式 <style type="tex ...
- CSS文字的跑马灯特效
上学时同学有个来电带跑马灯的手机,可把我羡慕坏了,可等我买的起手机时,跑马灯不流行了,甚伤萝卜心! 今天就用CSS做个文字的跑马灯特效,缅怀一下本萝卜逝去的青春! 道具:会敲代码的巧手.七窍玲珑心.会 ...
- Unity3D 文字滚动跑马灯效果
需求 在日常游戏中,文字滚动效果是比较常用的.例如日常游戏顶部的新闻公告,聊天系统的文字滚动,都属于这个范围. 思路 由于使用的地方比较广泛,所以希望能够尽量独立的游戏之外,能够做到随处使用的功能.N ...
- JS写一个列表跑马灯效果--基于touchslide.js
先放上效果图: 类似于这样的,在列表中循环添加背景样式的跑马灯效果. 准备引入JS插件: <script type="text/javascript" src="x ...
- jquery.marquee.js - 有点奇怪的跑马灯动画,不过还是加上去了
客户想要一个跑马灯的效果,最终我用了jquery.marquee.js. 这个库很简单就能用. 效果是这样,从左到右,移动速度都不一样. 1. HTML <div class="mar ...
- JavaScript实现文字跑马灯
其实实现文字的跑马灯和实现图片轮播的原理是一样的. 下面是我自己实现的,文字的位置可以随便更改,效果不会变,文字的内容可以通过ajax获取,同时,可以直接用Jquery改写一下,很方便. <!D ...
- android使用TextView实现跑马灯的效果(1)
android使用TextView实现跑马灯的效果 1.activity_main.xml <?xml version="1.0" encoding="utf-8& ...
- android实现跑马灯效果
第一步:新建一个新项目,MarqueeTextView 首先为了观察到跑马灯效果,将要显示的文字极可能 写长.在strings.xml目录里面将 <string name="hello ...
随机推荐
- 「SDOI2014」重建 解题报告
「SDOI2014」重建 题意 给一个图\(G\),两点\((u,v)\)有边的概率是\(p_{u,v}\),求有\(n-1\)条边通行且组成了一颗树的概率是多少. 抄了几个矩阵树定理有趣的感性说法 ...
- 数组拆分I
题目描述 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最 ...
- JDK8中的并行流
1.IntStream.parallel():获取并行流处理 2. Collection中调用parallelStream()获取并行流 3.并行排序Arrays.parallelSort()
- 牛客寒假算法基础集训营3B 处女座的比赛资格(用拓扑排序解决DAG中的最短路)
链接:https://ac.nowcoder.com/acm/contest/329/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 五大理由分析Springboot 2.0为什么选择HikariCP
五大理由分析Springboot 2.0为什么选择HikariCP 2018-05-04 工匠小猪猪 占小狼的博客 本文非原创,是工匠小猪猪的技术世界搜集了一些HikariCP相关的资料整理给大家的介 ...
- Developing JSF applications with Spring Boot
Developing JSF applications with Spring Boot Spring Boot can leverage any type of applications, not ...
- COGS 2392 2393 2395 有标号的二分图计数
有黑白关系: 枚举左部点(黑色点),然后$2^{i*(n-i)}$处理方法同:COGS 2353 2355 2356 2358 有标号的DAG计数 无关系: 发现,假设$f(i)$是一个连通块,对于一 ...
- [THUWC2017]在美妙的数学王国中畅游
[THUWC2017]在美妙的数学王国中畅游 e和sin信息不能直接合并 泰勒展开,大于21次太小,认为是0,保留前21次多项式即可 然后就把e,sin ,kx+b都变成多项式了,pushup合并 上 ...
- 遍历HTML DOM 树
<!-- NodeIterator --> <!DOCTYPE html> <html> <head> <meta charset="u ...
- poj1456 Supermarket
书上用的方法是正着按照天数推,如果任务大于小根堆顶就替换,天数多于任务就加. 而我依稀记得以前洛谷上有一题也是这个,用时光倒流来求解,天数倒推,加任务,取大根堆顶即可. 我的代码实现: #includ ...