jquery实现的元素居中插件简单介绍
本章节分享一个插件,它实现了元素的居中效果。
下面给出代码实例,然后再给出详细的实现过程,需要的朋友可以做一下参考。
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.pipipi.net/" /> <title>前端教程网</title> <style> #box{ width:500px; height:300px; background:#ccc; margin:100px; } #antzone{ width:200px; height:100px; background:blue; } </style> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script type="text/javascript"> (function($){ $.fn._center = function(self, parent, dimension){ if(!dimension.vertical && !dimension.horizontal){ return; } if(parent){ parent = self.parent(); parent.css("position", "relative"); } else{ parent = window; } self.css("position", "absolute"); if(dimension.vertical){ self.css("top",Math.max(0,(($(parent).height()-$(self).outerHeight())/2) +$(parent).scrollTop())+"px"); } if(dimension.horizontal){ self.css("left",Math.max(0,(($(parent).width()-$(self).outerWidth())/2) +$(parent).scrollLeft())+"px"); } return self; }; $.fn.center = function(parent, args){ if(!args){ args = {horizontal: true, vertical: true}; } return this.each(function(){ var obj = $(this); obj._center(obj, parent, args); function callback(){ obj._center(obj, parent, args); } callback(); $(window).resize(callback); }); }; })(jQuery); $(document).ready(function(){ $("#antzone").center(false,{horizontal: true, vertical: true}) }); </script> </head> <body> <div id="box"> <div id="antzone"></div> </div> </body> </html>
上面的代码实现了元素的居中效果,下面介绍一下它的实现过程,毕竟掌握原理才是最重要的,因为插件都不是万能的,随时都有可能需要根据需求做出修改,下面进入正题。
一.代码注释:
(1).(function($){})(jQuery),一个匿名自执行函数,传递的参数是jQuery对象,这么写也可以防止$污染,当然在当前这个代码中没有这个问题,不过也需要注意到。
(2).$.fn._center = function(self, parent, dimension){},为jQuery对象实例扩展一个方法,第一个参数是要居中的元素,第二个参数是一个布尔值,规定是否是以父元素作为参考的进行居中,第三个参数是一个对象直接量,规定在垂直或者水平方位上居中,这个方法其实相当于用作内部调用。
(3).if(!dimension.vertical && !dimension.horizontal){
return;
},如果既不在垂直方向上居中也不在水平方向上居中,那么直接返回。
(4).if(parent){
parent = self.parent();
parent.css("position", "relative");
},如果是以父元素为居中参考,那么先获取父元素,然后再将其设置为相对定位。
(5).else{
parent = window;
},否则一窗口为居中参考。
(6).self.css("position", "absolute"),将元素设置为绝对定位。
(7).if(dimension.vertical){
self.css("top",Math.max(0,(($(parent).height()-$(self).outerHeight())/2)
+$(parent).scrollTop())+"px");
},如果要在垂直方向上居中。
$(parent).scrollTop()加这个的作用就是实现有滚动条的时候也能够垂直居中。
(8).return self,返回当前对象,为了实现链式调用。
二.相关阅读:
(1).parent()方法可以参阅jQuery parent()一章节。
(2).css()方法可以参阅jQuery css()一章节。
(3).绝对定位可以参阅css absolute一章节。
(4).Math.max()方法可以参阅javascript Math.max()一章节。
(5).outerHeight()方法可以参阅jQuery outerHeight()一章节。
(6).scrollTop()方法可以参阅jQuery scrollTop()一章节。
(7).resize事件可以参阅jQuery resize 事件一章节。