首页 > 编程 > JavaScript > 正文

JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)

2019-11-20 08:54:21
字体:
来源:转载
供稿:网友

**兼容IE,Firefox 遵循W3C标准写法的图片无缝滚动代码(支持左移/右移功能)(本示例为上下两行图片进行双行滚动)

**实现思路:一个设定宽度并且隐藏超出它宽度的内容的容器demo,里面放demo1和demo2,demo1是滚动内容,demo2为demo1的直接克隆,

**通过不断改变demo1的scrollTop或者scrollLeft达到滚动的目的,当滚动至demo1与demo2的交界处时直接跳回初始位置,

**因为demo1与demo2一样,所以分不出跳动的瞬间,从而达到“无缝”滚动的目的。

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><!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 id="Head1" runat="server"> <title></title></head><body> <img src="link.gif" style="cursor: pointer" onmouseover="clearright();toleft()" /> <img src="link1.gif" style="cursor: pointer" onmouseover="clearleft();toright()" /> <div>  <div id="demo" style="overflow: hidden; width: 322px; height: 61px">   <table cellpadding="0" align="left" border="0" cellspace="0">    <tbody>     <tr>      <td id="demo1" valign="top">       <table cellspacing="0" cellpadding="0" width="322" bgcolor="#fffbf7" border="0">        <tbody>         <tr align="center">          <td width="50" height="50">           <img height="50" src="link.gif" />          </td>          <td width="50" height="50">           <img height="50" src="link1.gif" />          </td>          <td width="50" height="50">           <img height="50" src="link2.gif" />          </td>          <td width="50" height="50">           <img height="50" src="link.gif" />          </td>          <td width="50" height="50">           <img height="50" src="link3.gif" />          </td>         </tr>        </tbody>       </table>      </td>      <td id="demo2" valign="top">      </td>     </tr>    </tbody>   </table>  </div> </div> <div>  <div id="demo_a" style="overflow: hidden; width: 322px; height: 61px">   <table cellpadding="0" align="left" border="0" cellspace="0">    <tbody>     <tr>      <td id="demo_b" valign="top">       <table cellspacing="0" cellpadding="0" width="322" bgcolor="#fffbf7" border="0">        <tbody>         <tr align="center">          <td width="50" height="50">           <img height="50" src="link.gif" />          </td>          <td width="50" height="50">           <img height="50" src="link1.gif" />          </td>          <td width="50" height="50">           <img height="50" src="link2.gif" />          </td>          <td width="50" height="50">           <img height="50" src="link.gif" />          </td>          <td width="50" height="50">           <img height="50" src="link3.gif" />          </td>         </tr>        </tbody>       </table>      </td>      <td id="demo_c" valign="top">      </td>     </tr>    </tbody>   </table>  </div> </div> <script type="text/javascript"> /* **兼容IE,Firefox 遵循W3C标准写法的图片无缝滚动代码(支持左移/右移功能)(本示例为上下两行图片进行双行滚动) ** **实现思路:一个设定宽度并且隐藏超出它宽度的内容的容器demo,里面放demo1和demo2,demo1是滚动内容,demo2为demo1的直接克隆, **通过不断改变demo1的scrollTop或者scrollLeft达到滚动的目的,当滚动至demo1与demo2的交界处时直接跳回初始位置, **因为demo1与demo2一样,所以分不出跳动的瞬间,从而达到“无缝”滚动的目的。 */ var speed1=0  //图片左移的速度 var MyMar1  //setInterverval方法返回的间隔ID,些ID为全局的调用次数(用于第一行图片) var MyMar2  //setInterverval方法返回的间隔ID,些ID为全局的调用次数(用于第二行图片) var lefthit=0    //记录左移按钮点击次数 var righthit=0  ////记录右移按钮点击次数  //调用右移方法前,先让左移停止(clearInterval清除setInterval对方法的调用) function clearleft(){   clearInterval(MyMar1)   clearInterval(MyMar2) } //图片左移的方法 function toleft(){    //判断是否是第一次按下左移按钮(图片往左开始移动的时候,不会在调用此方法。只有当按了右移按钮时,才会把lefthit重设为0)   if(lefthit==0){     speed1=30;//图片左移速度时间毫秒     //让的内容demo2与demo1内容一样     document.getElementById("demo2").innerHTML=document.getElementById("demo1").innerHTML     //上行图片移动的方法     function Marquee1(){        //当demo滚动至demo2的交界处。与就是与demo2重合时。offsetWidth与scrollLeft刚好相等       if(document.getElementById("demo2").offsetWidth-document.getElementById("demo").scrollLeft<=0){         //demo跳回初始位置         document.getElementById("demo").scrollLeft-=document.getElementById("demo1").offsetWidth       }       else{         //demo开始重新移动         document.getElementById("demo").scrollLeft++       }     }     //setInterval让Marquee1方法每隔多少秒执行一次,并把返回的调用次数ID     MyMar1=setInterval(Marquee1,speed1)     //当鼠标移动demo上面时。调用clearInterval清除MyMar1.这样图片便不会在移动了。移到图片时,第一行和第二行的图片都会停止     document.getElementById("demo").onmouseover=function()     {clearInterval(MyMar1);clearInterval(MyMar2)}     //当鼠标移除demo时,重新setInterval让方法执行,这样图片会继续移动     document.getElementById("demo").onmouseout=function()     {MyMar1=setInterval(Marquee1,speed1);clearInterval(MyMar2);MyMar2=setInterval(Marquee2,speed1)}      //下面的方法与上面的方法一样,用于第二行的图片向左移动      document.getElementById("demo_c").innerHTML=document.getElementById("demo_b").innerHTML     function Marquee2(){       if(document.getElementById("demo_c").offsetWidth-document.getElementById("demo_a").scrollLeft<=0){         document.getElementById("demo_a").scrollLeft-=document.getElementById("demo_b").offsetWidth}       else{         document.getElementById("demo_a").scrollLeft++       }     }     MyMar2=setInterval(Marquee2,speed1)     document.getElementById("demo_a").onmouseover=function()     {clearInterval(MyMar2);clearInterval(MyMar1)}     document.getElementById("demo_a").onmouseout=function()     {MyMar2=setInterval(Marquee2,speed1); document.getElementById("demo").onmouseout()}     lefthit=1    //设置左移按钮,当按了一次左移后(不管按多少次),在没按右移按钮之前,toleft方法里的的代码不会再被执行     righthit=0  //把右移按钮设为0,这样当下次点了右移按钮的时候,以便toright方法被调用   } }   var MyMar3  //setInterverval方法返回的间隔ID,些ID为全局的调用次数(用于第一行图片) var MyMar4  //setInterverval方法返回的间隔ID,些ID为全局的调用次数(用于第二行图片) var speed2=0  //图片右移的速度 //调用移左方法前,先让右移停止(clearInterval清除setInterval对方法的调用) function clearright(){   clearInterval(MyMar3)   clearInterval(MyMar4) }   //图片右移方法(与图片左移方法思路一样) function toright(){     //判断是否是第一次按下右移按钮(图片往右开始移动的时候,不会在调用此方法。只有当按了左移按钮时,才会把righthit重设为0)   if(righthit==0){     speed2=30;     document.getElementById("demo2").innerHTML=document.getElementById("demo1").innerHTML     function Marquee_a(){       if(document.getElementById("demo").scrollLeft<=0){         document.getElementById("demo").scrollLeft=document.getElementById("demo2").offsetWidth       }       else{         document.getElementById("demo").scrollLeft--       }     }     MyMar3=setInterval(Marquee_a,speed2)     document.getElementById("demo").onmouseover=function()     {clearInterval(MyMar3);document.getElementById("demo_a").onmouseover()}     document.getElementById("demo").onmouseout=function()     {MyMar3=setInterval(Marquee_a,speed2);clearInterval(MyMar4);MyMar4=setInterval(Marquee_b,speed2)}              document.getElementById("demo_c").innerHTML=document.getElementById("demo_b").innerHTML     function Marquee_b(){       if(document.getElementById("demo_a").scrollLeft<=0){         document.getElementById("demo_a").scrollLeft=document.getElementById("demo_c").offsetWidth       }       else{         document.getElementById("demo_a").scrollLeft--       }     }     MyMar4=setInterval(Marquee_b,speed2)     document.getElementById("demo_a").onmouseover=function()     {clearInterval(MyMar4);clearInterval(MyMar3)}     document.getElementById("demo_a").onmouseout=function()     {MyMar4=setInterval(Marquee_b,speed2);document.getElementById("demo").onmouseout()}     righthit=1  //设置右移按钮,当按了一次右移按钮后(不管按多少次),在没按左移按钮之前,toright方法里的的代码不会再被执行     lefthit=0  //把左移按钮设为0,这样当下次点了左移按钮的时候,以便toleft方法被调用   } } </script></body></html>

以上就是小编为大家带来的JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)的全部内容了,希望对大家有所帮助,多多支持武林网~

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表