使用 JS 实现文字左右跑马灯
Ø 前言
其实,前面两篇已经基本上实现了图片、文字跑马灯,这里为什么还要学下文字左右跑马灯呢?因为,虽然基本一样,但实现起来还是有很大不同的,所以为了完整再补充一下。代码如下:
1. 首先定义 css 样式
#div1 {
width: 500px;
height: 50px;
border: 1px solid black;
margin: 100px auto;
/*overflow: hidden;*/
position: relative;
}
.div {
width: 288px;
height: 30px;
line-height: 30px;
margin: auto;
position: absolute;
left: 0;
top: 0;
display: inline-block;
border: 1px solid blue;
}
2. HTML 代码
<div id="div1">
<div class="div">我是一段文字,用于实现跑马灯功能~</div>
<div class="div">我也是一段文字,用于实现跑马灯功能~</div>
<!--<div class="div">我还是一段文字,用于实现跑马灯功能~</div>-->
</div>
3. JS 代码
function $(str) { return (document.getElementById(str)); }
var div1; //外层div元素
window.onload = function() {
init();
div1.start();
}
//设置当前滚动元素的 left、top 值
function move(x, y) {
this.style.left = x + 'px';
this.style.top = y + 'px';
}
//重置当前滚动元素
function reset() {
var p = this.parentNode;
this.move(p.offsetWidth, (p.offsetHeight - 2 - this.offsetHeight) / 2);
}
//初始化
function init() {
div1 = $("div1");
div1.currentIndex = 0; //当前滚动元素索引
div1.loopItems = new Array(); //所有的滚动元素数组
div1.timer = null; //计时器Id
div1.speed = 1; //速度值
div1.delay = 10; //下一项延迟时间
div1.start = start;
div1.startLoop = startLoop;
div1.stopLoop = stopLoop;
div1.onmouseout = function() { this.startLoop(); }
div1.onmouseover = function() { this.stopLoop(); }
var divs = div1.getElementsByTagName("div");
//设置所有元素,并加入数组中
for(var i = 0; i < divs.length; i++) {
divs[i].index = i;
divs[i].move = move;
divs[i].reset = reset;
div1.loopItems.push(divs[i]);
}
}
//开始
function start() {
for(var i = 0; i < this.loopItems.length; i++) {
this.loopItems[i].reset();
}
this.startLoop();
}
//开始滚动
function startLoop() {
clearTimeout(this.timer);
if(this.currentIndex >= this.loopItems.length)
this.currentIndex = 0;
var div = this.loopItems[this.currentIndex];
//首先左移
if(div.offsetLeft > 0 - div.offsetWidth) {
div.move(div.offsetLeft - this.speed, div.offsetTop);
} else if(div.offsetTop > 0 - div.offsetHeight) { //再上移
div.move(div.offsetLeft, div.offsetTop - this.speed);
} else { //最后重置元素
div.reset();
this.currentIndex++;
}
this.timer = setTimeout('$("' + this.id + '").startLoop();', this.delay);
}
//停止滚动
function stopLoop() {
clearTimeout(this.timer);
}
4. 运行效果

Ø 知识点梳理
1. 首先定义了 $ 的全局函数,用于根据指定的元素 id 获取元素,是不是有点类似 jQuery ? 哈哈,不要被骗了,只支持 id 查找。
2. 因为元素是使用的 position: absolute;(绝对定位),所以可以使用 element.style.left = xx.px 来定位元素。
3. 无论是外层 div 或内部的移动 div 元素,都使用了将属性或方法直接赋值到元素的属性之上,这样在方法内部就可以直接使用 this 关键字访问到元素。
4. 使用 currentIndex 记录当前移动元素的索引,以及 loopItems 属性用于存储所有移动元素的数组,这样是一个比较合理的设计,视乎有点面向对象的感觉?
5. 在以上示例中,主要根据元素的 offsetLeft、offsetTop、offsetWidth、offsetHeight 等属性来定位移动元素的 left 和 top。
使用 JS 实现文字左右跑马灯的更多相关文章
- 使用 JS 实现文字上下跑马灯
Ø 前言 今天在做商城首页时,遇到一个上下跑马灯功能,因为之前也只是接触过左右的跑马灯,一时还不知道从何下手.在网上看了几个 demo,并亲自运行了一下,是可以实现的.但是,能运行不知其所以然也不行 ...
- 使用 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 ...
随机推荐
- Speech语音播报
System.Speech 这个命名空间,报可以阅读文字和播放音频. 环境 W10 VS2017 CMMT 1.添加程序集引用 System.Speech 2.实例化播音类,并且播放一个文本 Spe ...
- 「SCOI2014」方伯伯的商场之旅 解题报告
「SCOI2014」方伯伯的商场之旅 我一开始的想法会被两个相同的集合位置去重给搞死,不过应该还是可以写的,讨论起来老麻烦. 可以先钦定在\(1\)号点集合,然后往后调整一部分. 具体一点,通过前缀和 ...
- luogu P4299 首都
题目描述 在X星球上有N个国家,每个国家占据着X星球的一座城市.由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的. X星球上战乱频发,如果A国打败了B国,那么B国将永远从这个星球消失, ...
- bzoj2560串珠子(子集dp)
铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子.现在铭铭想用绳子把所有的珠子连接成一个整体. 现在已知所有珠子互不相同,用整数1到n编号.对于第i个珠子和第j个珠子,可以选择不用绳子连接,或者在ci, ...
- shell中定义变量用双引号和单引号以及不用引号的区别
1. 单引号 使用单引号的情况下,不管里面的是否有变量或者其他的表达是都是原样子输出 2. 双引号 如果其定义变量的时候使用双引号的话,则里面的变量或者函数会通过解析,解析完成后再输出内容,而不是把双 ...
- Django反正解析路由
首先要了解为什么要定义反响解析 因为随着功能的增加会出先非常多的视图和对应的路由,有可能项目的一些需要一些模板需要重写路由,或之前配置的正则表达式不够准确,于是就要修改正则表达式,但是路由或正则表达式 ...
- 安全测试之Top 10 漏洞的分析
1. 问题:没有被验证的输入 测试方法: 数据类型(字符串,整型,实数,等) 允许的字符集 最小和最大的长度 是否允许空输入 参数是否是必须的 重复是否允许 数值范围 特定的值(枚举型) 特定的模式 ...
- http uri唯一标识
URI:唯一标识并且信息资源(简单理解为:发邮件的地址,身份证号).uri包括url 比如通过查找一个uri,找到一张图片“https://timgsa.baidu.com/timg?image&am ...
- python学习笔记:python异常的调用原理
因为错误是class,捕获一个错误就是捕获到该class的一个实例.因此,错误并不是凭空产生的,而是有意创建并抛出的.Python的内置函数会抛出很多类型的错误,我们自己编写的函数也可以抛出错误. h ...
- FineUILearning
一:表单控件的学习: 1(1) <f:PageManager > 将对象引用设置到对象的实例,否则页面无法显示: (2)<Menu></Menu>就是下拉菜单控件 ...