jquery blockuiを使用していますが、カバーされている div が非常に長いため、読み込みメッセージが画面外に表示されます。
とにかく、スクロールダウンせずにメッセージを見ることができるように、jquery blockui 読み込みメッセージを表示画面の中央に垂直に配置することはできますか?
jquery blockuiを使用していますが、カバーされている div が非常に長いため、読み込みメッセージが画面外に表示されます。
とにかく、スクロールダウンせずにメッセージを見ることができるように、jquery blockui 読み込みメッセージを表示画面の中央に垂直に配置することはできますか?
これが明確な答えです。
この関数を作成します。
$.fn.center = 関数 () { this.css("位置","絶対"); this.css("top", ($(window).height() - this.height()) / 2+$(window).scrollTop() + "px"); this.css("左", ( $(window).width() - this.width() ) / 2+$(window).scrollLeft() + "px"); これを返します。 }
blockUI を呼び出した後、次のようにダイアログ ウィンドウを中央に配置します。
$('.blockUI.blockMsg').center();
画面の中央に簡単に配置:
$.blockUI({
message: myMessage,
centerY: false,
centerX: false,
css:{
position: 'fixed',
margin: 'auto'
}
});
blockUI
デフォルトでは、画面の中央に表示されます。そして、ページをスクロールし続けても中央に表示されると思います。
ただし、を呼び出すときに以下のプロパティを設定できますblockUI
。
centerX: true
centerY: true
しかし、本当にdivをカバーする必要がありますか? おそらく、ページ全体をブロックする方が良いオプションでしょうか?
2 つの異なるアプローチを次に示します。
1) ページ全体をブロックする
この場合、追加の機能は必要なく、メッセージは常に中央にあります。
$.blockUI({});
2) 特定の HTML 要素をブロックする
ただし、この要素のサイズが非常に長い場合は、追加の作業を行う必要があります。まずはメソッド宣言
$.fn.center = function () {
this.css("position","absolute");
this.css("top", ($(window).height() - this.height()) / 2+$(window).scrollTop() + "px");
this.css("left", ( $(window).width() - this.width() ) / 2+$(window).scrollLeft() + "px");
return this;
}
その後
$('.very-long-container').block({});
$('.blockUI.blockMsg').center();
ここで両方のオプションを示す JS Fiddle デモ例
css を使用して blockUI を中央に配置します。これは、水平方向と垂直方向の両方で機能します。
注: これを使用して、blockUI からデフォルト スタイルを削除することをお勧めし$.blockUI.defaults.css = {};
ます。
.blockUI
{
position: fixed;
top: 50%;
left: 50%;
margin-right: -50%;
transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%); /* IE 9 */
-webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */
}
これにより、ウィンドウのサイズを変更してもメッセージが中央に配置されます。
$.blockUI({
css: {
width: message_width + "px",
height: message_height + "px",
top: '50%',
left: '50%',
margin: (-message_height / 2) + 'px 0 0 '+ (-message_width/2) + 'px'
},
message: messageText
});
ページ全体をブロックしている場合は機能せず、要素のブロックにのみ影響しますcenterX
。centerY
この jquery プラグインのプラグインを作成します。もっと完璧に。
高さの中心を得る方法に注意してください。
/** * lijg によって追加されました。 * 参照: http://forum.jquery.com/topic/blockui-centering-the-dialog-window */ (関数(){ function cp_props(inSrcObj, inDestObj, inOverride) { if (inDestObj == null) { inSrcObj を返します。 } var プロップ; for (inSrcObj のプロップ) { if (inOverride || !inDestObj[prop]) {//まず、上書きできるかどうかを判断します。true は計算後の値であり、false は計算後の値です。 inDestObj[prop] = inSrcObj[prop]; } } inDestObj を返します。 } 関数_debug_info(コンテナ、目的){ console.info("$(window).height():" + $(window).height() + ", $(window).width():" + $(window).width()); console.info("$(window).scrollTop():" + $(window).scrollTop() + ", $(window).scrollLeft():" + $(window).scrollLeft()); console.info("container.height():" + container.height() + ", container.width():" + container.width()); } 関数 center_of_dom(コンテナ、目的){ //_debug_info(コンテナ、目的); container.css("位置", "絶対"); container.css("width", aim.width() + "px"); container.css("height", aim.height() + "px"); container.css("top", ( $(window).height() - container.height() ) / 2 + $(window).scrollTop() + "px"); container.css("left", ( $(window).width() - container.width() ) / 2 + $(window).scrollLeft() + "px"); } 関数center_of_x(コンテナ、目的){ //_debug_info(コンテナ、目的); container.css("位置", "絶対"); container.css("width", aim.width() + "px"); container.css("left", ( $(window).width() - container.width() ) / 2 + $(window).scrollLeft() + "px"); } 関数center_of_y(コンテナ、目的){ //_debug_info(コンテナ、目的); container.css("位置", "絶対"); container.css("height", aim.height() + "px"); container.css("top", ( $(window).height() - container.height() ) / 2 + $(window).scrollTop() + "px"); } $._blockUI = $.blockUI; $.blockUI = function(opts){ if(! opts.onOverlayClick){ opts.onOverlayClick = $.unblockUI; } $._blockUI(opts);//blockUI を呼び出す var コンテナー = $('.blockUI.blockMsg'); var 目的 = opts.message; if(opts.auto_center){ center_of_dom(コンテナ, 狙い);//中央揃え //サイズ変更時に中央揃え $(window).resize(関数() { center_of_dom(コンテナ、目的); }); }else if(opts.auto_center_x){ center_of_x(コンテナ, 狙い);//中央揃え //サイズ変更時に中央揃え $(window).resize(関数() { center_of_x(コンテナ、目的); }); }else if(opts.auto_center_y){ center_of_y(コンテナ, 狙い);//中央揃え //サイズ変更時に中央揃え $(window).resize(関数() { center_of_y(コンテナ、目的); }); } }; cp_props($._blockUI, $.blockUI, true);//cp プロパティ //その他のメソッド $.blockUI.center_of_dom = center_of_dom; })();