JavaScript实现简单的轮播图效果

轮播图是什么?

轮播图:在一个模块或者说窗口,通过电脑上鼠标点击、手机上手指滑动后,可以看到多张图片。这些图片就都是轮播图,这个模块就叫做轮播模块。

如何实现轮播图

如何才能在js里面做成一个轮播图呢,比如下面这种的,可以自动生成图片对应的小圆点、点击左右箭头可以跳到上或下一张图片、每隔几秒自动轮播,还可以点击小小圆点去到指定的图片。

HTML结构

首先我们创建一个HTML页面,这个结构很简单,用一个大的div嵌套两个div,取个名字叫slider,上面的div用来装图片,取个名字叫slider-img,下面的div就是控件,用来装上下张图片的按钮和小圆点,这个就叫做slider-ctrl。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" href="css/index.css"/>
    <script src="../public.js"></script>
    <script src="./js/index.js"></script>
</head>
<body>
    <div class="slider" id="slider">
        <div class="slider-img">
            <ul>
                <li><a href="#"><img src="images/1.jpg" alt=""/></a></li>
                <li><a href="#"><img src="images/2.jpg" alt=""/></a></li>
                <li><a href="#"><img src="images/3.jpg" alt=""/></a></li>
                <li><a href="#"><img src="images/4.jpg" alt=""/></a></li>
                <li><a href="#"><img src="images/5.jpg" alt=""/></a></li>
                <li><a href="#"><img src="images/6.jpg" alt=""/></a></li>
            </ul>
        </div>
        <div class="slider-ctrl">
        //在这里自动生成小圆点
            <span class="prev" id="prev"></span>
            <span class="next" id="next"></span>
        </div>
    </div>
</body>
</html>

CSS代码

css代码非常简单,略。

* {
    margin: 0;
    padding: 0;
}
.slider {
    width: 310px;
    height: 265px;
    margin: 100px auto;
    position: relative;
    overflow: hidden;
}
.slider-img {
    width: 310px;
    height: 220px;
}
ul {
    list-style: none;
}
li {
    position: absolute;
    top: 0;
    left: 0;
}
.slider-ctrl {
    text-align: center;
    padding-top: 10px;
}
.slider-ctrl-con {
    display: inline-block;
    width: 24px;
    height: 24px;
    background: url(../images/icon.png) no-repeat -24px -780px;
    text-indent: -99999px;
    margin: 0 5px;
    cursor: pointer;
}
.slider-ctrl-con.current {
    background-position: -24px -760px;
}
.prev,.next {
    position: absolute;
    top: 40%;
    width: 30px;
    height: 35px;
    background: url(../images/icon.png) no-repeat;
}
.prev {
    left: 10px;
}
.next {
    right: 10px;
    background-position: 0 -44px;
}

js代码

首先需要做一波需求分析,能够理清思路,然后在来一步一步的写代码。我们先获取相关的元素,然后根据图片数量生成对应的小圆点,由于图片是堆叠在一起的,我们把其他的图都放到右边隐藏起来,显示第一张图片即可。随后需要点亮第一个小圆点,保证小圆点和图片是绑定在一起的。然后我们需要实现点击右箭头看到下一张图,点击左箭头看到上一张图,点击小圆点可以显示对应的图片,且都要点亮相对于的图片。最后就是让他自动轮播图片,鼠标移入时停止轮播,鼠标移出时继续轮播

window.onload = function(){
    // 0 获取相关元素
    // 总容器
    var slider = document.getElementById('slider');
    // 所有图片li的集合
    var imgLiS = slider.children[0].children[0].children;
    // 控制按钮的容器
    var ctrlDiv = slider.children[1];
    // 左箭头(上一张按钮)
    var prev = document.getElementById('prev')
    // 右箭头(下一张按钮)
    var next = document.getElementById('next')
    // 容器的宽度
    var width = slider.offsetWidth;
    // 用一个变量记录当前显示的图片的索引
    var index = 0;

    // 1 根据图片数量生成对应的小圆点
    for(var i=imgLiS.length-1;i>=0;i--){
        var newPoint = document.createElement('span');
        // 给每个节点里面记录他是第几个节点,方便后期点击时候知道是第几个
        newPoint.className = "slider-ctrl-con";
        newPoint.innerHTML = i;
        // 放到最前面
        ctrlDiv.insertBefore(newPoint,ctrlDiv.children[0])

        // 2 所有的图片都放到右边
        imgLiS[i].style.left = width+"px"
    }

    // 2 轮播图显示第一幅图
    imgLiS[index].style.left = 0;

    // 获取所有的小圆点
    var ctrlS = ctrlDiv.children;
    // 3 点亮第一个小圆点
    light()

    // 4 点击左箭头可以看前一幅图,点亮对应的小圆点
    prev.onclick = prevImg;

    // 5 点击右箭头可以看后一幅图,点亮对应的小圆点
    next.onclick = nextImg;

    // 6 点击小圆点,点亮这个小圆点,并显示对应的图片
    for(var i=0;i<imgLiS.length;i++){
        ctrlS[i].onclick = function(){
            var num = +this.innerHTML;
            if(num>index){
                // 我认为后面的图在右边
                imgLiS[num].style.left = width+"px";
                // 当前图去左边
                move(imgLiS[index],'left',-width)
                // 我要看的图去中间
                move(imgLiS[num],'left',0)
            }
            if(num<index){
                // 我认为前面的图在左边
                imgLiS[num].style.left = -width+"px";
                // 当前图去右边
                move(imgLiS[index],'left',width)
                // 我要看的图去中间
                move(imgLiS[num],'left',0)
            }

            // 更新index
            index = num;
            // 点亮小圆点
            light()
        }
    }

    // 7 可以自动轮播图: 每隔3秒看下一张
    var timer = setInterval(nextImg,3000)
    // 8 鼠标移入停止轮播
    slider.onmouseenter = function(){
        clearInterval(timer)
    }
    // 9 鼠标移出继续轮播
    slider.onmouseleave = function(){
        clearInterval(timer)
        timer = setInterval(nextImg,3000)
    }

    // 由于点亮小圆点多次执行,封装成函数
    function light(){
        for(var i=0;i<imgLiS.length;i++){
            ctrlS[i].className = "slider-ctrl-con"
        }
        ctrlS[index].className = "slider-ctrl-con current"
    }

    // 看上一张图的函数
    function prevImg(){
        var num = index-1;
        if(num<0){
            // 索引最小是0,如果要看的索引比0小,就是最后一张,也就是第length-1张
            num = imgLiS.length-1;
        }
        // 我认为前一张图一定在左边
        imgLiS[num].style.left = -width+"px";
        // 当前图片运动到右边
        move(imgLiS[index],'left',width)
        // 要看的图片运动到中间
        move(imgLiS[num],'left',0)
        // 运动完成以后容器里面显示的是num这个图
        // 所以记录当前索引的index里面的值变成num
        index = num;
        light()

    }

    // 看下一张图的函数
    function nextImg(){
        var num = index + 1;
        if(num>imgLiS.length-1){
            num = 0;
        }
        // 我认为下一张一定在右边
        imgLiS[num].style.left = width+"px";
        // 当前图片去左边
        move(imgLiS[index],'left',-width)
        // 我要看的下一张去中间
        move(imgLiS[num],'left',0)
        // 更新index的值
        index = num;
        light()
    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • js实现轮播图的完整代码

    今天写一个完整的轮播图,首先它需要实现三个功能: 1.鼠标放在小圆点上实现轮播 2.点击焦点按钮实现轮播 3.无缝自动轮播 轮播图的原理: 一系列的大小相等的图片平铺,利用CSS布局只显示一张图片,其余隐藏.通过计算偏移量(封装一个动画函数)自动播放,或通过手动点击事件切换图片. html布局: <div id="box" class="all"> <div class="inner"> <!-- 相框-->

  • JS实现左右无缝轮播图代码

    废话不多说了,直接给大家贴代码了. 无缝轮播图: <title>无缝轮播图</title> <style> *{margin: 0;padding:0; } ul{list-style: none;} .banner{width: 600px;height: 300px;border: 2px solid #ccc;margin: 100px auto;position: relative;overflow: hidden;} .img{position: absolu

  • js实现支持手机滑动切换的轮播图片效果实例

    本文实例讲述了js实现支持手机滑动切换的轮播图片效果的方法.分享给大家供大家参考.具体如下: 运行效果如下: 完整实例代码点击此处本站下载. 使用方法案例: <script type="text/javascript" src="../src/zepto.js"></script> <script type="text/javascript" src="../src/carousel-image.js&qu

  • js实现从左向右滑动式轮播图效果

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

  • 原生js实现轮播图的示例代码

    很多网站上都有轮播图,但却很难找到一个系统讲解的,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出. 原理: 将一些图片在一行中平铺,然后计算偏移量再利用定时器实现定时轮播. 步骤一:建立html基本布局 如下所示: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>轮播图</title> </hea

  • JS轮播图实现简单代码

    本文实例为大家分享了js轮播图实现代码,供大家参考,具体内容如下 思路: 1.首先要有个盛放图片的容器,设置为单幅图片的宽高,且overflow:hidden,这样保证每次可以只显示一个图片 2.Container内有个放图片的list进行position的定位 ,其中的图片采用float的方式,同时当图片进行轮播时,改变list的Left值使得其显示的图片发生变化. 3.图片的轮播使用定时器,通过定时器改变list的Left值是的图片循环展示 4.当鼠标滑动到图片上时,清除定时器,图片停止轮播

  • js实现点击左右按钮轮播图片效果实例

    本文实例讲述了js实现点击左右按钮轮播图片效果的方法.分享给大家供大家参考.具体实现方法如下: $(function () { var index = 1; var pPage = 1; var $v_citemss = $(".citemss"); var $v_show = $v_citemss.find("ul"); v_width = $v_citemss.width();//图片展示区外围div的大小 //注:若为整数,前边不能再加var,否则会被提示un

  • JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)

    1.本文使用js+jQuery实现轮播图,需要引用jquery包,另种实现分别是animate实现自适应的轮播,以及transform平滑轮播(在注释代码中). 2.代码中的图片大家自己更换就可以了,样式和逻辑均写在js里. 3.html标签代码,js代码 <div class="slider"> //轮播箭头 <p class="lastpic"><img src="../images/prev.png">&

  • 使用html+js+css 实现页面轮播图效果(实例讲解)

    html 页面 <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=

  • 原生js实现无限循环轮播图效果

    知识要点 1.实现无限循环的原理: 以偏移的距离来判断是否跳回第一张和最后一张 也可以利用循环判断图片的当前索引值 var newLeft=parseInt(list.style.left)+offset;//当前的偏移量+下一次的偏移量=新的偏移量 list.style.left=newLeft+"px";//当前的偏移值=新的偏移值 //以偏移的距离来判断是否跳回第一张和最后一张 if(newLeft>-600){ list.style.left=-3000+"px

随机推荐