原生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
}
.imgwall ul {
    position: absolute;
    list-style: none;
    padding: 0;
    margin: 0;
    left: 0
}
.imgwall li {
    float: left
}
.imgwall img {
    display: block;
    filter:alpha(opacity=50); /*IE滤镜,透明度50%*/
    -moz-opacity:0.5; /*Firefox私有,透明度50%*/
    opacity:0.5;/*其他,透明度50%*/
}
.dot {
    width: 100%;
    height: 10px;
    position: absolute;
    bottom: 20px;
}
.warp {
    width: 50%;
    margin: 0 auto;
    text-align: center
}
.warp a {
    display: block;
    float: left;
}
.warp span {
    display: block;
    height: 20px;
    width: 20px;
    border-radius: 100px;
    margin: 0 auto;
    background: white;
    border: 4px solid #DDD;
    filter:alpha(opacity=70); /*IE滤镜*/
    -moz-opacity:0.7; /*Firefox私有*/
    opacity:0.7 /*其他*/
}
.warp .active {
    background: red;
}
</style>
</head>
<body>
<div class="imgwall">
  <ul class="imgul">
    <li><a href="javascript:void(0)"><img src="....jpg" /></a></li>
    <li><a href="javascript:void(0)"><img src="....jpg" /></a></li>
    <li><a href="javascript:void(0)"><img src="....jpg" /></a></li>
    <li><a href="javascript:void(0)"><img src="....jpg" /></a></li>
  </ul>
  <div class="dot">
    <div class="warp"> </div>
  </div>
</div>
<div class="imgwall">
  <ul class="imgul">
    <li><a href="javascript:void(0)"><img src="....jpg" /></a></li>
    <li><a href="javascript:void(0)"><img src="....jpg"  /></a></li>
    <li><a href="javascript:void(0)"><img src="....jpg"  /></a></li>
  </ul>
  <div class="dot">
    <div class="warp"> </div>
  </div>
</div>
</body>
<script>
window.onload=function(){
    //设置全局变量
    var imgwall = getByClass(‘imgwall‘);
    var warp = getByClass(‘warp‘);

    config();
    autoMove(4000);//每隔4秒钟自动滚一张

    //初始化设置
    function config(){
    for(var i=0;i<imgwall.length;i++){
    imgwall[i].ul = imgwall[i].getElementsByTagName(‘ul‘)[0];
    imgwall[i].img = imgwall[i].getElementsByTagName(‘img‘)[0];
    imgwall[i].imgs =  imgwall[i].getElementsByTagName(‘img‘);
    imgwall[i].target = -imgwall[i].img.offsetWidth;
    //添加span标签
    for(var j=0;j<imgwall[i].getElementsByTagName(‘img‘).length;j++)
    {
        var aWidth = 100/imgwall[i].getElementsByTagName(‘img‘).length + "%";
        warp[i].innerHTML  += ‘<a style = "width:‘+aWidth+‘"><span></span></a>‘;
    }
    //设置整体大小
    imgwall[i].style.width = imgwall[i].img.offsetWidth+‘px‘;
    imgwall[i].style.height = imgwall[i].img.offsetHeight+‘px‘;

    imgwall[i].doter = imgwall[i].getElementsByTagName(‘span‘);
    imgwall[i].ul.style.width = imgwall[i].doter.length*imgwall[i].img.offsetWidth+‘px‘;//设置ul的宽度

    //设置标志点的样式和事件
    for(var j=0;j<imgwall[i].doter.length;j++){
        imgwall[i].doter[0].className=‘active‘;
        startMove(imgwall[i].img,{‘opacity‘:100,‘padding-top‘:0},10);
        imgwall[i].doter[j].allbrother = imgwall[i].doter;
        imgwall[i].doter[j].pul=imgwall[i].ul;
        imgwall[i].doter[j].pimg=imgwall[i].img;
        imgwall[i].doter[j].index = [i,j];
        imgwall[i].doter[j].onclick=function(){
            for(var i=0;i<this.allbrother.length;i++){
                this.allbrother[i].className = ‘‘;
                startMove(imgwall[this.index[0]].imgs[i],{‘opacity‘:0,‘padding-top‘:this.pimg.offsetHeight},50);
                }
            this.className=‘active‘;
            startMove(this.pul,{‘left‘:-this.index[1]*this.pimg.offsetWidth},10);
            startMove(imgwall[this.index[0]].imgs[this.index[1]],{‘opacity‘:100,‘padding-top‘:0},10);
            imgwall[this.index[0]].target = -imgwall[this.index[0]].img.offsetWidth*(this.index[1]);
            }
        }
}
    }

    //自动播放
    function autoMove(time){
        setInterval(function(){

            for(var i=0;i<imgwall.length;i++){
                //判断是否滚到最后一个图
                console.log(imgwall[i].target);
                if(Math.abs(imgwall[i].ul.offsetLeft) >= (imgwall[i].getElementsByTagName(‘img‘).length-1)*imgwall[i].img.offsetWidth)
                {
                    imgwall[i].target = 0 ;//跳到第一张
                    imgwall[i].ul.style.left = imgwall[i].target;
                }
                startMove(imgwall[i].ul,{‘left‘:imgwall[i].target},10);
                imgwall[i].target -= imgwall[i].img.offsetWidth;
                for(var j=0;j<imgwall[i].doter.length;j++){
                        imgwall[i].doter[j].className = ‘‘;
                        imgwall[i].doter[Math.abs(imgwall[i].target)/imgwall[i].img.offsetWidth-1].className = ‘active‘;
                        startMove(imgwall[i].imgs[j],{‘opacity‘:0,‘padding-top‘:imgwall[i].img.offsetHeight},50);
                        startMove(imgwall[i].imgs[Math.abs(imgwall[i].target)/imgwall[i].img.offsetWidth-1],{‘opacity‘:100,‘padding-top‘:0},10);
                    }
                }
            },time);    

    }

    //class选择器
    function getByClass(classname){
        var obj=document.getElementsByTagName(‘*‘);
        var res=[];
        for(var i=0;i<obj.length;i++){
            if(obj[i].className == classname)
            {
                res.push(obj[i]);
                }
            }
            return res;
        }
    //获取样式
    function getStyleName(obj,attr)
{
    if(obj.currentStyle)
    {
        return obj.currentStyle[attr];
    }
    else
    {
        return getComputedStyle(obj,null)[attr];
    };
};
    //运动框架
    function startMove(obj,json,v,endFn)
    {
        clearInterval(obj.timer);
        obj.timer=setInterval(function(){
            var mStop=true;
            for(var attr in json)
            {
                var crr=0;
                if(attr==‘opacity‘)
                {
                    crr=Math.round(parseFloat(getStyleName(obj,attr)*100));
                }
                else
                {
                    crr=parseInt(getStyleName(obj,attr));    

                }
                var speed=(json[attr]-crr)/v;
                speed=speed>0?Math.ceil(speed):Math.floor(speed);
                if(crr!=json[attr]){mStop=false};
                if(attr==‘opacity‘)
                {
                    obj.style[attr]=(crr+speed)/100;
                    obj.style.filter=‘alpha(opacity=‘+(crr+speed)+‘)‘;
                }
                else
                {
                    obj.style[attr]=crr+speed+‘px‘;
                }
            }
            if(mStop)
            {
                clearInterval(obj.timer);
                if(endFn)endFn();
            }
        },30);
    }
}
</script>
</html>

没有考虑性能优化问题,纯属想到哪编到哪里,连遍历函数都没有用。

使用方法:只需把class=‘imgwall’的div放到要放的位置,然后修改里面img标签和a标签就可以了,其他什么都不用做。

注意事项:同一个页面,可以同时多处使用。每张图片的大小要一致,图片数量随意~。

时间: 2024-10-12 14:55:42

原生js实现的轮播图,易用+可多用的相关文章

原生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仿网易轮播图

<!-- HTML部分 --> <div id="wrap"> <div class="picBox"> <!-- 图片区域 --> <div id="pic"> <div><a href="#"><img src="imgs/1.jpg" alt=""/></a></div

原生JavaScript实现无缝轮播图

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

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

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