原生js仿网易轮播图

<!-- HTML部分 -->
<div id="wrap">
    <div class="picBox">    <!-- 图片区域 -->
        <div id="pic">
            <div><a href="#"><img src="imgs/1.jpg" alt=""/></a></div>
            <div><a href="#"><img src="imgs/2.jpg" alt=""/></a></div>
            <div><a href="#"><img src="imgs/3.jpg" alt=""/></a></div>
            <div><a href="#"><img src="imgs/4.jpg" alt=""/></a></div>
            <div><a href="#"><img src="imgs/5.jpg" alt=""/></a></div>
        </div>
    </div>
    <div id="ctrl">    <!-- 按钮控制区域 -->
        <span class="ctrlPrev"><</span>
        <span class="ctrlNext">></span>
    </div>
</div>
/* CSS部分 */
* {margin: 0;padding: 0;}
img {vertical-align: top;}
#wrap {width: 576px;height: 374px;margin: 150px auto;position: relative;overflow: hidden;}
.picBox {width: 576px;height: 324px;}
#pic {width: 1152px;height: 324px;}
#pic div {position: absolute;top: 0;left: 0;width: 576px;height: 324px;}
#pic div img{width: 100%;}
#ctrl {text-align: center;padding-top: 5px;}
.ctrlList {width: 24px;height: 5px;display: inline-block;background:#e4e4e4;margin: 0 5px;cursor: pointer;text-indent: 10em;overflow: hidden;}
.active {background: #7bbedf!important;}
.ctrlPrev,.ctrlNext {position: absolute;top: 35%;font-size:50px;color:#fff;line-height: 42px;width: 40px;height: 50px;opacity: 0.8;cursor: pointer;}
.ctrlPrev {left: 0;}
.ctrlNext {right: 0;}
// JS部分
function $(id) {
    return document.getElementById(id);
}

var aPic = $("pic").children;    //获取图片的个数
var disX = $("wrap").offsetWidth;    //获取大盒子的宽度,即图片要走的宽度
var aSpan = $("ctrl").children;    //获取按钮的个数

for (var i = 1; i < aPic.length; i++) {
    aPic[i].style.left = disX + "px";    //除了第一张,其他图片默认在大盒子之外
}

for (var i = 0; i < aPic.length; i++) {    //自动生成小按钮
    var span = document.createElement("span");    //创建span元素
    span.className = "ctrlList";
    span.innerHTML = aPic.length - i;       //添加序号
    $("ctrl").insertBefore(span, aSpan[1]);    //添加到#ctrl内
}

aSpan[1].className = "ctrlList active";    //第一个按钮默认选中

var index = 0;    //建立索引

for (var k in aSpan) {    //遍历按钮
    aSpan[k].onclick = function () {
        if (this.className == "ctrlPrev") {    //点击上一张
            move(aPic[index], disX)    //当前张右移出大盒子
            --index < 0 ? index = aPic.length - 1 : index;    //先运算后判断index是否大于图片长度 是则等于长度
            aPic[index].style.left = -disX + "px";    //下一张直接移动到大盒子左边
            move(aPic[index], 0)    //下一张左移进大盒子
            active();
        } else if (this.className == "ctrlNext") {    //点击下一张
            autoPlay();
        } else {    //点击小按钮
            var newIndex = this.innerHTML - 1;    //建立新索引匹配序号
            if (index < newIndex) {    //当前索引小于被点击索引号
                move(aPic[index], -disX)    //当前张左移出大盒子
                aPic[newIndex].style.left = disX + "px";    //下一张直接移动到大盒子右边
            } else if (index > newIndex) {    //当前索引大于被点击索引号
                move(aPic[index], disX)    //当前张右移出大盒子
                aPic[newIndex].style.left = -disX + "px";    //下一张直接移动到大盒子左边
            }
            move(aPic[newIndex], 0)    //下一张移进大盒子
            index = newIndex;    //当前索引赋值给旧索引
            active();
        }
    }
}

var timer = null;
timer = setInterval(autoPlay, 2000);    //添加定时器

$("wrap").onmouseover = function () {    //鼠标移入关闭定时器
    clearInterval(timer);
}

$("wrap").onmouseout = function () {    //鼠标移出开启定时器
    timer = setInterval(autoPlay, 2000);
}

function active() {    //小按钮选中
    for (var i = 1; i < aSpan.length - 1; i++) {
        aSpan[i].className = "ctrlList";
    }
    aSpan[index + 1].className = "ctrlList active";
}

function move(obj, left) {    //移动动画
    clearInterval(obj.timer);
    obj.timer = setInterval(function () {
        var step = (left - obj.offsetLeft) / 8;    //步长
        step = step > 0 ? Math.ceil(step) : Math.floor(step);    //处理小数除不净
        obj.style.left = obj.offsetLeft + step + "px";
        if (obj.offsetLeft == left) {
            clearInterval(obj.timer);
        }
    }, 30)
}

function autoPlay() {    //自动播放 等同于点击下一张
    move(aPic[index], -disX)    //当前张左移出大盒子
    ++index > aPic.length - 1 ? index = 0 : index;    //先运算后判断index是否大于图片长度 是则等于0
    aPic[index].style.left = disX + "px";    //下一张直接移动到大盒子右边
    move(aPic[index], 0)    //下一张右移进大盒子
    active();
}
时间: 2024-12-11 13:09:31

原生js仿网易轮播图的相关文章

纯原生javascript仿网易轮播图

第一次有自己的关于代码的博客,感到诚惶诚恐.这可能是我第一次以程序猿,或者连初级程序猿都不是的身份下开通的个人“技术”(胡写乱写)博客园地.闲言碎语不要讲,咱今天就写一点关于js的代码吧.网易首页大家肯定都去过,在首页左侧部分有个轮播图,效果很好,构思精巧,非常诱人.注,此demo非本人原创,在这里进行个人解读,力求通俗易懂(主要是让我自己明白!). 那么如何实现相关技术,进而实现如图效果呢?下面的进度条是用JQuery写的,这里暂不考虑.下面从三个方面讨论网一轮播图. 一.HTML部分 1 <

原生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 左右切换轮播图

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

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点击轮播图效果

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script> <title>原生js轮播效果</title&g

原生js实现的轮播图,易用+可多用

<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style rel="stylesheet"> body { margin: 0; padding: 0 } .imgwall { position: relative; overflow: hidden; margin: 0 auto

原生JavaScript实现无缝轮播图

无缝轮播图是页面常用的特效之一,然而在实际的开发过程中,大部分的开发者都会使用插件来对轮播图进行开发,那么它的底层到底是怎么实现的呢,本文章将围绕这一问题展开探讨. 在讨论如何利用原生JS实现图片之间无缝切换轮播的动画效果之前,我们先来谈谈无缝轮播图片的css布局. 首先我们需要一个用来显示图片的DIV容器,然后把想要轮播的图片没有缝隙的排成一行放入DIV容器中,给DIV容器设置 overflow: hidden,这样在页面中就可以只看到一张图片,然后通过利用JS来移动ul的left值就能达到无