加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

图片滚动(Left)代码详解(offsetLeft、scrollLeft、offsetWidth)

(2011-09-29 08:53:45)
标签:

图片滚动

offsetleft

scrollleft

offsetwidt

分类: 网页制作

    前一篇博文将图片向上滚动代码的进行了详细解释,这次再介绍一下图片向左边滚动代码。因为是水平布局,如果使用DIV会有点麻烦,所以使用了DIV结合Table进行布局。外层是一个ID为“demo”的Div,内部放置了一个一行二列的表格,两个TD的ID分别是“demo1、demo2”。在ID为“demo1”的再放置一个表格,这个表格放滚动的图片,几张图片就是几列。基本原理与向上滚动类似,demo1是滚动内容,demo2为demo1的直接克隆,通过不断改变demo的scrollLeft达到滚动的目的,当demo1与demo2的交界处滚动至demo顶端时直接跳回初始位置,因为demo1与demo2一样,所以分不出跳动的瞬间,从而达到“无缝”滚动的目的。

    文中offsetLeft、scrollLeft、offsetWidth含义如下:

     offsetLeft:当前对象到其上级层左部的距离。

     scrollLeft:对象左端滚动出显示范围距离的值。

     offsetWidth:当前对象的宽度值。

代码如下(新浪博客会屏蔽html、js代码,请自行替换"<"、">"):

<~DIV id="demo" style="BACKGROUND: #214984; OVERFLOW: hidden; WIDTH: 800px; COLOR: #ffffff; HEIGHT: 168px"~> <~!--demo的宽度建议等于demo1。--~> 
       <~table border="0" width="100%" id="table1"~> 
        <~tr~> 
         
         <~td id="demo1"~> 
             <~table border="0" width="100%" id="table2"~> 
             <~tr~> 
               <~td~><~IMG height=157 src="F200602161743593194929892.jpg" width=152~><~/td~> 
               <~td~><~IMG height=156 src="images/NewsMedia_176140.jpg" width=154~><~/td~> 
               <~td~><~IMG height=157 src="images/P922118900.jpg" width=155 border=0~><~/td~> 
               <~td~><~IMG height=156 src="images/P922118900.jpg" width=155 border=0~><~/td~> 
               <~td~><~IMG height=157 src="images/0038.jpg" width=158~><~/td~> 
              <~/tr~> 
            <~/table~> 
         <~/td~> 
         <~td id="demo2"~> <~/td~> 
       <~/tr~> 
    <~/table~> <~/DIV~> 
     <~script type="text/javascript"~> 
     var demo=document.getElementById("demo"); 
     var demo1=document.getElementById("demo1"); 
     var demo2=document.getElementById("demo2"); 
     var speed=30 //图片滚动速度 
     demo2.innerHTML=demo1.innerHTML//克隆demo1为demo2 
    //alert(demo2.offsetWidth); //调试用,查看demo1的宽度 
    function Marquee(){ 
         if(demo1.offsetWidth-demo.scrollLeft<</span>=0) //当demo1与demo2的交界处滚动至demo左端时 
              demo.scrollLeft-=demo1.offsetWidth//demo跳回到原始顶端位置 
         // if(demo.scrollLeft~>=demo1.offsetWidth) //另一种算法 
        // demo.scrollLeft=0; 
       else
            demo.scrollLeft++; //demo向左滚动一个像素 
          
         
        
     var MyMar=setInterval(Marquee,speed); //设置定时器 
    demo.onmouseover=function() {clearInterval(MyMar)}; //鼠标移上时清除定时器达到滚动停止的目的 
     demo.onmouseout=function() {MyMar=setInterval(Marquee,speed)};//鼠标移开时重设定时器 
    <~/SCRIPT~>







http://s8/middle/55f647122ecc63e6945c7&690


    2016-1-6补充:

    有读者提问图片向右滚动该怎么做?

    看到这个问题,首先将之前的JS代码温习了一下,想当然以为一定有scrollRight,经测试肯定是没有的。还以为scrollLeft可以赋负值,经过测试,最小值只能是零。查阅网络,也没有能找到有用的信息,百思不得其解。就在准备放弃时,灵光乍现,如果将图片拽到左边,scrollLeft等于demo1的宽度,demo1隐藏,demo2显现,然后慢慢减少scrollLeft直到为零,不就向右滚动了吗?关键代码如下:

    demo.scrollLeft=demo2.offsetWidth;//初始化为demo2的宽度,为demo1也可以

    function Marquee(){

        if(demo.scrollLeft<=0)

  demo.scrollLeft=demo2.offsetWidth;//当为0时,再初始化

else

demo.scrollLeft--;//减少一个像素

        }


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有