-
1.了解jquery.transform,并学会使用。 2.理解定时器setInterval及setTimeout。 3.理解作用域,以及闭包在案例中的应用。 4.学会使用程序来实现一个完整效果。查看全部
-
自动轮播:定时器的设置以及执行 当执行自动轮播时,首先清楚定时器,然后触发播放函数,然后设置定时器,声明每隔一段时间触发播放函数; 当暂停播放时,直接清楚定时器。clearInterval(定时器)。查看全部
-
本节主要涉及⑤个问题: ①当目标图片旋转加载页面的时候,由于当前图片的旋转并没有清除,所以同一个li里面会有两张图,也就是同一个li会出现两次,因旋转的角度不同而不同,解决办法,当目标图片加载完成之后,触发回调函数将当前的图从页面中移除; ②当点击图片旋转4次以上之后,抛出索引越界异常,这样就需要对图片数组的索引进行判断初始化,如果点击旋转数组下标超出图片下标,将点击旋转数组下标设置为(大于设置为0,小于设置为当前图片数组的最大值); ③间隔旋转,点击旋转的时候,是一起旋转的而不是依次旋转的,这个问题,是由于setTimeout(function(){},时间参数),时间参数是死的,应该是根据每张图片的位置,来设置不同的触发函数的时间,这样就需要判断,如果向右旋转,最左边的最早启动,时间短,最右边的时间长,如果向左旋转,则相反,时间参数就是 var thistime=(d===1)?imgTime*i:imgTime*(imglist.length-1-i); ④连续点击时,由于当前动画正在执行,多次点击,就出参数混乱,为了避免这种问题,需要对动画的进行以及进展进行判断,如果动画正在执行,直接返回false,后续将不再执行,尽管这样,当连续点击的时候,由于动画依旧在执行,返回的状态依旧混乱,此时需要对动画执行时间进行判断。 ⑤判断动画是否执行完成,如果当前时间等于所有动画完成的时间,则将状态参数设置为false返回出去。查看全部
-
动画函数:当参数d为1时,向右旋转,为-1时向左旋转。所以anigo()函数需要接收一个参数,让当前的图片的组数+1等于d,如果0向右旋转,则d=1,同时图片的组数+1,如果向左旋转,d=-1,使得旋转的图片组数-1,那么表达式就是当前图片的组数+1=d。 ②针对li集合进行遍历,找到对应的image,并初始化准备添加的图片对象,然后把目标图片添加到li容器中 ③添加动画,使得当前的图片一次旋转一定的角度,并且将目标图片以初始化角度直接放置于li容器中,注意给图片相对于li容器定位,否则图片无法正常显示。查看全部
-
将二维数组中的图片地址处理成图片:<br> 接收一个二维数组对象,然后把二维数组当做一维数组来遍历,然后就获取到了一维数组,之后再针对一维数组进行遍历,得到了实例对象,这个实例对象指向具体的图片,然后把对象返回出去,就拿到了图片对象。 function createImg(arr){ imgArr=[]; for(var i in arr){ imgArr[i]=[]; for(var x in imgArr[i]){ imgArr[i][x]=new Image(); imgArr[i][x].src=arr[i][x]; } } return imgArr; };查看全部
-
使用setEvent()方法将本案例所有的方法绑定,本方法只绑定不作处理。 在此处说明,on绑定和bind事件的区别,$(selector).bind(”click”,function(){}), 当给a便签绑定点击事件的时候,只要点击a元素就会触发链接地址的跳转,如果只想触发点击事件而不跳转的话,在函数内部return false ,而这种绑定,只能使用bind()方法,如果使用on()方法绑定,即使return false也是没有作用的。查看全部
-
使用jQuery的each(function(i,value){ })来遍历list对象中的每一个li,其中i是li元素的索引,也就是第几个;获取到每一个元素的目的是,使得每一个li元素一次旋转-5°,0,5°,10°,那么每一个li对象旋转的角度就是元素的索引 (i)*5°-5°,使用jQuery插件对象的transform方法,传递旋转的角度,即$(this).transform({rotate:((i)*5°-5°)+“deg”});这样初始化角度就完成了。 另外还需要声明旋转对象的旋转中心点,也就是基准点,使用的是jquery插件的transform()方法指定基准点的位置$imglist.transform({origin:["125px","800px"]});查看全部
-
word-spacing 属性增加或减少单词间的空白(即字间隔)。 letter-spacing 属性增加或减少字符间的空白(字符间距)。查看全部
-
使用闭包的注意点 1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。 2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。查看全部
-
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。 怎么来理解这句话呢?请看下面的代码。 function f1(){ var n=999; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); // 1000 在这段代码中,result实际上就是闭包f2函数。它一共运行了两次,第一次的值是999,第二次的值是1000。这证明了,函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除。 为什么会这样呢?原因就在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。 这段代码中另一个值得注意的地方,就是”nAdd=function(){n+=1}”这一行,首先在nAdd前面没有使用var关键字,因此nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous function),而这个匿名函数本身也是一个闭包,所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。查看全部
-
这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! function f1(){ n=999; } f1(); alert(n); // 999 出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。 那就是在函数的内部,再定义一个函数。 function f1(){ var n=999; function f2(){ alert(n); // 999 } } 在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。 既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗! function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 代码中的f2函数,就是闭包。 各种专业文献上的"闭包"(closure)定义非常抽象,很难看懂。我的理解是,闭包就是能够读取其他函数内部变量的函数。 由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。 所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。查看全部
-
we eq查看全部
-
作用域,作用域链讲的很明白查看全部
-
闭包的应用查看全部
-
作用域及作用域链查看全部
举报
0/150
提交
取消