JS 实现无缝滚动动画原理(初学者入)

  这段时间在教培训班的学生使用原生javascript实现无缝滚动的动画案例,做了这个原理演示的动画,分享给自学JS的朋友!博主希望对你们有帮助!

在讲解之前先看一下demo:

demo:https://224137748.github.io/JS_warehouse/lunbo/domo.HTML源码:https://github.com/224137748/JS_warehouse/blob/master/lunbo/domo.HTML

  ps:  上面和下面的滚动进度是一致的,上面红色框是为了演示滚动动画原理做的一个view,下面大一点的才是我们真正看到的无缝滚动~!

原理:

 首先先分析一下html文档结构,这里以上面小红框的视图为例子;

       <div id="showbox"> 红框div的宽度为200px,高度为图片的高度112px;   注意:overflow:hidden;在这里的作用              <div id="showpic">这个div盒子width=600%;宽度为6个红框div盒子的宽度,高度一致;以红框盒子为定位上下文,使用绝对定位;
设置定时器:    1)、因为#showpic盒子使用绝对定位,所以只需要将其left属性进行改变就能实现动画效果;    2)、#showpic里面是6张图片,这6张图片第一张和最后一张图片是相同的,因为我们要实现第五张图片往左滚动的同时,后面不会出现空白,所以必须加一张图片,加第一张图片能衔接很自然;    3)、使#showpic盒子的left属性值递减,那么#showpic盒子将往左边移动,当减到第5张图片的时候left属性设置为0,跳转到第1张图片的位置,无缝滚动衔接成功;


<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <title>图片练习</title>
        <style>
            *{padding: 0;margin: 0;}
            body{
                overflow: hidden;
            }
            ul,li{
                list-style: none;
            }
            #showbox{
                position: absolute;
                top: 20px;
                left: 50%;
                width: 200px;
                height: 112px;
                border: 2px solid red;
                margin: 0 0 0 -100px;
            }
            #showpic{
                position: absolute;
                left:0 ;
                width: 600%;
                height: 112px;
                z-index: -1;
            }
            #showpic img{
                float: left;
            }
            #box{
                position: absolute;
                top: 60%;
                left: 50%;
                width: 800px;
                height: 450px;
                margin: -225px 0 0 -400px;
                overflow: hidden;

            }
            #box::after{
                content: "点击屏幕暂停";
                display: block;
                position: absolute;
                left: 320px;
                top: 30px;
                font-size: 30px;
                color: white;

            }
            ul{
                position: relative;
                left: 0;

                width: 600%;
                height: 450px;
            }
            li{
                width: 800px;
                display: inline-block;
                float: left;
            }
            ul img{
                vertical-align: top;
                width: 800px;

            }
        </style>
    </head>

    <body >
        <div id="showbox">
            <div id="showpic">
                <img src="img/1.jpg"/>
                <img src="img/2.jpg"/>
                <img src="img/3.jpg"/>
                <img src="img/4.jpg"/>
                <img src="img/5.jpg"/>
                <img src="img/1.jpg"/>
            </div>
        </div>

        <div id="box">
            <ul>
                <li>
                    <img src="img/幻灯片1.jpg"/>
                </li>
                <li>
                    <img src="img/幻灯片2.jpg"/>
                </li>
                <li>
                    <img src="img/幻灯片3.jpg"/>
                </li>
                <li>
                    <img src="img/幻灯片4.jpg"/>
                </li>
                <li>
                    <img src="img/幻灯片5.jpg"/>
                </li>
                <li>
                    <img src="img/幻灯片1.jpg"/>
                </li>
            </ul>
        </div>
    </body>

</html>
<script type="text/javascript">
    var ul = document.getElementsByTagName("ul")[0];
    ul.position = 0;        //自定义属性
    var showpic = document.getElementById("showpic");
    showpic.position = 0;    //自定义属性
    var timer = null;
    var width1 =200,width2 = 800;
    var star = true;
    timer = setInterval(move,0);
    function move(){
        autoplay(ul,width2);
        autoplay(showpic,width1);
    }
    //定义自动播放函数
    function autoplay(obj,width){
        obj.position-=obj.offsetWidth/4000;
        console.log(obj.position)
        if(obj.position<-width*5){
            obj.position =0;
        }
        obj.style.left = obj.position+"px";
    }
    //点击暂停动画
    document.onclick = function(){
        if(star){
            clearInterval(timer);
            star = false;
        }else{
            timer = setInterval(move,0);
            star = true;
        }
    }
</script>
时间: 2024-10-14 06:48:59

JS 实现无缝滚动动画原理(初学者入)的相关文章

JS平滑无缝滚动实现

本文我们实现纯JS方式的滚动广告效果. 先show一下成品: 首先是网页样式: 1. #demo { 2. background: #FFF; 3. overflow:hidden; 4. border: 1px dashed #CCC; 5. width: 1280px; 6. height:200px; 7. } 8. #demo img { 9. border: 3px solid #F2F2F2; 10. } 11. #indemo { 12. float: left; 13. widt

js图片无缝滚动代码

想必大家都注意到<marquee>的不循环滚动,所以出现了很多替代脚本,或iframe或JS输出<marquee>,不管怎么做,都略显麻烦.下面说一下这个相对简单的实现思路:一个设定宽度并且隐藏超出它宽度的内容的容器demo,里面放demo1和 demo2,demo1是滚动内容,demo2为demo1的直接克隆,通过不断改变demo1的scrollTop或者scrollLeft达到滚动的目的,当滚动至demo1与demo2的交界处时直接跳回初始位置,因为demo1与demo2一样,

js学习 无缝滚动 和 随机色

<!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><meta http-equiv="Content-Typ

js图片无缝滚动

<html> <head> <title>图片滚动</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <style> #demo { background:#fff; overflow: hidden; width:500px; border: 1px solid #ccc; } #demo

banner无缝滚动动画,支持左右按钮和小点

HTML: <div class="box"> <ul> <li class="img_cur" > <a href="#"> <img src="img/banner.jpg"> </a> </li> <li> <a href="#"> <img src="img/banner2.j

CSS/JS实现无缝滚动字幕

实现思路 定义两个滚动块,内容一模一样,从下往上两个紧挨着滚动,当第一个滚动块滚动出容器时(即第二个滚动块顶到了容器的上边缘),此时我们将第一个滚动块设置位置到容器上边缘,由于两个滚动块一模一样,从效果上我们也看不出来容器的内容发生了替换. html 代码 <div class="box" id="box"> <ul class="col1" id="col1"> <li>1</li&

js之无缝滚动

<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <style type="text/css"> *{margin:0px;padding:0xp;}//默认全局外边距0,内边距0 #div1 {width:800px;height:200px

js无缝滚动原理及详解[转自刹那芳华]

刚刚接触JS,网上找了一些关于无缝滚动的教程,但都大同小异,对我这种新手来说也只是会用,不知道什么意思,想要自己写个更是一头雾水.于是找了一些资料,详细说明一下JS无缝滚动的原理,相信看过这篇文章之后,自己写一个滚动效果不会是什么难题了.    本文以CSS+div+js为例,详细说明无缝滚动实现原理.    首先建立四个层(div). 结构如下: id="a"(以下简称a,id="b"简称为b)为轮播的可视部分,b为轮播部分,b_1为轮播内容,但b_2和b_1要在

web前端技术课程讲解之关于轮播图水平无缝滚动

制作这个简单的轮播图之前,你必须掌握html.css.以及JavaScript中的节点操作,定时器的使用,条件语句的使用以及JS修改样式和动画原理. 轮播图对于网页来说是个常见也可以说是必备的部分,而轮播图的形式也是各式各样,有简约的也有炫酷的.当然,这里我就只说简约的全屏轮播图水平无缝滚动. 首先是给出一个div标签,并且给这个标签设置宽高(宽高要和图片一致,否则给图片设置居中)以及溢出隐藏(overflow:hidden)并设置定位为相对定位(position:relative),然后用一个