jQuery center
erhuabushuo
posted @ 2012年7月22日 15:07
in JavaScript
, 1596 阅读
本来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 是个偷懒的方法,比如有了滚动条,会好一些,没有的话视觉上也差别不大,不过没有这个偏移量又有 滚动条的话 视觉上就不太舒服了
2024年2月23日 22:29
fantastic points altogether, you just gained emblem reader. What would you suggest in regards to your post that you made a few days ago? Any certain?