原生JS实现图片轮播

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>大图滚动</title>
    <style type="text/css">
        *{
            margin:0;
            padding:0;
            border:0;
        }
        .clear{
            *zoom:1;
        }
        .clear:after{
            visibility: none;
            content:"";
            display:block;
            clear:both;
            height:0;
        }
        #wrap{
            width: 510px;
            height:286px;
            margin:0 auto;
            position:relative;
            background: pink;
            overflow: hidden;
        }
        #inner{
            width: 1000%;
            height:100%;
            position:absolute;
            left:0;
            top:0;
        }
        #inner img{
            width:10%;
            height:100%;
            float: left;
        }
        .paganation{
            width: 100%;
            position: absolute;
            bottom:10px;
            text-align:center;
        }
        .paganation span{
            padding:5px 8px;
            background: #F2F2F2;
            color:red;
            border-radius:50%;
            cursor: pointer
        }
        .paganation .selected{
            background: red;
            color:white;
        }
        .arrow{
            position:absolute;
            top:0;
            width: 30px;
            height: 286px;
            line-height: 286px;
            text-align: center;
            color: red;
            cursor: pointer;
        }
        #right{
            right: 0;
        }
        .arrow:hover{
            background: rgba(0,0,0,0.5);
        }
    </style>
</head>
<body>
<div id="wrap"><!-- 图片展示区 -->
    <div id="inner" class="clear"><!-- 所有图片并排的块 -->
        <img style="background:red;" src="img/1.jpg" alt="">
        <img style="background:orange;" src="img/2.jpg" alt="">
        <img style="background:green;" src="img/3.jpg" alt="">
        <img style="background:cyan;" src="img/4.jpg" alt="">
        <img style="background:yellow;" src="img/5.jpg" alt="">
        <img style="background:purple;" src="img/6.jpg" alt="">
        <img style="background:pink;" src="img/7.jpg" alt="">
        <img style="background:blue;" src="img/8.jpg" alt="">
        <img style="background:red;" src="img/1.jpg" alt="">
    </div>
    <div class="paganation" id="paganation"><!-- 页面按钮区域 -->
        <span class ="selected">1</span>
        <span>2</span>
        <span>3</span>
        <span>4</span>
        <span>5</span>
        <span>6</span>
        <span>7</span>
        <span>8</span>
    </div>
    <div id="left" class="arrow"><</div><!-- 向左切换按钮 -->
    <div id="right" class="arrow">></div><!-- 向右切换按钮 -->
</div>
<script type="text/javascript">
    var wrap=document.getElementById("wrap");
    var inner=document.getElementById("inner");
    var spanList=document.getElementById("paganation").getElementsByTagName("span");
    var left=document.getElementById("left");
    var right=document.getElementById("right");

    var clickFlag=true;//设置左右切换标记位防止连续按
    var time//主要用来设置自动滑动的计时器
    var index=0;//记录每次滑动图片的下标
    var Distance=wrap.offsetWidth;//获取展示区的宽度,即每张图片的宽度
    //定义图片滑动的函数
    function AutoGo(){
        var start=inner.offsetLeft;//获取移动块当前的left的开始坐标
        var end=index*Distance*(-1);//获取移动块移动结束的坐标。
        //计算公式即当移动到第三张图片时,图片下标为2乘以图片的宽度就是块的left值。
        var change=end-start;//偏移量

        var timer;//用计时器为图片添加动画效果
        var t=0;
        var maxT=50;//滑动的效率
        clear();//先把按钮状态清除,再让对应按钮改变状态
        if(index==spanList.length){
            spanList[0].className="selected";
        }else{
            spanList[index].className="selected";
        }
        clearInterval(timer);//开启计时器前先把之前的清
        timer=setInterval(function(){
            t++;
            if(t>=maxT){//当图片到达终点停止计时器
                clearInterval(timer);
                clickFlag=true;//当图片到达终点才能切换
            }
            inner.style.left=change/maxT*t+start+"px";//每个17毫秒让块移动
            if(index==spanList.length&&t>=maxT){
                inner.style.left=0;
                index=0;
                //当图片到最后一张时把它瞬间切换回第一张,由于都同一张图片不会影响效果
            }
        },17);
    }
    //编写图片向右滑动的函数
    function forward(){
        index++;
        //当图片下标到最后一张把小标换0
        if(index>spanList.length){
            index=0;
        }
        AutoGo();
    }
    //编写图片向左滑动函数
    function backward(){
        index--;
        //当图片下标到第一张让它返回到倒数第二张,
        //left值要变到最后一张才不影响过渡效果
        if(index<0){
            index=spanList.length-1;
            inner.style.left=(index+1)*Distance*(-1)+"px";
        }
        AutoGo();
    }

    //开启图片自动向右滑动的计时器
    time=setInterval(forward,3000);

    //设置鼠标悬停动画停止
    wrap.onmouseover=function(){
        clearInterval(time);
    }
    wrap.onmouseout=function(){
        time=setInterval(forward,3000);
    }

    //遍历每个按钮让其切换到对应图片
    for(var i=0;i<spanList.length;i++){
        spanList[i].onclick=function(){
            index=this.innerText-1;
            AutoGo();
        }
    }

    //左切换事件
    left.onclick=function(){
        if(clickFlag){
            backward();
        }
        clickFlag=false;
    }
    //右切换事件
    right.onclick=function(){
        if(clickFlag){
            forward();
        }
        clickFlag=false;
    }

    //清除页面所有按钮状态颜色
    function clear(){
        for(var i=0;i<spanList.length;i++){
            spanList[i].className="";
        }
    }

</script>
</body>
</html>

原文地址:https://www.cnblogs.com/QianBoy/p/8206120.html

时间: 2024-10-07 00:38:42

原生JS实现图片轮播的相关文章

基于原生js的图片轮播效果简单实现

基本效果如下: 实现了三张图片自动轮播+按键点击切换的效果. 基本思想: 图片轮播的效果和老式电影院的胶片放映形式很相似,在老式的电影院放映中,使用长长的胶片记录影片,胶片上是按顺序排列的一系列图片,通过快速通过放映机放映口,使这些图片产生一个连贯的切换效果,形成了动态的影片.所以,这里图片轮播的形式也可以采用这种方式来形成动画效果. 形式如下图: (黑框即我们的最外层的容器,充当放映机的存在:绿框就是胶片,上面搭载着很多的图片:粉框内即我们要轮播的图片) 从上图出发,我们要做到图片轮播,那么只

原生js实现图片轮播效果

思路:设置父容器(一定宽度,一定高度,相对定位,子容器超出部分进行隐藏),子容器图片并排(浮动,绝对定位,每次点击进行相应的左或右偏移量) 1.html: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Carousel figure</title> 5 <meta charset="utf-8"> 6 <!-- 浏览器标签页显示图标 --> 7 <lin

用jQuery基于原生js封装的轮播

我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址的数组,图片宽度,上一页,下一页的id,图片列表即ul的id(这儿使用无序列表排列的图片),自动轮播间隔的时间.功能:实现了轮播的自动轮播,可以点击上一页,下一页进行切换. 下面是html中的代码,只需要把存放的容器写好,引入jquery即可: <!DOCTYPE html><html>

原生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原生代码之图片轮播

话不多说说,直接上代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script src="./public/js/jquery-1.11.2-min.js">&l

使用JS实现图片轮播(前后首尾相接)

最近各种跑面试,终于还是被问到这个,一脑子浆糊,当时没想出来首尾相接怎么搞,回来之后研究了一波,终于搞出来了,不多说,直接看代码 代码参考了一位已经写好了图片轮播功能的(再次表示感谢),但是没有首尾相接的功能,本人在此基础上增加了首尾相接功能. 效果如下: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-tra

用JS做图片轮播

脚本之家 首页应用手游攻略教程 ﹤首页 >> 网络编程 >> JavaScript >> 网页特效 >> 图象特效 js 图片轮播(5张图片) 作者:mdxy-dxy 网上比较常见的用jquery实现的图片轮播效果代码. 演示地址:http://img.jb51.net/online/picPlayer/picplay.htm <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/

js实现图片轮播

实现图片轮播的效果 1 <script language =javascript > 2 function $(id){ 3 return document.getElementById(id); 4 } 5 var curIndex = 0; 6 //时间间隔 单位毫秒 7 var times = 1000; 8 var arr = []; 9 arr[0] = "0.jpg"; 10 arr[1] = "1.jpg"; 11 arr[2] = &qu

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

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