zoukankan      html  css  js  c++  java
  • 逐帧轮播图效果实现

      所谓逐帧轮播图就是一帧一帧的移动播放,并且实现无缝接连播放的效果。下面将介绍逐帧轮播图的实现思路。

      该效果的重点是如何实现无缝连接,其实很简单,逐帧轮播图都是从右往左移动,那么只需将最后一幅轮播图片复制一份放在第一张的位置(比如有5张轮播图,那么位置排列为 5 1 2 3 4 5),这样当图片播放到第六张时,立马就跳转位置到第一张上,这样从视觉上就是无缝连接了。

      所以,图片准备代码如下(HTML):

     <section class="container" id="container">
            <div class="imgs" id="imgs">
                <img src="../img/5.jpeg" alt="">
                <img src="../img/1.jpeg" alt="">
                <img src="../img/2.jpeg" alt="">
                <img src="../img/3.jpeg" alt="">
                <img src="../img/4.jpeg" alt="">
                <img src="../img/5.jpeg" alt="">
            </div>
        </section>
    

      在这里,我将准备的共6张图片放到一个div里面装起来,这样轮播的时候我就只需移动div的位置即可(要把div的position属性设置成absolute定位)。故div的初识位置要将第二张图片展示出来。

      css代码如下:

    <style>
            .container {
                 800px;
                height: 600px;
                margin: 20px auto;
                position: relative;
                overflow: hidden;
            }
    
            .imgs {
                position: absolute;
                display: flex;
                left: -800px;
            }
        </style>
    

      其中,我的图片宽度为800px,所以我将位置设置成-800px,这样最开始展示的图片就是编号为1的图片(第二张)。

      js代码如下:

     <script>
            let imgs = document.getElementById('imgs');
            let img = document.getElementsByTagName('IMG');
            let stopTimer1;
            // 移动的回调函数
            let move1 = function () {
                imgs.style.left = imgs.offsetLeft - 2 + 'px';
                // 当第5张播放到 5图片时,直接跳转到位于第一个的备份 5图片,这样就造成了一直无空隙播放的假象
                // 判断的值 -4000为 5图片前面 共计五张图片的宽的和,然后直接跳转到left为0.
                if (imgs.offsetLeft <= -img[0].offsetWidth * (img.length - 1)) {
                    imgs.style.left = 0 + 'px';
                }
                if (imgs.offsetLeft % img[0].offsetWidth == 0) {
                    clearInterval(stopTimer1);
                }
            }
            // 移动函数
            let move = function () {
                stopTimer1 = setInterval(move1, 10);
            }
            // 每隔7秒调用1次,7秒等于 图片移动的4秒(800px,每10ms移动2px)+ 停顿的 3秒
            setInterval(function () {
                move();
            }, 7000);
        </script>
    

      

  • 相关阅读:
    《MySQL入门很简单》练习7.4
    《MySQL入门很简单》练习6.9
    《MySQL入门很简单》练习6.6
    《MySQL入门很简单》练习6.5
    "mysql"不是内部或外部命令,也不是可运行的程序或批处理文件
    TControl与Windows消息
    TObject与消息分发
    长串
    使用TSplitter控件调整其他控件大小简便方法
    Cocos2d-x缓存机制(一)
  • 原文地址:https://www.cnblogs.com/zhangzhiyong/p/9749695.html
Copyright © 2011-2022 走看看