js自动切换轮播图

思路:左右切换——左右切换(加上小圆点)——小圆点点击——动画效果——自动切换

html:

<div id="container">
    <div id="list" style="left: -600px;">
        <img src="images/55.jpg" alt="1">
        <img src="images/11.jpg" alt="1">
        <img src="images/22.jpg" alt="2">
        <img src="images/33.jpg" alt="3">
        <img src="images/44.jpg" alt="4">
        <img src="images/55.jpg" alt="5">
        <img src="images/11.jpg" alt="5">
    </div>
    <div id="buttons">
        <span index="1" class="on"></span>
        <span index="2" class=""></span>
        <span index="3" class=""></span>
        <span index="4" class=""></span>
        <span index="5" class=""></span>
    </div>
    <a href="javascript:;" id="prev" class="arrow">&lt;</a>
    <a href="javascript:;" id="next" class="arrow">&gt;</a>
</div>

css

<style type="text/css">
    *{ margin: 0; padding: 0; text-decoration: none;}
    body { padding: 20px;}
    #container { width: 600px; height: 400px; border: 3px solid #333; overflow: hidden; position: relative;}
    #list { width: 4200px; height: 400px; position: absolute; z-index: 1;}
    #list img { float: left;}
    #buttons { position: absolute; height: 10px; width: 100px; z-index: 2; bottom: 20px; left: 250px;}
    #buttons span { cursor: pointer; float: left; border: 1px solid #fff; width: 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; width: 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>

js

window.onload=function(){

        var container=document.getElementById(‘container‘)//获取容器id
        var list=document.getElementById(‘list‘)//获取img容器
        var buttons=document.getElementById(‘buttons‘).getElementsByTagName(‘span‘)//获取点
        var prev=document.getElementById(‘prev‘)//左按钮
        var next=document.getElementById(‘next‘)//右按钮
        var animated=false
        var index=1;//小圆点
        var timer;//定时器

        //小圆点
        function showButton(){
            //对点点循环,去除已经有的on
            for(var i=0;i<buttons.length;i++){
                if(buttons[i].className==‘on‘){
                    buttons[i].className=‘‘
                    break//退出循环
                }
            }
            buttons[index-1].className=‘on‘
        }
        function animate(offset){
//            快速点击时,会出现小圆点和图片不对应的情况,解决方案是当图片处于动画状态时,直接屏蔽掉点击事件
            animated=true// 快速点击时,会出现小圆点和图片不对应的情况,解决方案是当图片处于动画状态时,直接屏蔽掉点击事件
            var newLeft=parseInt(list.style.left)+offset

            //焦点图轮播
            var time=300;//位移总时间
            var interval=10;//位移间隔时间
            var speed=offset/(time/interval)//每次位移量
            function go(){
                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,interval)
                }else{
                    animated=false;// 快速点击时,会出现小圆点和图片不对应的情况,解决方案是当图片处于动画状态时,直接屏蔽掉点击事件
                    list.style.left=newLeft +‘px‘ //转成数字600
                    //判断是否l滚动到辅助图,图片滚动在-600和-3000之间,解决空白问题
                    if(newLeft>-600){
                        list.style.left=-3000+‘px‘
                    }
                    if(newLeft<-3000){
                        list.style.left=-600+‘px‘
                    }
                }
            }
            go()

        }
        //自动切换
        function play(){
            timer=setInterval(function(){
                next.onclick()
            },3000);
        }
        //停止切换
        function stop(){
            clearInterval(timer)
        }
        //右箭头
        next.onclick=function(){
            //判断点点是否是最后一个或者第一个
/*            if(index==5){
                index=1;
            }else{
                index+=1;
            }*/
            index += 1;
            index = index > 5 ? 1 : index;
            showButton()
            //+600和-600当做参数传给animate
//            list.style.left=parseInt(list.style.left)-600 +‘px‘ //把字符串变为整数值,paresInt()只保留字符串中的数字
            if(!animated){
                animate(-600)
            }
        }
        //左箭头
        prev.onclick=function(){
           /* if(index==1){
                index=5;
            }else{
                index-=1;
            }*/
            index -= 1;
            index = index < 1 ? 5 : index;
            showButton()
//            list.style.left=parseInt(list.style.left)+600+‘px‘
            if(!animated){
                animate(600)
            }
        }
        //小圆点加事件
        for(var i=0;i<buttons.length;i++){
            buttons[i].onclick=function(){
//                if(this.className==‘on‘){
//                    return;
//                }
                var myIndex=parseInt(this.getAttribute(‘index‘))//获取当前点点的index
                var offset=-600*(myIndex-index) //移动的距离:当前的index-之前的index
                //恢复小圆点位置
                index=myIndex
                showButton()
                if(!animate){
                    animate(offset)
                }
            }
        }
        //鼠标移上去,触发自动切换事件
        container.onmouseover=stop;//不要加括号,
        container.onmouseout=play
        //自动切换
        play()
    }
时间: 2024-10-05 17:23:19

js自动切换轮播图的相关文章

原生 js 左右切换轮播图

使用方法: 可能很多人对轮播图感兴趣,下面奉上本人的 原生 js 轮播代码复制 js 到页面的最底部,样式在 css 里改,js 基本不用动,有什么不懂的可以 加本人 QQ172360937 咨询 或者留言都可以,这个是用 原生写的 轮播图,样式可以写自己喜欢的样式,什么都不用改,只改变样式就行,页面结构的id 要与js的相对应li随便加.li 随便加的意思就是说你可以加无数个图片.每个li 里装一个图片,或者是其他什么元素, <!doctype html> <html lang=&qu

JS+css3焦点轮播图PC端

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>js原生web轮播图</title> 6 <style> 7 *{ 8 margin:0; 9 padding:0; 10 list-style: none; 11 -moz-user-select: none;/*文字不可选

JS学习笔记--轮播图效果

希望通过自己的学习收获哪怕收获一点点,进步一点点都是值得的,加油吧!!! 本章知识点:index this for if else 下边我分享下通过老师教的方式写的轮播图,基础知识实现: 1.css代码 <style> ul, ol { padding:0; margin:0; } li { list-style:none; } #box { width:600px; height:350px; border:10px solid #ccc; margin:0 auto; position:r

原生JS实现简易轮播图

原生JS实现简易轮播图(渐变?) 最近做网页总是会用到轮播图,我就把之前写的轮播图单独拿出来吧,如果有...如果真的有人也需要也可以复制去用用啊..哈~.. window.onload = function() { var tab = 0; var loop_imgs = new Array("img/l1.jpg", "img/l2.jpg", "img/l3.jpg", "img/l4.jpg", "img/l5

js实现图片轮播图(一)

一.实现原理 (1)将所有图片放在一个父容器div里面,通过display属性来设置图片的出现与隐藏: (2)轮播图分为手动轮播和自动轮播: 手动轮播的重点是每次点击图片下方的小圆圈,获得它的索引号,并让与之对应索引号的图片显示,并且此时的小圆圈为高亮显示: 自动轮播:利用定时器setInterval(),来每隔一定的时间来播放一次图片. (3)所有的基础知识:dom操作,定时器,事件运用. 二.轮播图页面布局: <div id="content">   <!-- 总

photoSlider-html5原生js移动开发轮播图-相册滑动插件

简单的移动端图片滑动切换浏览插件 分别引用css文件和js文件 如: <link rel="stylesheet" type="text/css" href="css/photoSlider.min.css" /> <script src="js/photoSlider.min.js" type="text/javascript" charset="utf-8">

原生js写简单轮播图方式1-从左向右滑动

轮播图就是让图片每隔几秒自动滑动,达到图片轮流播放的效果.轮播图从效果来说有滑动式的也有渐入式的,滑动式的轮播图就是图片从左向右滑入的效果,渐入式的轮播图就是图片根据透明度渐渐显示的效果,这里说的是实现第一种效果的方法. 原理 相同大小的图片并成一列,但只显示其中一张图片,其余的隐藏,通过修改left值来改变显示的图片.点击查看效果 html部分 nav为总容器,第一个ul列表#index为小圆点列表,鼠标覆盖哪个小圆点就显现第几张图片,on是一个给小圆点添加背景颜色属性的类:第二个ul列表#i

一个用原生JS造的轮播图插件

a native-js slider 一个无缝轮播图的小轮子 ( ?° ?? ?°)?? 前言 自己弄这个轮子是来自之前vue做一个音乐播放器项目时,用到了一个第三方vue组件better-scroll,当时参考这个文档做轮播图的时候,发现slider-item真实渲染出来的多了两个节点,向作者提问了下,回答当传入 snap:{loop:true} 的时候,前后各 clone 一个节点,保证可以无缝循环轮播,那么多克隆这两个节点是怎么实现无无缝轮播图呢,查阅了相关原理,就做了下这个轮子. 在线演

js之无缝轮播图

HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>轮播图</title> <link rel="stylesheet" href="css/common.css"/> <link rel="stylesheet" href="css/carous