• 轮播图(改进版)


    前言:

    环境: window 10, 谷歌浏览器

    需求

    实现多个图片按一定时间逐个显示,并可以按鼠标选择对应的图书

    代码

    • html
    <html>
    <head>
    	<title>轮播图</title>
    	<!-- 导入轮播 CSS  -->
    	<link rel="stylesheet"  href="autoPlay.css"/>
    	<!-- 导入轮播 JS	-->
    	<script type="text/javaScript" src="autoPlay.js"></script>
    	
    </head>
    <body>
    <!-- 图书商场首页轮播图  start -->
    	<div id="box_autoplay">
        	<div class="list">
            	<ul>
                	<li><img src="ad/index_ad1.jpg" width="660px" height="255px" /></li>
                	<li><img src="ad/index_ad2.jpg" width="660px" height="255px" /></li>
                	<li><img src="ad/index_ad3.jpg" width="660px" height="255px" /></li>
                	<li><img src="ad/index_ad4.jpg" width="660px" height="255px" /></li>
                	<li><img src="ad/index_ad5.jpg" width="660px" height="255px" /></li>
            	</ul>
        	</div>
    	</div>
    </body>
    </html>
    
    
    • css
        body, div, ul, li {
    	margin:0;
    	padding:0;
    }
    ul {
    	list-style-type:none;
    }
    #box_autoplay {
    position:relative;
    660px;
    height:255px;
    background:#fff;
    border-radius:5px;
    border:8px solid #fff;
    margin:10px auto;
    cursor:pointer;
    }
    #box_autoplay .list {
    	position:relative;
    	660px;
    	height:255px;
    	overflow:hidden;
    }
    #box_autoplay .list ul {
    	position:absolute;
    	top:0;
    	left:0;
    }
    #box_autoplay .list li {
    	660px;
    	height:255px;
    	overflow:hidden;
    }
    #box_autoplay .count {
    	position:absolute;
    	right:0;
    	bottom:5px;
    }
    #box_autoplay .count li {
    	color:#fff;
    	float:left;
    	20px;
    	height:20px;
    	cursor:pointer;
    	margin-right:5px;
    	overflow:hidden;
    	background:#F90;
    	opacity:0.7;
    	filter:alpha(opacity=70);
    	border-radius:20px;
    }
    #box_autoplay .count li.current {
    	color:#fff;
    	opacity:1;
    	filter:alpha(opacity=100);
    	font-weight:700;
    	background:#f60;
    }
        
    
    • 使用纯 js

    注意不能导入 JQuery 库,不然会导致程序出错(如下图所示)。

    //获取ID
    var $ = function (id) {return typeof id === "string" ? document.getElementById(id) : id;};
    //获取tagName
    var $$ = function (tagName, oParent) {return (oParent || document).getElementsByTagName(tagName);};
    //自动播放对象
    var AutoPlay = function (id) {this.initialize(id);};
    AutoPlay.prototype = {
    	initialize: function (id)
    	{
    		var oThis = this;
    		this.oBox = $(id);
    		this.oUl = $$("ul", this.oBox)[0];
    		this.aImg = $$("img", this.oBox);
    		this.timer = null;
    		this.autoTimer = null;
    		this.iNow = 0;
    		this.creatBtn();
    		this.aBtn = $$("li", this.oCount);
    		this.toggle();
    		this.autoTimer = setInterval(function ()
    		{
    			oThis.next();
    		}, 3000);
    		this.oBox.onmouseover = function ()
    		{
    			clearInterval(oThis.autoTimer);
    		};
    		this.oBox.onmouseout = function ()
    		{
    			oThis.autoTimer = setInterval(function ()
    			{
    				oThis.next();
    			}, 3000);
    		};
    		for (var i = 0; i < this.aBtn.length; i++)
    		{
    			this.aBtn[i].index = i;
    			this.aBtn[i].onmouseover = function ()
    			{
    				oThis.iNow = this.index;
    				oThis.toggle();
    			};
    		}
    	},
    	creatBtn: function ()
    	{
    		this.oCount = document.createElement("ul");
    		this.oFrag = document.createDocumentFragment();
    		this.oCount.className = "count";
    		for (var i = 0; i < this.aImg.length; i++)
    		{
    			var oLi = document.createElement("li");
    			oLi.innerHTML = i + 1;
    			this.oFrag.appendChild(oLi);
    		}
    		this.oCount.appendChild(this.oFrag);
    		this.oBox.appendChild(this.oCount);
    	},
    	toggle: function ()
    	{
    		for (var i = 0; i < this.aBtn.length; i++) this.aBtn[i].className = "";
    		this.aBtn[this.iNow].className = "current";
    		this.doMove(-(this.iNow * this.aImg[0].offsetHeight));
    	},
    	next: function ()
    	{
    		this.iNow++;
    		this.iNow == this.aBtn.length && (this.iNow = 0);
    		this.toggle();
    	},
    	doMove: function (iTarget)
    	{
    		var oThis = this;
    		clearInterval(oThis.timer);
    		oThis.timer = setInterval(function ()
    		{
    			var iSpeed = (iTarget - oThis.oUl.offsetTop) / 5;
    			iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
    			oThis.oUl.offsetTop == iTarget ? clearInterval(oThis.timer) : (oThis.oUl.style.top = oThis.oUl.offsetTop + iSpeed + "px");
    		}, 30);
    	}
    };
    window.onload = function ()
    {
    	new AutoPlay("box_autoplay");
    };
    
    • 纯 JS 改进版
    /**
     * 		用 纯 js 文件写自动轮播图,最好不要用 $ 作为 函数名
     * 		不然后期由于业务需求使用 Jquery 库,会导致 用 纯Js 写$ 函数失效,导致程序发生问题	
     * 	
     * **/
    
    //获取ID
    var getID = function(id) {
    	return typeof id === "string" ? document.getElementById(id) : id;
    };
    //获取tagName
    var getTageOP = function(tagName, oParent) {
    	return (oParent || document).getElementsByTagName(tagName);
    };
    //自动播放对象
    var AutoPlay = function(id) {
    	this.initialize(id);
    };
    AutoPlay.prototype = {
    	initialize : function(id) {
    		var oThis = this;
    		this.oBox = getID(id);
    		this.oUl = getTageOP("ul", this.oBox)[0];
    		this.aImg = getTageOP("img", this.oBox);
    		this.timer = null;
    		this.autoTimer = null;
    		this.iNow = 0;
    		this.creatBtn();
    		this.aBtn = getTageOP("li", this.oCount);
    		this.toggle();
    		this.autoTimer = setInterval(function() {
    			oThis.next();
    		}, 3000);
    		this.oBox.onmouseover = function() {
    			clearInterval(oThis.autoTimer);
    		};
    		this.oBox.onmouseout = function() {
    			oThis.autoTimer = setInterval(function() {
    				oThis.next();
    			}, 3000);
    		};
    		for (var i = 0; i < this.aBtn.length; i++) {
    			this.aBtn[i].index = i;
    			this.aBtn[i].onmouseover = function() {
    				oThis.iNow = this.index;
    				oThis.toggle();
    			};
    		}
    	},
    	creatBtn : function() {
    		this.oCount = document.createElement("ul");
    		this.oFrag = document.createDocumentFragment();
    		this.oCount.className = "count";
    		for (var i = 0; i < this.aImg.length; i++) {
    			var oLi = document.createElement("li");
    			oLi.innerHTML = i + 1;
    			this.oFrag.appendChild(oLi);
    		}
    		this.oCount.appendChild(this.oFrag);
    		this.oBox.appendChild(this.oCount);
    	},
    	toggle : function() {
    		for (var i = 0; i < this.aBtn.length; i++)
    			this.aBtn[i].className = "";
    		this.aBtn[this.iNow].className = "current";
    		this.doMove(-(this.iNow * this.aImg[0].offsetHeight));
    	},
    	next : function() {
    		this.iNow++;
    		this.iNow == this.aBtn.length && (this.iNow = 0);
    		this.toggle();
    	},
    	doMove : function(iTarget) {
    		var oThis = this;
    		clearInterval(oThis.timer);
    		oThis.timer = setInterval(function() {
    			var iSpeed = (iTarget - oThis.oUl.offsetTop) / 5;
    			iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
    			oThis.oUl.offsetTop == iTarget ? clearInterval(oThis.timer)
    					: (oThis.oUl.style.top = oThis.oUl.offsetTop + iSpeed
    							+ "px");
    		}, 30);
    	}
    };
    window.onload = function() {
    	new AutoPlay("box_autoplay");
    };
    
    
  • 相关阅读:
    Flex Box 简单弹性布局
    CSS 0.5px 细线边框的原理和实现方式
    前端模块化方案全解(CommonJS/AMD/CMD/ES6)
    用信鸽来讲解HTTPS的知识
    __name__ == "__main__"的作用是什么?
    如何自学计算机科学与技术(Teach Yourself Computer Science)
    中文技术文档的写作规范
    'adb remount'的作用是什么?在什么情况下有用?
    使用python遍历文件夹取出特定的字符串
    Python&Appium实现安卓手机图形解锁
  • 原文地址:https://www.cnblogs.com/zwer/p/10580884.html
Copyright © 2020-2023  润新知