zoukankan      html  css  js  c++  java
  • 原生js轮播以及setTimeout和setInterval的理解

       下面这个代码是从一个群下载下来的,为了帮助自己理解和学习现在贴出来,与初学者共勉。

    <!DOCTYPE html>
    <html>
    
    	<head>
    		<meta charset="UTF-8">
    		<title>原生JS图片轮播</title>
    		<style>
    			* {margin: 0;padding: 0;}
    			#box { 520px;height: 280px;margin: 100px auto 0;overflow: hidden;position: relative;box-shadow: 0 0 15px black;}
    			ul { 400%;height: 100%;position: absolute;left: 0;top: 0;}			
    			li { auto;display: block;float: left;}			
    			#btnBox { 360px;height: 30px;margin: 50px auto 0;}			
    			.btn {display: block; 80px;height: 30px;margin: 0 50px;background: peru;color: white;text-align: center;line-height: 30px;float: left;cursor: pointer;-webkit-user-select: none;}
    		</style>
    	</head>
    
    	<body>
    		<div id="box">
    			<ul>
    				<li><img src="https://aecpm.alicdn.com/simba/img/TB1wjqpLFXXXXa0aXXXSutbFXXX.jpg" /></li>
    				<li><img src="https://aecpm.alicdn.com/simba/img/TB13rqpLpXXXXavXVXXSutbFXXX.jpg" /></li>
    				<li><img src="https://aecpm.alicdn.com/simba/img/TB1QJsLLpXXXXc2XFXXSutbFXXX.jpg" /></li>
    				<li><img src="https://img.alicdn.com/tps/TB1wPXTLFXXXXa8XFXXXXXXXXXX-520-280.jpg" /></li>
    			</ul>
    		</div>
    		<div id="btnBox">
    			<span class="btn" onclick="btnRight()">向左滚</span>
    			<span class="btn" onclick="btnLeft()">向右滚</span>
    		</div>
    	</body>
    	<script>
    		var moveAnimationTime,
    			moveIng = false,
    			box = document.getElementById("box"),
    			ul = box.getElementsByTagName("ul")[0],
    			liList = ul.getElementsByTagName("li"),
    			liLength = liList.length,
    			onceMaxLeft = boxWidth = box.clientWidth;//这里一次定义了 moveAnimationTime,moveIng,box,ul,liList,liLength,onceMaxLeft 等全局变量
    
    		function moveAnimation(callBack) {//callBack是回调函数
    			if (moveIng) return false;
    			moveIng = true;
    			var moveInterval,
    				name = callBack.name;
    			if (name == "moveItemRight") {
    				var moveS = 0;
    				moveInterval = setInterval(function() {
    					moveS -= 20;
    					ul.style.left = moveS + "px";
    					if (Math.abs(moveS) === onceMaxLeft) {
    						clearInterval(moveInterval);
    						callBack();//调用回调函数
    						moveIng = false;
    					};
    				}, 20);
    			} else {
    				var moveS = boxWidth * (-1),
    					li = liList[3];
    				ul.insertBefore(li, liList[0]);
    				ul.style.left = "-" + boxWidth + "px";
    				moveInterval = setInterval(function() {
    					moveS += 20;
    					ul.style.left = moveS + "px";
    					if (moveS >= 0) {
    						clearInterval(moveInterval);
    						callBack();
    						moveIng = false;
    					};
    				}, 20);
    			};
    		};
    
    		function moveItemRight() {
    			var li = liList[0];
    			ul.appendChild(li);
    			ul.style.left = "0px";
    			moveAnimationTime = setTimeout(function() {
    				moveAnimation(moveItemRight);
    			}, 3000);
    		};
    
    		function moveItemLeft() {
    			moveAnimationTime = setTimeout(function() {
    				moveAnimation(moveItemLeft);
    			}, 3000);
    		};
    
    		function btnLeft() {
    			if (moveAnimationTime) clearTimeout(moveAnimationTime);//moveAnimationTime 有值就是true 否则就是false
    			moveAnimation(moveItemLeft);
    		};
    
    		function btnRight() {
    			if (moveAnimationTime) clearTimeout(moveAnimationTime);
    			moveAnimation(moveItemRight);
    		};
    		moveAnimationTime = setTimeout(function() {
    			moveAnimation(moveItemRight);
    		}, 2000);
    	</script>
    
    </html>
    

      

    setTimeout和setInterval的使用

    这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript。不过两者各有各的应用场景。

     方 法

    实际上,setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。

    不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码。

    虽然表面上看来setTimeout只能应用在on-off方式的动作上,不过可以通过创建一个函数循环重复调用setTimeout,以实现重复的操作。

    深入学习:http://www.cnblogs.com/qiantuwuliang/archive/2009/06/20/1507304.html

    Window clearTimeout() 方法

    定义和用法

    clearTimeout() 方法可取消由 setTimeout() 方法设置的 timeout。

    clearTimeout()方法的参数必须是由setTimeout()返回的ID值。

    语法

    clearTimeout(id_of_settimeout)
     
     
     

    Window clearInterval() 方法

    定义和用法

    clearInterval() 方法可取消由 setInterval() 设置的 timeout。

    clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。

    语法

    clearInterval(id_of_setinterval)
     
     

    在javascript中如果

    设置 var xx,xxb=7;

    if(xxb){

    alert("5")

    } else{

    alert("000!")

    } //弹出 5

    if(xx){

    alert("5")

    } else{

    alert("000!")

    }//弹出000!

    说明 条件语句中只要有值就是true 否则是false。

    typeof "John"                // 返回 string 

    typeof 3.14                  // 返回 number
    typeof false                 // 返回 boolean
    typeof [1,2,3,4]             // 返回 object
    typeof {name:'John', age:34} // 返回 object

    Null

    在 JavaScript 中 null 表示 "什么都没有"。

    null是一个只有一个值的特殊类型。表示一个空对象引用。

    Note 用 typeof 检测 null 返回是object。

    你可以设置为 null 来清空对象:

    Undefined

    在 JavaScript 中, undefined 是一个没有设置值的变量。

    typeof 一个没有值的变量会返回 undefined


    任何变量都可以通过设置值为 undefined 来清空。 类型为 undefined.

    Undefined 和 Null 的区别

    typeof undefined             // undefined
    typeof null                  // object
    null === undefined           // false
    null == undefined            // true

    var bba=null;
    
    if(bba){alert("bbbaaa")}else{alert("yyyyyy")}; //弹出 yyyyyy
    
    var ppp=undefined;
    
    if(ppp){alert("bbbaaa")}else{alert("yyyyyy")}; //弹出 yyyyyy
    

      

    Js中的window.parent ,window.top,window.self 详解

    在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法打开当前窗口的那个窗口。

    window.self

    功能:是对当前窗口自身的引用。它和window属性是等价的。

    语法:window.self

    注:window、self、window.self是等价的。

    window.top

    功能:返回顶层窗口,即浏览器窗口。

    语法:window.top

    注:如果窗口本身就是顶层窗口,top属性返回的是对自身的引用。

    window.parent

    功能:返回父窗口。

    语法:window.parent

    注:如果窗口本身是顶层窗口,parent属性返回的是对自身的引用。

    在框架网页中,一般父窗口就是顶层窗口,但如果框架中还有框架,父窗口和顶层窗口就不一定相同了。

    判断当前窗口是否在一个框架中:

    <script type="text/javascript">
    var b = window.top!=window.self;
    document.write( "当前窗口是否在一个框架中:"+b );
    </script>

    你应当将框架视为窗口中的不同区域,框架是浏览器窗口中特定的部分。一个浏览器窗口可以根据你的需要分成任意多的框架,一个单个的框架也可以分成其它多个框架,即所谓的嵌套框架。

    转载:http://blog.csdn.net/zdwzzu2006/article/details/6047632

  • 相关阅读:
    第9章 使用ssh服务管理远程主机。
    Linux下的网络管理工具—OpenNMS
    第8章 Iptables与Firewalld防火墙
    Linux下更好用的帮助命令—cheat
    第7章 使用RAID与LVM磁盘阵列技术
    收藏的博客
    linux下vi编辑器常用命令
    搜索引擎高级使用技巧
    七牛云配置二级域名
    软考-系统架构师备考知识(一)
  • 原文地址:https://www.cnblogs.com/xiaohuasan/p/5217886.html
Copyright © 2011-2022 走看看