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


Posted in Javascript onSeptember 23, 2016

**兼容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标准)的全部内容了,希望对大家有所帮助,多多支持三水点靠木~

Javascript 相关文章推荐
js表格分页实现代码
Sep 18 Javascript
JavaScript中也使用$美元符号来代替document.getElementById
Jun 19 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
Apr 17 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
Mar 13 Javascript
利用JQuery写一个简单的异步分页插件
Mar 07 Javascript
JS使用正则实现去掉字符串左右空格的方法
Dec 27 Javascript
利用ES6语法重构React组件详解
Mar 02 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
Sep 12 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
Dec 11 Javascript
解决npm管理员身份install时出现权限的问题
Mar 16 Javascript
详解Node.js使用token进行认证的简单示例
May 25 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
Jun 08 Javascript
使用bootstrap实现多窗口和拖动效果
Sep 22 #Javascript
web 前端常用组件之Layer弹出层组件
Sep 22 #Javascript
值得分享的bootstrap table实例
Sep 22 #Javascript
第一次动手实现bootstrap table分页效果
Sep 22 #Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
Sep 22 #Javascript
Javascript从数组中随机取出不同元素的两种方法
Sep 22 #Javascript
JavaScript面试题大全(推荐)
Sep 22 #Javascript
You might like
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
javascript 对象定义方法 简单易学
2009/03/22 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
通过python顺序修改文件名字的方法
2018/07/11 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
Python远程方法调用实现过程解析
2020/07/28 Python
浅谈Python __init__.py的作用
2020/10/28 Python
什么是servlet
2012/05/08 面试题
超市实习总结自我鉴定
2013/09/19 职场文书
大学生个人简历中的自我评价
2013/12/27 职场文书
请假条标准格式规范
2014/04/10 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
挂职学习心得体会
2014/09/09 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS