jQueryのouterHeight,outerWidthがイイ感じなので、こんなもの書いてみた。
単純に要素を画面中央に位置するようにtopとleftを設定するというものです。
DOMツリーに追加する前の状態でも使用可能なのがポイント。
(function($){
$.fn.extend({
positionCenter: function() {
var
$win = $(window),
win = {
h:$win.height(),
w:$win.width(),
st:$win.scrollTop(),
sl:$win.scrollLeft()
};
return this.each(function(){
var
$t = $(this),
to = {},
posStyle = $.css(this,'position');
if(posStyle != 'absolute' && posStyle != 'fixed') {
$t.css({ position:'absolute' });
posStyle = $.css(this,'position');
}
function getOuterSize($x){
to.h = $x.outerHeight();
to.w = $x.outerWidth();
}
//!this.parentNode.tagName はIE対策
if (!this.parentNode || !this.parentNode.tagName) {
var $cln =$t.clone().hide().appendTo(document.body);
getOuterSize($cln);
$cln.remove();
}else{
getOuterSize($t);
}
var cPos = {
top: Math.floor((win.h - to.h)/2),
left: Math.floor((win.w - to.w)/2)
}
if (posStyle == 'absolute') {
cPos.top += win.st;
cPos.left += win.sl;
}
$t.css({
top:cPos.top,
left:cPos.left,
margin:0
});
});
}
});
})(jQuery);
こんな感じで使う。
$(function(){
$("#hoge").click(function(){
$(this).positionCenter();
});
$("#foo").click(function(){
$("<p/>")
.css({
"border":"4px solid #333",
"padding":"40px",
"background-color":"#ccc"})
.text("foo.")
.positionCenter() //←まだDOMツリーに追加されていない状態で使用
.appendTo(document.body);
});
});outerHeight,outerWidthのイイところは、該当要素のスタイル属性「visivblity」が hidden でも「display」が noneでも値を取得できるとこ。
これを改造してanimate でセンターまで移動させるってのもアリかな?





0 Comments:
コメントを投稿