纯javascript实现广告的无缝滚动

纯javascript实现广告的无缝滚动

给定一个大的div层(<div class="content" id="content">),包围ul,超出div层 的部分隐藏。

设置ul标签的position:relative(实现滚动的必要条件)。

下面的例子是向下滚动,我们可以更新ul的top值来实现滚动效果。this.pause就是移动的距离。具体看代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>广告的无缝滚动</title>
<style>
	*{margin:0;padding:0;font-family:微软雅黑;}
	ul{list-style:none;}
	.adMove{border:1px solid #FF0000;width:200px;height:30px;}
	.adMove .content{width:200px;height:30px;border:0px solid #FF0000; overflow:hidden;}
	.adMove ul{height:150px;width:200px;position:relative;}
	.adMove ul li{height:30px;}
	.adMove ul li span{line-height:30px;}
	a{ text-decoration:none;outline:none;blr:expression(this.onFocus=this.blur());}
</style>
</head>
<script type="text/javascript">
	function $(id)
	{
		if( arguments.length==1 && "string" == typeof id)
		{
			return document.getElementById(arguments[0]);
		}
	}
	var Class=
	{
		create:function()
		{
			return function()
			{
				this.initialize.apply(this,arguments);
			}
		}
	}
	var Extend=function(desc,src)
	{
		for(var property in src)
		{
			desc[property]=src[property];
		}
		return desc;
	}
	Object.prototype.extend=function(obj)
	{
		return Extend.apply(this,[this,obj]);
	}
	
	//事件添加,考虑浏览器兼容
	function bind(obj , eventName, eventFn)
	{
		if(obj.addEventListener)
		{
			obj.addEventListener(eventName,eventFn,false);
		}
		else  if(obj.attachEvent)
		{
			obj.attachEvent("on"+eventName, eventFn);
		}
		else 
		{
			obj["on"+eventName]=eventFn;
		}
	}

	var Animate=Class.create();
	Animate.prototype=
	{
		//相当于构造方法
		initialize:function(content,ad,options)
		{
			onMove=this;
			var content=$(content);
			this.adUl=$(ad);
			var adLi=this.adUl.getElementsByTagName("li");        //获取广告li标签
			this.liHeight=adLi[0].offsetHeight;   //获取每一个li标签的高度
			this.liLen=adLi.length;                     //获取li标签的个数
			this.currentLi=0;                             //当前li的位置
			this.setOptions(options);                 //参数设置
			this.pause=0;
			bind(content, "mouseover", function() { onMove.stopMove(); });
   			bind(content, "mouseout", function() { onMove.start(); });
			//开始滚动,但是让第一张也停留一段时间
			this.firstMove=window.setInterval( function() { onMove.start(); }, this.options.pauseTime);   
		},
		setOptions:function(options)
		{	
			this.options=
			{
				step:-1,                         //每秒移动的像素值
				speed:50,                      //移动的速度,每多少毫秒调用一次move,越大越慢
				pauseTime:2000,           //停留的时间
				pauseDis:30                  //每次移动pauseDis这个距离后停留pauseTime (ms)
			};
			Object.extend(this.options, options || {});
		},
		move:function()
		{
			onMove=this;
			var moveStep=this.options.step; //每次移动的像素
			var time=this.options.speed;
			this.pause+=moveStep;
			this.adUl.style.top=this.pause+"px";
			if(this.currentLi==this.liLen-1)  //到了最后一张,马上跳转到第一张,形成无缝滚动
			{
				this.adUl.style.top=0+"px";
				this.pause=0;
				this.currentLi=0;
			} 
			else
			{	
				if(Math.abs(this.pause) % this.options.pauseDis == 0)   //表示是移动距离的倍数
				{
					time=this.options.pauseTime;    //停留
					this.currentLi++;
				}
			}  
			this.moveTime = window.setTimeout(function(){ onMove.move(); }, time);
		},
		start:function()
		{
			clearInterval(this.firstMove);
			this.move();
		},
		stopMove:function()
		{
			clearTimeout(this.moveTime);
		}
	}
	window.οnlοad=function()
	{
		new Animate("content","ad",{pauseDis:30});
	}
</script>
<body>
	<div class="adMove" id="adMove">
		<div class="content" id="content">
			<ul id="ad">
				<li><a href="#"><span>开始滚动</span></a></li>
				<li><a href="#"><span>滚动1</span></a></li>
				<li><a href="#"><span>滚动2</span></a></li>
				<li><a href="#"><span>滚动3</span></a></li>
				<li><a href="#"><span>滚动4</span></a></li>
				<li><a href="#"><span>开始滚动</span></a></li> 
			</ul>
		</div>
	</div>
</body>
</html>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值