• jQuery----无缝轮播图


    1、效果

    2、html代码

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="css/iconfont.css">
        <link rel="stylesheet" type="text/css" href="css/slide.less">
    
    </head>
    <body>
        <div class="slide-container"></div>
        <script type="text/javascript" src='js/jquery-2.2.1.min.js'></script>
        <script type="text/javascript" src = 'js/slide.js'></script>
    </body>
    </html>
    

      

     3、less代码

    .slide-container{
    	 1000px;
        height: 560px;
    	margin: 0 auto;
    	box-shadow: 0 0 10px 3px gray;
    	position: relative;
    	top: 0;
    	left: 0;
    	overflow: hidden;
    	.slide-box{
    		 1000px;
    		height: 560px;
    		transition: all 0.4s linear;
    		.slide-list{
    			height: 560px;
    			overflow: hidden;
    			display: inline-block;
    			float: left;
    			img{
    				 1000px;
    				height: 100%;
    			}
    		}
    		.first-one{
    			position: absolute;
    			top: 0;
    			left: -1000px;
    		}
    	   .last-one{
    	   	position: absolute; 
    	   	top: 0;
    	   	right: -1000px;
    	   }
    	}
    	.slide-btn{
    		 80px;
    		height: 560px;
    		background-color: rgba(0,0,0,0.4);
    		position: absolute;
    		z-index: 3;
    		top: 0;
    		text-align:center;
    		transition: all 0.3s linear;
    		cursor: pointer;
    		i{
    			color: white;
    			font-size: 40px;
    			line-height: 560px;
    		}
    	}
    	.slide-left-btn{
             left: 0;
             transform: translateX(-80px);
    	}
    	.slide-right-btn{
             right: 0;
             transform: translateX(80px);
    	}
    	&:hover{
    		.slide-left-btn{
                  transform:translateX(0);
    		}
    		.slide-right-btn{
                  transform:translateX(0);
    		}
    		.slide-menu{
    			visibility: visible;
    		}
    	}
    	.slide-menu{
    		 visibility: hidden;
    		 position: absolute;
    		 bottom: 20px;
    		 z-index: 3;
    		 left: 50%;
    		 transform: translateX(-50%);
    		 display: inline-block;
    		  auto;
    		 height: 56px;
    		 text-align: center;
    		 white-space: nowrap;
    		 padding: 20px;
    		 background-color: rgba(0,0,0,0.4);
    		.list{
    			display: inline-block;
    			 100px;
    			height: 56px;
    			overflow: hidden;
    			border: 2px solid white;
    			margin: 4px;
    			img{
    				display: inline-block;
    				 100px;
    				height: 56px;
    				background-color: red;
    				border-radius: 10px;
    				margin: 0 10px 0 10px;
    				cursor: pointer;
    			}
    			&:hover{
    				border: 2px solid red;
    			}
    		}
    		.choose{
    			border: 2px solid red;
    		}
    	}
    }
    

      

    3、js代码

    var imgObj = {
        "imgList": [
            { "name": "name1", "url": "imgs/1.jpg", "detail": "1号宝贝", "link": "http://www.hao123.com" },
            { "name": "name2", "url": "imgs/2.jpg", "detail": "2号宝贝", "link": "http://www.baidu.com" },
            { "name": "name3", "url": "imgs/3.jpg", "detail": "3号宝贝", "link": "http://www.w3cschool.com" },
            { "name": "name4", "url": "imgs/4.jpg", "detail": "4号宝贝", "link": "http://www.taobao.com" },
            { "name": "name2", "url": "imgs/5.jpg", "detail": "5号宝贝", "link": "http://www.jd.com" },
            { "name": "name3", "url": "imgs/6.jpg", "detail": "6号宝贝", "link": "http://www.lianxiang.com" },
            { "name": "name4", "url": "imgs/7.jpg", "detail": "7号宝贝", "link": "http://www.meituan.com" }
        ]
    }
    
    var parent = $(".slide-container");
    var now_index = 1;
    var prev_index = 1;
    var len = imgObj.imgList.length;
    var imgList = imgObj.imgList;
    var is_active = true; //是否自动轮播
    var is_running = true;
    creatSlide();
    
    function creatSlide() {
        initSlide();
        addSlideOperation();
        addClock(is_active);
    
        function initSlide() {
            parent.empty();
            var rightBtn = $("<div class='slide-left-btn slide-btn'>" +
                "<i class='iconfont icon-left-copy'></i>" +
                "</div>");
            var leftBtn = $("<div class='slide-right-btn slide-btn'>" +
                "<i class='iconfont icon-right-copy'></i>" +
                "</div>");
            parent.append(rightBtn);
            parent.append(leftBtn);
    
            var slideBox = $("<div class='slide-box'></div>");
            slideBox.css("width", (len * 1000) + "px");
    
    
    
            var slideList = $("<div class='slide-list first-one'>" +
                "<a href='" + imgList[len - 1].url + "'>" +
                "<img src='static/imgs/" + len + ".jpg'>" +
                "</a>" +
                "</div>");
            slideBox.prepend(slideList);
            for (var i = 0; i < len; i++) {
    
                var slideList = $("<div class='slide-list'>" +
                    "<a href='" + imgList[i].url + "'>" +
                    "<img src='static/imgs/" + (i + 1) + ".jpg'>" +
                    "</a>" +
                    "</div>");
                slideBox.append(slideList);
            }
            var slideList = $("<div class='slide-list last-one'>" +
                "<a href='" + imgList[1].url + "'>" +
                "<img src='static/imgs/" + (1) + ".jpg'>" +
                "</a>" +
                "</div>");
            slideBox.append(slideList);
    
    
            parent.append(slideBox);
            var slideMenu = $("<div class='slide-menu'></div>");
            for (var j = 0; j < len; j++) {
                var menuList = $("<div class='list list" + (j + 1) + "'>" +
                    "<img src='static/imgs/" + (j + 1) + ".jpg'>" +
                    "</div>");
                if (j == 0) {
                    menuList.addClass("choose");
                }
                slideMenu.append(menuList);
            }
            parent.append(slideMenu);
        }
    
    
        function addSlideOperation() {
            var slideBox = parent.find(".slide-box");
            var slideMenu = parent.find(".slide-menu");
    
            //左键
            parent.on("click", ".slide-left-btn", function() {
    
                if (is_running) {
                    is_running = false;
                    if (now_index < len) {
                        now_index++;
                        console.log(now_index);
                        slideBox.attr("style", " " + (len * 1000) + "px;transform:translateX(" + (-(now_index - 1) * 1000) + "px);");
                        var tar = slideMenu.find(".list" + now_index);
                        tar.addClass("choose");
                        tar.siblings().removeClass("choose");
                    } else if (now_index == len) {
    
                        now_index = 1;
    
                        slideBox.attr("style", "transition:all 0.3s linear; " + ((len) * 1000) + "px;transform:translateX(" + (-(len) * 1000) + "px);");
                        setTimeout(function() {
                            slideBox.attr("style", "transition:all 0s linear; " + ((len) * 1000) + "px;transform:translateX(" + (0) + "px);");
                        }, 300)
                        var tar = slideMenu.find(".list" + 1);
                        tar.addClass("choose");
                        tar.siblings().removeClass("choose");
                    }
                    is_running = true;
                }
            })
    
            //右键
            parent.on("click", ".slide-right-btn", function() {
    
                if (is_running) {
                    is_running = false;
                    if (now_index > 1) {
                        now_index--;
                        console.log(now_index);
                        slideBox.attr("style", " " + (len * 1000) + "px;transform:translateX(" + (-(now_index - 1) * 1000) + "px);");
                        var tar = slideMenu.find(".list" + now_index);
                        tar.addClass("choose");
                        tar.siblings().removeClass("choose");
                    } else if (now_index == 1) {
                        now_index = len;
                        slideBox.attr("style", "transition:all 0.3s linear; " + ((len) * 1000) + "px;transform:translateX(" + (1000) + "px);");
                        setTimeout(function() {
                            slideBox.attr("style", "transition:all 0s linear; " + ((len) * 1000) + "px;transform:translateX(" + ((1 - len) * 1000) + "px);");
                        }, 300)
                        var tar = slideMenu.find(".list" + len);
                        tar.addClass("choose");
                        tar.siblings().removeClass("choose");
                    }
                    is_running = true;
                }
            })
    
            //小图选取
            parent.on("click", ".slide-menu .list", function() {
                now_index = $(this).index() + 1;
                console.log(now_index);
                slideBox.attr("style", " " + (len * 1000) + "px;transform:translateX(" + (-(now_index - 1) * 1000) + "px);");
                $(this).addClass("choose");
                $(this).siblings().removeClass("choose");
            })
    
            //mouseover 停止自动轮播
            parent.on("mouseover", function() {
                active = false;
                addClock(active);
            })
    
            //mouseout 停止自动轮播
            parent.on("mouseout", function() {
                active = true;
                addClock(active);
            })
        }
    
    
        function addClock(active) {
            var active = active;
            if (active) {
                clock = setInterval(function() {
                    var is_right = parseInt(Math.random());
                    if (is_right) {
                        parent.find(".slide-right-btn").click();
                    } else {
                        parent.find(".slide-left-btn").click();
                    }
                }, 3000)
            } else {
                clearTimeout(clock);
            }
        }
    
    }
    

      4、总结

    轮播图实现的难点在于头调到尾,尾调到头,为实现这个我在头尾加了两个块来实现

  • 相关阅读:
    项目中看似很难的问题可能很简单
    ASP.NET数据列表“全选”,批量处理的JS实现
    [转]给网站增加如:flv,torrent等特殊后缀格式文件下载
    GD Graphics Library
    在VS2008中编译64位程序以及遇到的问题
    关于C#闭包
    SNMP协议介绍及SNMP library
    ASP.NET MVC 使用总结(二)——扩展HtmlHelper实现动态生成title及meta
    LINQ查询代码整理(一)
    使用方便的SDK帮助文档
  • 原文地址:https://www.cnblogs.com/SunlikeLWL/p/7351715.html
Copyright © 2020-2023  润新知