zoukankan      html  css  js  c++  java
  • js焦点轮播图

    汇集网上焦点轮播图的实现方式,自己试了下,不过鼠标悬浮停止动画和鼠标离开动画播放好像没生效,不太明白,最后两行代码中,为什么可以直接写stop和play。不用加括号调用函数么?求懂的大神指点!

    所用知识点:

    1.DOM操作

    2.定时器

    3.事件运用

    4.Js动画

    5.函数递归

    6.无限滚动大法(可以用js实现一个假图的制作。不过说实话一直理解不了假图的作用原理)

    <style>
            * {
                margin: 0;
                padding: 0;
    
            }
    
            a {
                text-decoration: none;
            }
    
            body {
                padding: 20px;
            }
    
            #container {
                 600px; /*这里600x400是图片的宽高*/
                height: 400px;
                border: 3px solid #333;
                overflow: hidden; /*隐藏溢出的图片,因为图片左浮动,总宽度为4200*/
                position: relative;
            }
    
            #list {
                 4200px; /*这里设置7张图片总宽度*/
                height: 400px;
                position: absolute; /*基于父容器container进行定位*/
                z-index: 1;
            }
    
            #list img {
                float: left;
                610px;
            }
    
            #buttons {
                position: absolute;
                height: 10px;
                 100px;
                z-index: 2; /*按钮在图片的上面*/
                bottom: 20px;
                left: 250px;
            }
    
            #buttons span {
                cursor: pointer;
                float: left;
                border: 1px solid #fff;
                 10px;
                height: 10px;
                border-radius: 50%;
                background: #333;
                margin-right: 5px;
            }
    
            #buttons .on {
                background: orangered; /*选中的按钮样式*/
            }
    
            .arrow {
                cursor: pointer;
                display: none; /*左右切换按钮默认先隐藏*/
                line-height: 39px;
                text-align: center;
                font-size: 36px;
                font-weight: bold;
                 40px;
                height: 40px;
                position: absolute;
                z-index: 2;
                top: 180px;
                background-color: RGBA(0, 0, 0, .3);
                color: #fff;
            }
    
            .arrow:hover {
                background-color: RGBA(0, 0, 0, .7);
            }
    
            #container:hover .arrow {
                display: block; /*当鼠标放上去容器上面就显示左右切换按钮*/
            }
    
            #prev {
                left: 20px;
            }
    
            #next {
                right: 20px;
            }
        </style>
    

      

    <div id="container">
        <div id="list" style="left: -600px;">
            <img src="5.jpg" alt="1"/>
            <img src="1.jpg" alt="1"/>
            <img src="2.jpg" alt="2"/>
            <img src="3.jpg" alt="3"/>
            <img src="4.jpg" alt="4"/>
            <img src="5.jpg" alt="5"/>
            <img src="1.jpg" alt="5"/>
        </div>
        <div id="buttons">
            <span index="1" class="on"></span>
            <span index="2"></span>
            <span index="3"></span>
            <span index="4"></span>
            <span index="5"></span>
        </div>
        <a href="javascript:void(0);" id="prev" class="arrow">&lt;</a>
        <a href="javascript:void(0);" id="next" class="arrow">&gt;</a></div>
    <script>
            window.onload = function(){
                var container=document.getElementById('container');
                var list=document.getElementById('list');
                var buttons=document.getElementById('buttons').getElementsByTagName('span');
                var next=document.getElementById('next');
                var prev=document.getElementById('prev');
                var index=1;
    
                var len=5;//图片的数量
                var animated=false;//用于判断切换是否进行
                var interval=3000; //自动播放定时器的秒数,3秒
                var timer; //定时器
    //            切换动画
                function animate(offset){
                    animated=true; //切换进行中
                    var time=300; //位移总时间
                    var inteval=10; //位移间隔时间
                    var speed=offset/(time/inteval); //每次位移量
                    var newLeft=parseInt(list.style.left)+offset;
                    var go=function(){
                        if((speed<0&&parseInt(list.style.left)>newLeft)||(speed>0&&parseInt(list.style.left)>newLeft)){
                            list.style.left=parseInt(list.style.left)+speed+'px';
                            setTimeout(go,inteval);
                        }else{
                            animated=false;
                            list.style.left=newLeft+'px';
                            if(newLeft<-3000){
                                list.style.left=-600+'px';
                            }
                            if(newLeft>-600){
                                list.style.left=-3000+'px';
                            }
                        }
                    }
                    go();
                    /*var newLeft=parseInt(list.style.left)+offset;
                    list.style.left=newLeft+'px';
                    if(newLeft<-3000){
                        list.style.left=-600+'px';
                    }
                    if(newLeft>-600){
                        list.style.left=-3000+'px';
                    }*/
                }
    
    //            为按钮添加样式
                function showButton(){
                    for(var i=0;i<buttons.length;i++){
                        if(buttons[i].className=='on'){
                            buttons[i].className='';
                            break;
                        }
                    }
                    buttons[index-1].className='on';
                }
                next.onclick=function(){
                    if(animated){
                        return;
                    }
                    if(index==5){
                        index=1;
                    }else{
                        index+=1;
                    }
                    animate(-600);
                    showButton();
                }
    
                prev.onclick=function(){
                    if(animated){
                        return;
                    }
                    if(index==1){
                        index=5;
                    }else{
                        index-=1;
                    }
                    animate(600);
                    showButton();
                }
    
    //            通过循环为按钮添加点击事件
                for(var i=0;i<buttons.length;i++){
                    buttons[i].onclick=function(){
                        if(animated){
                            return;
                        }
    //                    当继续点击当前按钮的时候,不进行切换
                        if(this.className == 'on'){
                            return;
                        }
    //                    通过获取按钮标签的自定义属性Index 得到索引值,再计算差值
                        var myIndex = parseInt(this.getAttribute('index'));
                        //真正的偏移量
                        var offset = -600*(myIndex-index);
                        animate(offset);
                        index=myIndex;
                        showButton();
                    }
    //                自动播放
                    function play(){
                        timer=setTimeout(function(){
                            next.onclick();
                            play();
                        },interval)
                    }
                    function stop(){
                        clearTimeout(timer);
                    }
                    container.onmouseover=stop;
                    container.onmouseout=play;
    
                    play();
                }
            }
        </script>
    <script>
    window.onload = function(){
    var container=document.getElementById('container');
    var list=document.getElementById('list');
    var buttons=document.getElementById('buttons').getElementsByTagName('span');
    var next=document.getElementById('next');
    var prev=document.getElementById('prev');
    var index=1;

    var len=5;//图片的数量
    var animated=false;//用于判断切换是否进行
    var interval=3000; //自动播放定时器的秒数,3秒
    var timer; //定时器
    // 切换动画
    function animate(offset){
    animated=true; //切换进行中
    var time=300; //位移总时间
    var inteval=10; //位移间隔时间
    var speed=offset/(time/inteval); //每次位移量
    var newLeft=parseInt(list.style.left)+offset;
    var go=function(){
    if((speed<0&&parseInt(list.style.left)>newLeft)||(speed>0&&parseInt(list.style.left)>newLeft)){
    list.style.left=parseInt(list.style.left)+speed+'px';
    setTimeout(go,inteval);
    }else{
    animated=false;
    list.style.left=newLeft+'px';
    if(newLeft<-3000){
    list.style.left=-600+'px';
    }
    if(newLeft>-600){
    list.style.left=-3000+'px';
    }
    }
    }
    go();
    /*var newLeft=parseInt(list.style.left)+offset;
    list.style.left=newLeft+'px';
    if(newLeft<-3000){
    list.style.left=-600+'px';
    }
    if(newLeft>-600){
    list.style.left=-3000+'px';
    }*/
    }

    // 为按钮添加样式
    function showButton(){
    for(var i=0;i<buttons.length;i++){
    if(buttons[i].className=='on'){
    buttons[i].className='';
    break;
    }
    }
    buttons[index-1].className='on';
    }
    next.onclick=function(){
    if(animated){
    return;
    }
    if(index==5){
    index=1;
    }else{
    index+=1;
    }
    animate(-600);
    showButton();
    }

    prev.onclick=function(){
    if(animated){
    return;
    }
    if(index==1){
    index=5;
    }else{
    index-=1;
    }
    animate(600);
    showButton();
    }

    // 通过循环为按钮添加点击事件
    for(var i=0;i<buttons.length;i++){
    buttons[i].onclick=function(){
    if(animated){
    return;
    }
    // 当继续点击当前按钮的时候,不进行切换
    if(this.className == 'on'){
    return;
    }
    // 通过获取按钮标签的自定义属性Index 得到索引值,再计算差值
    var myIndex = parseInt(this.getAttribute('index'));
    //真正的偏移量
    var offset = -600*(myIndex-index);
    animate(offset);
    index=myIndex;
    showButton();
    }
    // 自动播放
    function play(){
    timer=setTimeout(function(){
    next.onclick();
    play();
    },interval)
    }
    function stop(){
    clearTimeout(timer);
    }
    container.onmouseover=stop;
    container.onmouseout=play;

    play();
    }
    }
    </script>
  • 相关阅读:
    js本地时钟
    《Real Time Rendering》第二章 图形渲染管线
    《Real Time Rendering》第三版 翻译
    《Windows via C/C++》学习笔记(一):Error handling
    《Real Time Rendering》第三章 图形处理单元
    《工程结构优化设计基础》总结
    《TCP/IP协议详解》学习笔记(一):概述
    【转载】四大开源3d游戏引擎探究
    几何非线性中的几个重要概念
    《Windows via C/C++》学习笔记(二):Working with Characters and String
  • 原文地址:https://www.cnblogs.com/beileixinqing/p/6503592.html
Copyright © 2011-2022 走看看