zoukankan      html  css  js  c++  java
  • 原生 js 左右切换轮播图

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

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            *{padding:0;margin:0;}
            #parent{
                width:50%;
                height:200px;
                border:1px solid red;
                margin:0 auto;
            }
    
    
            #imgBox{
                width:500px;
                height:200px;
                position:relative;/*必须有===*/
                overflow:hidden;/*必须有===*/
                -webkit-user-select: none;
                -moz-user-select: none;
                -ms-user-select: none;
                user-select: none;
            }
            ul{
                /*动画就是改变ul的left值的效果,所以一定要有定位*/
                position:absolute;/*必须有*/
                left:0;/*必须有*/
    
            }
            li{list-style: none;/*必须有*/
                height:200px;/*必须有*/
                width:500px;/*必须有*/
                float:left;/*必须有*/
            }
            .span{
                display:inline-block;
                width:20px;
                height:20px;
                line-height:20px;
                text-align: center;
                border-radius:50%;
                color:white;
            }
        </style>
    </head>
    <body>
    <div id="parent">
        <div id="imgBox">
            <ul id='ul'>
                <li style='background:red;'>第一个</li>
                <li style='background:yellow;'>第二个</li>
                <li style='background:pink;'>第三个</li>
                <li style='background:green;'>第四个</li>
                <li style='background:blue;'>第五个</li>
                <li style='background:blue;'>第6个</li>
                <li style='background:green;'>第7个</li>
                <li style='background:blue;'>第8个</li>
                <li style='background:green;'>第9个</li>
                <li style='background:blue;'>第10个</li>
            </ul>
        </div>
        <a href="#" id="prev">向左</a>
        <a href="#" id="next">向右</a>
        <!-- 放小圆点的盒子-->
        <div id="arcBox">
            <!-- 小圆点的位置 -->
        </div>
    </div>
    <script>
        var chefElement = {
            bgColor1:'#cccccc',//小圆点的背景颜色
            bgColor2:'red',//获得焦点的小圆点的背景颜色
            animationSpeed:1, //每多少毫秒移动一次
            minSpeed:5,//每次移动的距离
            stopTime:5000, //动画停留的时间,毫秒为单位 包含移动所花费的时间
    
            //获取页面元素
            prev:document.getElementById('prev'),
            next:document.getElementById('next'),
            parent:document.getElementById('parent'),
            ul:document.getElementById('ul'),
            li:document.getElementById('ul').getElementsByTagName('li'),
            arc:document.getElementById("arcBox"),
            liWidth:document.getElementById('ul').getElementsByTagName('li')[0].offsetWidth,
            type:true,
            nextTimer:null,
            prevTimer:null,
            parent_n:null
        };
    
        //初始化小圆点/指定放图片的盒子 ul 的宽度
        var elemSpan = (function(){
            chefElement.ul.style.width = chefElement.liWidth*chefElement.li.length+'px';
            for(var i = 0;i<chefElement.li.length;i++){
                chefElement.li[i].index = i;
                var span = document.createElement('span');
                    span.className = 'span';
                    span.index = i;
                    span.style.background = chefElement.bgColor1;
                    span.innerHTML = i+1;
                chefElement.arc.appendChild(span);
            }
            var objSpan = chefElement.arc.getElementsByTagName('span');
    
            //创建完以后第一个小圆点显示指定的颜色
            objSpan[0].style.background = chefElement.bgColor2;
            return objSpan;
        })();
    
        //给每个小圆点添加事件
        chefElement.arc.onmouseover = function(ev){
            var ev = ev || window.event;
            var target = ev.target || ev.srcElement;
            if(target.nodeName.toLowerCase() == "span"){
                if(chefElement.type){
                    showImg(target.index);
                    changeBackgroundColor(target)
                    chefElement.type = true;
                }
            }
        }
    
        //改变小圆点的背景颜色
        function changeBackgroundColor(obj){
            for(var i = 0;i<elemSpan.length;i++){
                elemSpan[i].style.background = chefElement.bgColor1;
            }
            elemSpan[obj.index].style.background = chefElement.bgColor2;
        }
    
        //根据参数显示对应的图片。
        function showImg(inde){
            var this_li = chefElement.li[0].index;
    
            //把第一个元素放到最后面。
            if(inde>this_li){
                var x = inde-this_li;
                for(var y = 0;y<x;y++){
                    chefElement.ul.appendChild(chefElement.li[0]);
                }
            }
    
            //把最后一个元素放到第一的位置
            if(inde<this_li){
                var x_x = this_li-inde;
                for(var g = 0;g<x_x;g++){
                    chefElement.ul.insertBefore(chefElement.li[chefElement.li.length-1],chefElement.li[0]);
                }
            }
        }
    
        chefElement.prev.onclick = function(){
            if(chefElement.type){
                clearInterval(chefElement.prevTimer);
                chefElement.ul.insertBefore(chefElement.li[chefElement.li.length-1],chefElement.li[0]);
                chefElement.liWidth = chefElement.li[0].offsetWidth;
                chefElement.ul.style.left = '-'+chefElement.liWidth+'px';
                chefElement.prevTimer = setInterval(pre,chefElement.animationSpeed);
                chefElement.type = false;
                changeBackgroundColor(chefElement.li[0]);
            }
        };
        next.onclick = function(){
            if(chefElement.type){
                chefElement.liWidth = 0;
                clearInterval(chefElement.nextTimer);
                chefElement.nextTimer = setInterval(nex,chefElement.animationSpeed);
                chefElement.type = false;
                changeBackgroundColor(chefElement.li[1]);
            }
        };
    
        //next动画函数
        function nex(){
            chefElement.ul.style.left = '-'+chefElement.liWidth+ 'px';
            chefElement.liWidth += chefElement.minSpeed ;
            if(chefElement.liWidth >= chefElement.li[0].offsetWidth){
                clearInterval(chefElement.nextTimer);
                chefElement.ul.appendChild(chefElement.li[0]);
                chefElement.ul.style.left = 0;
                chefElement.type = true;
            }
        }
    
        //prev动画函数
        function pre(){
            chefElement.ul.style.left = '-'+chefElement.liWidth+'px';
            chefElement.liWidth -= chefElement.minSpeed ;
            if(chefElement.liWidth <= -1){
                chefElement.ul.style.left = 0;
                clearInterval(chefElement.prevTimer);
                chefElement.type = true;
            }
        }
    
        chefElement.parent.onmouseover = function(){
            clearInterval(chefElement.parent_n);
        };
        chefElement.parent.onmouseout = function(){
            chefElement.parent_n = setInterval(next.onclick,chefElement.stopTime);
        };
    
        //动画播放
        chefElement.parent_n = setInterval(next.onclick,chefElement.stopTime);
    </script>
    </body>
    </html>
  • 相关阅读:
    winform 通过 windows api 实现本机两个exe 消息推送
    winform ListView控件 绘制item和subitems颜色
    C# Windows Service创建和安装
    C# 解析xml文件(带命名空间 xmlns和 xmlns:xsi)
    H5+CSS3 实现分页功能
    C# HashTable Dictionary ConcurrentDictionary HashSet
    使用泛型返回类
    WPF的XAML注意点
    Http监听HttpListener接收请求的Nancy框架
    获取Windows后台进程
  • 原文地址:https://www.cnblogs.com/chefweb/p/5954569.html
Copyright © 2011-2022 走看看