Ø  前言

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

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 实现文字左右跑马灯的更多相关文章

  1. 使用 JS 实现文字上下跑马灯

    Ø  前言 今天在做商城首页时,遇到一个上下跑马灯功能,因为之前也只是接触过左右的跑马灯,一时还不知道从何下手.在网上看了几个 demo,并亲自运行了一下,是可以实现的.但是,能运行不知其所以然也不行 ...

  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. Speech语音播报

    System.Speech 这个命名空间,报可以阅读文字和播放音频. 环境  W10 VS2017 CMMT 1.添加程序集引用 System.Speech 2.实例化播音类,并且播放一个文本 Spe ...

  2. github上的面试库

    https://yuchengkai.cn/docs/zh/frontend/#%E5%86%85%E7%BD%AE%E7%B1%BB%E5%9E%8B https://github.com/taiz ...

  3. debugger

    今天爬取cfda时遇到的困难,一旦开启了调试,就debugger pause, ???还有这种操作 一顿google,百度,解决了这个问题,点一下Deactivate breakPoints,然后点一 ...

  4. uWSGI+Nginx安装、配置

    1.关闭SELINUX: [root@PYTHON27 /]# vim /etc/selinux/config 将SELINUX=enforcing修改为SELINUX=disabled 2.关闭防火 ...

  5. js 获取 url 参数

    /** * 根据页面地址获取所有参数对象 * @return Object{} 返回所有参数 * ------------------------------ * 根据页面地址获取指定参数对象 * @ ...

  6. Linux基本命令总结(三)

    接上篇: 11,more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示 ...

  7. Django反正解析路由

    首先要了解为什么要定义反响解析 因为随着功能的增加会出先非常多的视图和对应的路由,有可能项目的一些需要一些模板需要重写路由,或之前配置的正则表达式不够准确,于是就要修改正则表达式,但是路由或正则表达式 ...

  8. vue.js自定义组件directives

    自定义指令:以v开头,如:v-mybind. <input v-mybind /> directives:{ mybind:{ bind:function (el) { el.value ...

  9. 关于Nginx负载均衡的5种策略

    nginx的upstream目前支持的5种方式的分配 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. upstream backserver { ...

  10. c#反射(2)

    public void Test1() { string ClassName="Person"; string MethodName="Test1"; //得到 ...