js模拟marquee效果收集

来源:互联网 发布:Ext js proxy api 编辑:程序博客网 时间:2024/04/27 15:53
 文字向上滚动:

<head>
<title>效果演示</title>
</head>
<body>
<h3>建立图层</h3>
<div id="sampleDiv" style="font-size: 12px; line-height: 20px;">
当然你不需要像上面这样全部写出来,你只要修改必要的参数就行了。如果你使用了第一种方法来创建滚动区域,但是又在后面用这种方式修改过了,则以后面的为准。
</div>
<h3>然后调用脚本文件</h3>
<script type="text/javascript">
function scrollingAD(_id, _width, _height, _bgColor, _direction, _delay, _pauseTime, _size, _isHover) {
    
this.id              = _id;
    
this.width           = _width;
    
this.height          = _height;
    
this.bgColor         = _bgColor;
    
this.direction       = _direction;
    
this.delay           = _delay;
    
this.pauseTime       = _pauseTime;
    
this.size            = _size;
    
this.object          = null;
    
this.isMove          = true;
    
    
if((this.id == ""|| (this.id == null)) {
        alert(
"必须输入对象的 ID 才能创建滚动区域!");
        
this.isMove = false;
        
return false;
    }

    
    
if(document.getElementById(this.id)) {
        
this.object = document.getElementById(this.id);
    }
 else {
        window.alert(
"滚动区域创建失败! 请确认 " + this.id + " 是否拼写错误。");
        
this.isMove = false;
        
return false;
    }

}

scrollingAD.prototype.checkNumber 
= function(_attribute, defaultValue) {    
    
if(isNaN(_attribute)) {
        
return defaultValue;
    }
 else {
        
return ((typeof(parseInt(_attribute)) == "number"? parseInt(_attribute) : defaultValue);
    }

}

scrollingAD.prototype.move 
= function() {
    
if(this.isMove == falsereturn false;
    
    
var defaultWidth           = 200;
    
var defaultHeight          = 50;
    
var defaultDelay           = 20;
    
var defaultPauseTime       = 2000;
    
var defaultIsHover         = true;
    
var defaultBgColor         = "transparent";
    
var defaultDirection       = "up";
    
    
this.width          = this.checkNumber(this.width, defaultWidth);
    
this.height         = this.checkNumber(this.height, defaultHeight);
    
this.delay          = this.checkNumber(this.delay, defaultDelay);
    
this.pauseTime      = this.checkNumber(this.pauseTime, defaultPauseTime);
    
this.isHover        = (typeof(this.isHover) == "boolean"? this.isHover : defaultIsHover;
    
    
if(this.direction == "left"{
        
this.size       = this.checkNumber(this.size, this.width);
    }
 else {
        
this.size       = this.checkNumber(this.size, this.height);
    }

    
    
if((this.bgColor == null|| (typeof(this.bgColor) == undefined)) {
        
this.bgColor = defaultBgColor;
    }
 else {
        
this.bgColor = this.bgColor;
    }

    
    
if((this.direction == null|| (typeof(this.direction) == undefined)) {
        
this.direction = defaultDirection;    
    }
 else {
        
this.direction = (this.direction.search(/(^up$)|(^left$)/gi) != -1? this.direction.toLowerCase() : defaultDirection;
    }

    
    
// 创建滚动区域;
    with(this.object) {
        style.display         
= "block";
        style.width           
= this.width + "px";
        style.height          
= this.height + "px";
        style.overflow        
= "hidden";
        style.backgroundColor 
= this.bgColor;
    }

    
    
if(this.direction == "up"{
        
this.object.innerHTML = "<div id="" + this.id + "_mirror">" + this.object.innerHTML + "</div>" + "<div>" + this.object.innerHTML + "</div><input type="hidden" value="1" id="" + this.id + "_isHover" />";
    }
 else {
        
this.object.innerHTML = "<span id="" + this.id + "_mirror">" + this.object.innerHTML + "</span>" + "<span>" + this.object.innerHTML + "</span><input type="hidden" value="1" id="" + this.id + "_isHover" />";
    }

        
    
if(document.getElementById(this.id)) {
        
var evalString;
        
if(this.direction == "up"{
            evalString 
= "scrollToUp("" + this.id + "", " + this.isHover + "" + this.delay + "" + this.size + "" + this.pauseTime + ", 0) ";
        }
 else {
            evalString 
= "scrollToLeft("" + this.id + "", " + this.isHover + "" + this.delay + "" + this.size + "" + this.pauseTime + ", 0) ";
        }

        eval(evalString);
        
    }
 else {
        
return false;
    }

    
    
function pixelToNum(_string)    {
    
//该函数用于去掉数值后面的px,并将之转化为数字。
        if(_string.slice(_string.length - 2== "px"{
            
return parseInt(_string.slice(0, (_string.length - 2)));
        }
 else  {
            
return _string;
        }

    }

    
    
function scrollToLeft(_id, _isHover, _delay, _size, _pauseTime, _s) {
        
var obj = document.getElementById(_id);
        
var mirror = document.getElementById(_id + "_mirror");    
        
        
if(_size*(1 + parseInt(_s)) + pixelToNum(mirror.style.marginLeft) >= 0{
            
var evalString =_id + "_timer = window.setTimeout(function() {scrollToLeft("" + _id + "", " + _isHover + "" + _delay + "" + _size + "" + _pauseTime + "" + _s + ");}, " + _delay + ")";
        
            
if(_isHover) {
                mirror.onmouseover 
= function() {document.getElementById(_id + "_isHover").value = 0;}
                mirror.onmouseout  
= function() {document.getElementById(_id + "_isHover").value = 1;}
                
var step = parseInt(document.getElementById(_id + "_isHover").value);
                mirror.style.marginLeft 
= (pixelToNum(mirror.style.marginLeft) - step) + "px";    
                eval(
"var " + evalString);
            }
 else {                
                mirror.style.marginLeft 
= (pixelToNum(mirror.style.marginLeft) - 1+ "px";    
                eval(
"var " + evalString);
            }

        }
 else {
            
if(mirror.offsetWidth + pixelToNum(mirror.style.marginLeft) >= 0{
                _s 
+= 1;
                window.setTimeout(
function() {scrollToLeft(_id, _isHover, _delay, _size, _pauseTime, _s)}, _pauseTime);
            }
 else {
                mirror.style.marginLeft 
= mirror.offsetWidth + pixelToNum(mirror.style.marginLeft) + "px";;
                window.setTimeout(
function() {scrollToLeft(_id, _isHover, _delay, _size, _pauseTime, 0)}, _pauseTime);
            }

        }

        
    }

    
function scrollToUp(_id, _isHover, _delay, _size, _pauseTime, _s) {
        
var obj = document.getElementById(_id);
        
var mirror = document.getElementById(_id + "_mirror");    
        
        
if(_size*(1 + parseInt(_s)) + pixelToNum(mirror.style.marginTop) >= 0{
            
var evalString =_id + "_timer = window.setTimeout(function() {scrollToUp("" + _id + "", " + _isHover + "" + _delay + "" + _size + "" + _pauseTime + "" + _s + ");}, " + _delay + ")";
        
            
if(_isHover) {
                mirror.onmouseover 
= function() {document.getElementById(_id + "_isHover").value = 0;}
                mirror.onmouseout  
= function() {document.getElementById(_id + "_isHover").value = 1;}
                
var step = parseInt(document.getElementById(_id + "_isHover").value);
                mirror.style.marginTop 
= (pixelToNum(mirror.style.marginTop) - step) + "px";    
                eval(
"var " + evalString);
            }
 else {                
                mirror.style.marginTop 
= (pixelToNum(mirror.style.marginTop) - 1+ "px";    
                eval(
"var " + evalString);
            }

        }
 else {
            
if(mirror.offsetHeight + pixelToNum(mirror.style.marginTop) >= 0{
                _s 
+= 1;
                window.setTimeout(
function() {scrollToUp(_id, _isHover, _delay, _size, _pauseTime, _s)}, _pauseTime);
            }
 else {
                mirror.style.marginTop 
= mirror.offsetHeight + pixelToNum(mirror.style.marginTop) + "px";;
                window.setTimeout(
function() {scrollToUp(_id, _isHover, _delay, _size, _pauseTime, 0)}, _pauseTime);
            }

        }

    }

}

</script>
<h3>最后建立滚动区域</h3>
<script type="text/javascript">
// <![CDATA[
var sampleDiv = new scrollingAD("sampleDiv");
sampleDiv.width 
= 200;
sampleDiv.height 
= 20;
sampleDiv.pauseTime 
= 0;
sampleDiv.direction 
= "right";
sampleDiv.bgColor 
= "yellow";
sampleDiv.move();
// ]]>
</script>
<p>如果脚本报错,可能是因为我的网站速度连接太慢的原因,只要刷新一下页面就行了。</p>
</body>
</html>

图片向上滚动

<div id=demo style=overflow:hidden;height:150;width:150
background:#
214984;color:#ffffff> 
<div id=demo1> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
</div> 
 
<div id=demo2></div> 
 
</div> 
   
<script> 
   var speed
=30 
   demo2.innerHTML
=demo1.innerHTML //克隆demo1为demo2 
   
function Marquee(){ 
//当滚动至demo1与demo2交界时 
if(demo2.offsetTop-demo.scrollTop<=0)   
demo.scrollTop
-=demo1.offsetHeight //demo跳到最顶端 
else
demo.scrollTop
++ 
   } 
   } 
   var MyMar
=setInterval(Marquee,speed)//设置定时器 
//鼠标移上时清除定时器达到滚动停止的目的 
   demo.onmouseover
=function() {clearInterval(MyMar)} 
//鼠标移开时重设定时器 
   demo.onmouseout
=function(){MyMar=setInterval(Marquee,speed)} 
</script> 

图片乡下滚动

  <div id=demo style=overflow:hidden;height:150;width:150
background:#
214984;color:#ffffff> 
<div id=demo1> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
</div> 
<div id=demo2></div> 
</div> 
    
<script> 
    var speed
=30 
    demo2.innerHTML
=demo1.innerHTML 
    demo.scrollTop
=demo.scrollHeight 
    
function Marquee(){ 
    
if(demo1.offsetTop-demo.scrollTop>=0
    demo.scrollTop
+=demo2.offsetHeight 
    
else
    demo.scrollTop
-- 
    } 
    } 
    var MyMar
=setInterval(Marquee,speed) 
    demo.onmouseover
=function() {clearInterval(MyMar)} 
    demo.onmouseout
=function() {MyMar=setInterval(Marquee,speed)} 
  
</script> 


  <div id=demo style=overflow:hidden;height:150;width:150
background:#
214984;color:#ffffff> 
<div id=demo1> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
 
<img src="attachments/month_0707/220077293150.gif"> 
</div> 
<div id=demo2></div> 
</div> 
    
<script> 
    var speed
=30 
    demo2.innerHTML
=demo1.innerHTML 
    demo.scrollTop
=demo.scrollHeight 
    
function Marquee(){ 
    
if(demo1.offsetTop-demo.scrollTop>=0
    demo.scrollTop
+=demo2.offsetHeight 
    
else
    demo.scrollTop
-- 
    } 
    } 
    var MyMar
=setInterval(Marquee,speed) 
    demo.onmouseover
=function() {clearInterval(MyMar)} 
    demo.onmouseout
=function() {MyMar=setInterval(Marquee,speed)} 
  
</script> 

向左滚动,带控制条

<script> 
var speed
=30 
demo2.innerHTML
=demo1.innerHTML 
function Marquee(){ 
if(demo2.offsetWidth-demo.scrollLeft<=0
demo.scrollLeft
-=demo1.offsetWidth 
else
demo.scrollLeft
++ 


var MyMar
=setInterval(Marquee,speed) 
demo.onmouseover
=function() {clearInterval(MyMar)} 
demo.onmouseout
=function() {MyMar=setInterval(Marquee,speed)} 
</script> 

下面是解释:

offsetWidth是指物体可见宽度 
scrollLeft是指滚动滑块在滚动条上的位置 
<!--对于此例,网页中一般会有三个容器,此处为demo,demo1和demo2;其中demo1和demo2均在demo中 
demo的overflow属性一般为hidden,我在这里用auto是为了方便你查看scrollLeft的状态, 
另外为方便你理解scrollLeft和offsetWidth,我还在后面加了一个viewstatus函数,鼠标经过容器时会看到相关参数值 
//--> 
<div id=demo style="width:200;overflow:auto"> 
<table><tr> 
<td id=demo1> 
<img src='a.gif' width=100><img src='b.gif' width=100></td> 
<td id=demo2></td> 
</tr></table> 
</div> 

<script> 
var speed
=30 //定义速度,实指下面滚动函数的执行间隔,值越小滚动越快 
demo2.innerHTML
=demo1.innerHTML //将demo1中的内容复制到demo2 
function Marquee(){ //开始定义滚动函数 
if(demo2.offsetWidth-demo.scrollLeft<=0
demo.scrollLeft
-=demo1.offsetWidth //如果滑动块的位置大于demo2的宽度,滑动块退回一个demo2的宽度 
else
demo.scrollLeft
++ //否则,滑动块向右滚动(图片向左滚) 

}
//滚动函数定义完 
var MyMar
=setInterval(Marquee,speed) //设置定时器,使滚动函数每30毫秒运行一次 
demo.onmouseover
=function() {clearInterval(MyMar);viewstatus();}//鼠标经过时,清除定时器,停止执行滚动函数,弹出信息; 
demo.onmouseout
=function() {MyMar=setInterval(Marquee,speed)}// 鼠标离开后,继续滚动 

function viewstatus(){//这是我加的函数,很简单,不注释了 
mess
="demo.scrollLeft:"+demo.scrollLeft+" demo1.offsetWidth:"+demo1.offsetWidth
+" demo2.offsetWidth:"+demo2.offsetWidth; 
alert(mess); 

</script>
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 沙漠玫瑰的花苞打不开怎么办 鲜切花 较小的花苞怎么办 大棚玫瑰苗水大涝的不长怎么办 鲜花买回来蔫了怎么办 喝玫瑰醋上火了怎么办 插在花泥上的花怎么办 插的花蔫了怎么办 紫睡莲的茎软了怎么办 家养的荷花烂叶怎么办 家养的荷花叶老是枯萎怎么办 新买的绣球蔫了怎么办 绣球花被太阳晒阉了怎么办 羊肉香精放多了怎么办 被飞机防腐剂弄到皮肤怎么办 狗吃了脱氧保鲜剂呕吐怎么办 小孩误吃试纸了保鲜剂怎么办 狗狗把保鲜剂吃了怎么办 小孩吃了防潮珠怎么办 狗吃了防潮剂怎么办 洋桔梗有点烂根怎么办 变色球花枯萎了怎么办 桔梗花叶子蔫了怎么办 洋桔梗头垂下来怎么办 洋桔梗花容易折断怎么办 眼睛被火炮炸伤了怎么办 逆水寒包裹满了怎么办 逆水寒包裹里满了怎么办 grim soul包裹满了怎么办 剑三包裹满了怎么办 电脑开机后都是英文怎么办 欠员工工资仲裁老板不到庭怎么办 乔丹拖鞋鞋底硬怎么办 公牛插座电阻烧了怎么办 公牛led灯太刺眼怎么办 公牛插座usb坏了怎么办 墙壁上开关坏了怎么办 刑事二审判决后不服的怎么办 空调外机空间小怎么办 离婚判决生效书丢了怎么办 法院判决离婚对方上诉怎么办 法院判决离婚上诉中级法院怎么办