Js无缝滚动代码

一个中级的上、下、左、右滚动代码,Js无缝滚动代码,可以控制滚动速度、滚动方向,而且考虑到了obj.style.attr只能获取到行内样式,因而还增加了JS判断获取确切的外补丁,以消除非行内样式的外补丁对无缝衔接的影响。JS通过四次循环内部元素的方式来保持滚动,所以只要原始内容尺寸超过容器对应尺寸的1/4就能滚动,降低了之前两次循环元素时的滚动门槛。
  第一个参数 con_id 是用于JS找到元素的,是滚动元素的id。
  第二个参数 speed_num 是用来设置滚动速度的,数值越大,滚动速度越慢;单位默认是毫秒,不用写,只要写个正整数即可。
  第三个参数 direct 是用来控制滚动方向的,top/bottom/left/right,如果不是这四个值,则水平滚动默认向左,竖直滚动默认向上。注意几点:
  1、水平滚动的容器id给出的容器能且仅能有一个直接子节点!

  2、使用方式是在页面头部引入此文件,在需要滚动的容器的闭合标签后调用对应的滚动方法scrollSP(con_id,speed,direct)、scrollSZ(con_id,speed,direct)。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>滚动代码</title>
<style>
*{ margin:0; padding:0;}
ul,li{ list-style:none;}
.top_1{ height:100px; width:200px; border:1px solid #333333; margin:0 auto;}
.top_1 p{ height:30px; line-height:30px; margin-top:10px;}
.left_1{ width:500px; height:100px; margin:0 auto;}
.left_1 ul{}
.left_1 li{ float:left; width:120px; height:100px; line-height:100px; text-align:center;}
.left_1 p{ width:50px; he
	100px; line-height:100px;}
.left_1_i div{ width:100px; height:100px; line-height:100px; border:1px solid #e5e5e5; margin-left:10px; padding-left:10px;}	
</style>
<script language="javascript">
function scrollSZ(con_id,speed,direct){
	var con,items,heightHalf,heightAll;
	var timer;
	speed = parseInt(speed);//获取设置的速度参数
	con = document.getElementById(con_id);
	con.style.overflow = "hidden";
	if(direct == "top"){
		direct = "top";
	}else if(direct == "bottom"){
		direct = "bottom";
	}else{
		direct = "top";
	}
	
	con.innerHTML +=con.innerHTML;
	con.innerHTML +=con.innerHTML;
	items = getChildNodes(con);
	if(items.length < 1){
		return;
	}
	heightAll = 0;
	for(var i=0;i<items.length;i++){
		var numTop,numBottom;
		if (!!window.ActiveXObject){
			numTop = items[i].currentStyle["marginTop"];
			numBottom = items[i].currentStyle["marginBottom"];
		}else{
			numTop = document.defaultView.getComputedStyle(items[i],null)["marginTop"];
			numBottom = document.defaultView.getComputedStyle(items[i],null)["marginBottom"];
		}
		numTop = parseInt(numTop);
		numBottom = parseInt(numBottom);
		numTop += numBottom;
		if(numTop >0){
			heightAll += numTop;
		}
		heightAll += items[i].offsetHeight;
	}
	heightHalf = heightAll/2;
	if(direct == "bottom"){
		con.scrollTop = heightHalf;
		timer = setInterval(_scrollBottom,speed);		
	}else if(direct == "top"){
		timer = setInterval(_scrollTop,speed);
	}
	con.onmouseover = function(){
		if(timer){
			clearInterval(timer);
			timer = null;
		}
	};
	con.onmouseout = function(){
		if(!timer){
			if(direct == "top"){
				timer = setInterval(_scrollTop,speed);
			}else if(direct == "bottom"){
				timer = setInterval(_scrollBottom,speed);
			}
			
		}
	};
	function _scrollTop(){
		if(con.scrollTop < heightHalf){
			con.scrollTop += 2;
		}else{
			con.scrollTop = 0;
		}
	}
	function _scrollBottom(){
		if(con.scrollTop > 0){
			con.scrollTop -= 2;
		}else{
			con.scrollTop = heightHalf;
		}
	}
}

function scrollSP(con_id,speed,direct){
	var con,innerCon,timer,items,widthAll,widthHalf;
	speed = parseInt(speed);
	con = document.getElementById(con_id);
	con.style.overflow = "hidden";
	items = getChildNodes(con);
	if(items.length == 1){
		innerCon = items[0];
	}else{	
		return;
	}
	innerCon.innerHTML += innerCon.innerHTML;
	innerCon.innerHTML += innerCon.innerHTML;
	items = getChildNodes(innerCon);
	if(items.length<1){
		return;
	}
	widthAll = 0;
	for(var i=0;i<items.length;i++){
		
	}
	
	for(var i=0;i<items.length;i++){
		var numLeft,numRight;
		if (!!window.ActiveXObject){
			items[i].style.styleFloat = "left";
			numLeft = items[i].currentStyle["marginLeft"];
			numRight = items[i].currentStyle["marginRight"];
		}else{
			items[i].style.cssFloat = "left";
			numLeft = document.defaultView.getComputedStyle(items[i],null)["marginLeft"];
			numRight = document.defaultView.getComputedStyle(items[i],null)["marginRight"];
		} 
		numLeft = parseInt(numLeft);
		numRight = parseInt(numRight);
		numLeft += numRight;
		if(numLeft>0){
			widthAll += numLeft;
		}
		widthAll += items[i].offsetWidth;
	}
	widthHalf = widthAll/2;	
	innerCon.style.width = widthAll+"px";
	if(direct == "left"){
		direct = "left";
	}else if(direct == "right"){
		direct = "right";
	}else{
		direct = "left"
	}
	if(direct == "left"){
		timer = setInterval(_scrollLeft,speed);
	}else if(direct == "right"){
		con.scrollLeft = widthHalf;
		timer = setInterval(_scrollRight,speed);
	}
	con.onmouseover = function(){
		if(timer){
			clearInterval(timer);
			timer = null;
		}
	}
	con.onmouseout = function(){
		if(direct == "left"){
			timer = setInterval(_scrollLeft,speed);
		}else{
			timer = setInterval(_scrollRight,speed);
		}
	}
	function _scrollLeft(){
		
		if(con.scrollLeft<widthHalf){
			con.scrollLeft += 2;
		}else{
			con.scrollLeft = 0;
		}
	}
	function _scrollRight(){
		if(con.scrollLeft>0){
			con.scrollLeft -= 2;
		}else{
			con.scrollLeft = widthHalf;
		}
	}
}
function getChildNodes(obj){//获取元素子节点
	var childList,list;
	childList = new Array();
	list = obj.childNodes;
	for(var i=0;i<list.length;i++){
		if(list[i].nodeType == 1)
		childList[childList.length] = list[i];
	}
	return childList;
}
</script>
</head>

<body>
<div id="top_1" class="top_1">
	<p>1</p>
    <p>2</p>
    <p>3</p>
    <p>4</p>
    <div>b</div>
    <p>5</p>
    <p>6</p>
    <p>7</p>
    <div>a</div>
</div>
<script language="javascript">scrollSZ("top_1",10,"bottom");</script>
<div id="left_1" class="left_1">
	<div class="left_1_i">
		<p>1</p>
	    <p>2</p>
	    <p>3</p>
	    <p>4</p>
	    <div>b</div>
	    <div>a</div>
	</div>
</div>
<script language="javascript">scrollSP("left_1",10,"right");</script>
</body>
</html>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值