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 事件一章节。

回复

我来回复
  • 暂无回复内容