zoukankan      html  css  js  c++  java
  • JavaScript之图片操作6

    上一篇写的关于放大镜的,可能在实际开发中用的不是很多,接下来将的图片无缝滚动在实际工作中就是用的比较多的了。

    如上图,通过定时器控制图片无缝滚动,当鼠标悬浮时停止滚动,鼠标离开,滚动继续。

    主要原理是通过定位实现图片的移动,然后通过定时器实现滚动的效果,即无缝滚动。

    首先是基础的结构

    <!DOCTYPE html>
    <html>
    <head>
        <title>无缝滚动</title>
        <style type="text/css">
        *{margin:0;padding:0;}
    ul{list-style:none;float:left;}
    li{margin: 5px;border:3px double #00a67c;float:left;}
    li img{width:150px;float:left;}
    #demo{width:800px;overflow: hidden;margin:100px auto;border: 1px solid #999;}
    #indemo{width:800%;float:left;}
        </style>
    </head>
    <body>
    <div id="demo">
        <div id="indemo">
            <ul id="demo1">
                <li><img src="img/pic1.jpg"></li>
                <li><img src="img/pic2.jpg"></li>
                <li><img src="img/pic3.jpg"></li>
                <li><img src="img/pic4.jpg"></li>
                <li><img src="img/pic5.jpg"></li>
                <li><img src="img/pic6.jpg"></li>
                <li><img src="img/pic7.jpg"></li>
            </ul>
            <ul id="demo2"></ul>
        </div>
    </div>
    </body>
    </html>

    有了基本结构后,就要让图片动起来,为了实现图片的无缝滚动,将存放图片的ul进行复制,放在其后,模拟循环效果。其次,每当图片滚动到复制元素的最后一张图片时,就应该让图片重新回到最开始的状态再继续滚动,这样的话就形成了无缝循环滚动的效果。

    <script type="text/javascript">
           window.onload = function(){
        var age = 20;
        var tab = document.getElementById('demo');
        var tab1 = document.getElementById('demo1');
        var tab2 = document.getElementById('demo2');
        tab2.innerHTML = tab1.innerHTML;
     
        function run(){
            //tab1的宽度小于 tab被隐藏的宽度;
            if(tab1.offsetWidth - tab.scrollLeft <=0 ){
                //重置tab被隐藏的宽度
                tab.scrollLeft -= tab1.offsetWidth;
            }else {
                tab.scrollLeft++;
            }
        };
        var mymar = setInterval(run,age);
    }
        </script>

    最后就是优化了,当鼠标悬浮时停止滚动,鼠标离开后继续滚动。

    <script type="text/javascript">
        tab.onmouseover = function(){
            clearInterval(mymar);
        }
        tab.onmouseout = function(){
            mymar = setInterval(run,age);
        }
     </script>

    到此,我们就实现了最开始想要的效果了,完整代码如下:

    <!DOCTYPE html>
    <html>
    <head>
        <title>无缝滚动</title>
        <style type="text/css">
        *{margin:0;padding:0;}
    ul{list-style:none;float:left;}
    li{margin: 5px;border:3px double #00a67c;float:left;}
    li img{width:150px;float:left;}
    #demo{width:800px;overflow: hidden;margin:100px auto;border: 1px solid #999;}
    #indemo{width:800%;float:left;}
        </style>
        
    </head>
    <body>
    <div id="demo">
        <div id="indemo">
            <ul id="demo1">
                <li><img src="img/pic1.jpg"></li>
                <li><img src="img/pic2.jpg"></li>
                <li><img src="img/pic3.jpg"></li>
                <li><img src="img/pic4.jpg"></li>
                <li><img src="img/pic5.jpg"></li>
                <li><img src="img/pic6.jpg"></li>
                <li><img src="img/pic7.jpg"></li>
            </ul>
            <ul id="demo2"></ul>
        </div>
    </div>
    <script type="text/javascript">
           window.onload = function(){
        var age = 20;
        var tab = document.getElementById('demo');
        var tab1 = document.getElementById('demo1');
        var tab2 = document.getElementById('demo2');
        tab2.innerHTML = tab1.innerHTML;
     
        function run(){
            if(tab1.offsetWidth - tab.scrollLeft <=0 ){
                tab.scrollLeft -= tab1.offsetWidth;
            }else {
                tab.scrollLeft++;
            }
        };
        var mymar = setInterval(run,age);
        tab.onmouseover = function(){
            clearInterval(mymar);
        }
        tab.onmouseout = function(){
            mymar = setInterval(run,age);
        }
    }
        </script>
    </body>
    </html>

    完整详细代码链接:点这里

  • 相关阅读:
    vue2.0对于数组变化不及时刷新视图的问题
    [Node]报错:gyp verb check python checking for Python executable "python2" in the PATH
    spring的@ControllerAdvice注解
    antdVue--Upload使用
    antd Vue--this.$confirm弹窗使用
    播放视频判断是否暂停_Javascript判断Video视频播放、暂停、结束完成及获取长度事件监听处理...
    P5400 [CTS2019]随机立方体
    P7502 「HMOI R1」不知道是啥的垃圾题
    vue3插槽使用
    cocos creator破解
  • 原文地址:https://www.cnblogs.com/yuyujuan/p/9556980.html
Copyright © 2011-2022 走看看