slider/slide项目总结


slider
tip1:jquery(类名)取得的是object,是一个jquery的对象,这个对象可以使用jquery对象有的方法,jquery(selector)[0]转换为DOM,当获取到多个元素时,每一个DOM都可以用角标获取到,可以使用DOM 对象拥有的方法,而document.getElementsByClassName()返回的是HTMLCollection。
tip2: a在b中scroll的话,应该使用b.scrollTop(height),使用b.scrollTop()获得的是b中第一个匹配元素的偏移,标准描述为“元素中的内容超出元素上边界的值",scrollTop有效的条件是b中的元素高度超过了b的高度,超出的部分hidden。在父元素大于子元素的情况下,子元素只能通过设置top(dom)属性来改变位置了。
tip3:scrollTop是jquery对象的方法,scrollHeight是js原生的属性
slide
在这个小的项目中,有一些很重要的收获
1、transition,第一次使用,注 意,使用时指定的transition-property一定是样式改变前后都出现的才行,即使效果一样,样式名称不同,是没有办法使用过渡动画的(如 left:0->left:100%对于transition-property:left是可以的,但 right:100%->left:100%虽然静态效果一样,但是用transition-property:left/right都是没有动画 效果的)。
2、闭包问题
闭包问题并不难理解,晓得内层函数引用了外层变量就可以了,这个内层变量会保留而不是释放。下面两种写法的正误:
template_ctrl[i].addEventListener("click",function(){
(function(){
var _i = i;
alert(_i);
_self._switchSlider(_i,"");
})();
});
这 段代码的错误在于,绑定的匿名函数都没有立即执行,里面的立即执行函数是在外面的匿名函数执行时才执行的,这个时候i早就变了,误以为里面的匿名函数会在 绑定时执行,非常错误。另一方面,绑定的匿名函数引用了i,则i确实不会释放,但是在绑定时会变化,当初绑定了n个匿名函数,但是函数绑定时没有执行,i 只是匿名函数里的一个代号,指向了外边的i。反之,将匿名函数拿到外面来,将绑定语句包裹,这是会开辟一个局部变量,这个变量引用了i,所以会保存到立即 执行函数的作用域上面。
3、构造函数的封装问题:
this在最外的作用于当然指向了构造函数这个类的实例,然而,在这个类的成员函数的内部则不应使用this,this会改变指向,应该在外层取得this后,在成员函数内部使用(_self = this)使得_self指向类实例。
4、正则表达式的方法很好用、很灵活,replace不会在原来的字符串上修改,返回新字符串。
5、transition的问题:连续用js修改css,如果设置了transition,会跳过中间的效果,只好用setTimeout或者绑定transitionend事件。
6、定位问题,不是第一次了,无论是left、right、top、bottom还是width、height(用百分比定位时),都要注意,父元素必须有定位(无论是absolute还是relative),否则上述各值都无参考。
7、inline-block会有空白节点。