论坛首页 Web前端技术论坛

jQuery 插件 center

浏览 2329 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-26  

本来jQuery有一个certer插件,不过少了一个功能,就是基于视口(ViewPort)的居中.

改写一下,代码如下:

jQuery.fn.center = function(f) {
	return this.each(function(){
		var p = f===false?document.body:this.parentNode;
		if ( p.nodeName.toLowerCase()!= "body" && jQuery.css(p,"position") == 'static' )
			p.style.position = 'relative';
		var s = this.style;
		s.position = 'absolute';
		if(p.nodeName.toLowerCase() == "body")
			var w=$(window);
		if(!f || f == "horizontal") {
			s.left = "0px";
			if(p.nodeName.toLowerCase() == "body") {
				var clientLeft = w.scrollLeft() - 10 + (w.width() - parseInt(jQuery.css(this,"width")))/2;
				s.left = Math.max(clientLeft,0) + "px";
			}else if(((parseInt(jQuery.css(p,"width")) - parseInt(jQuery.css(this,"width")))/2) > 0)
				s.left = ((parseInt(jQuery.css(p,"width")) - parseInt(jQuery.css(this,"width")))/2) + "px";
		}
		if(!f || f == "vertical") {
			s.top = "0px";
			if(p.nodeName.toLowerCase() == "body") {
				var clientHeight = w.scrollTop() - 10 + (w.height() - parseInt(jQuery.css(this,"height")))/2;
				s.top = Math.max(clientHeight,0) + "px";
			}else if(((parseInt(jQuery.css(p,"height")) - parseInt(jQuery.css(this,"height")))/2) > 0)
				s.top = ((parseInt(jQuery.css(p,"height")) - parseInt(jQuery.css(this,"height")))/2) + "px";
		}
	});
};

使用,

$(expr).center();
$(expr).center(false);

如果expr 的 parentNode 是body 或者参数是 false的话就会真的 ViewPort 居中.

另外加的偏移量 10 是个偷懒的方法,比如有了滚动条,会好一些,没有的话视觉上也差别不大,不过没有这个偏移量又有 滚动条的话 视觉上就不太舒服了

   发表时间:2008-11-26   最后修改:2008-11-26
好像加上
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

就不会出现你说的那10像素的问题。
0 请登录后投票
   发表时间:2008-11-26  
longleg 写道

好像加上
Html代码 &lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&nbsp;&nbsp;&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

就不会出现你说的那10像素的问题。

我的应用里永远都是
xhtml1-strict.dtd
还有就是浏览器之间可能有不同,不过这10像素不是什么重点。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics