【jQuery】IE11でlightboxを使うと、ページ上部に戻ってしまう場合のTips
久しぶりにlightboxを触った。
頻繁に使っていたのは3年前くらいまでで、それ以降はそもそも画像を大きめに掲載するサイトが増えたり、lightbox系のプラグインも下火気味だったような気もするし、あまり触れる機会が無かった。
今回、久しぶりに触ることとなり、lightboxのバージョンが2.11.1に同梱されているlightbox-plus-jquery.jsと、jQueryはBootstrap4で使われる3.3.1.slim.min.js。
基本的にOKかと思いきや、IE11のみだめだった。モーダルウィンドウが出るときに、謎のページのトップ(上部)へ移動するという問題が発生。画像のところまで戻らないと画像が見られない。ページ下部でギャラリー作るとアウト。画像がページ高さより高ければOKだが、そんな汎用性のない…IEメ…
という事で…
cssで無理矢理解決する
本家のGithubでも議題に上がっているが、いつ解決してくれるか分からないので、とりあえず最低限の解決が出来ればいいや、などと。
概要としては、
・lightboxの画像をクリックして、bodyにクラスを付与
・ギャラリーを閉じる時、bodyからクラスを削除
ページトップへ戻ること自体は直らないが、最低限、画像をその場で確認は出来るから、とりあえずの対応が出来る。
$(function() {
$("lightboxの画像要素").click(function(){
$('body').addClass("fixed")
});
$(".lightboxOverlay").click(function(){
$('body').removeClass("fixed")
});
});
みたいに、lightboxの画像要素をクリックしてbodyにfixedというclass名を付与。
その他の箇所をクリックして、bodyからfixedを削除。
また、cssはこんな感じ。ポジションを固定して、bootstrap用に幅と高さを持たせて、body部分が変にならないようにする。
body.fixed {
position: fixed;
width: 100%;
height: 100%;
}
なお、IE用なので、IE用の書き方でもいいかも。
@media all and (-ms-high-contrast: none){
body.fixed {
position: fixed;
width: 100%;
height: 100%;
}
}
ほんとうに…IE…
【追記】
js側にクラス名を足さないと、完ぺきでは無かった。
$(function() {
$("lightboxの画像要素").click(function(){
$('body').addClass("fixed")
});
$(".lightboxOverlay,.lb-close,.lightbox").click(function(){
$('body').removeClass("fixed")
});
});
これでok。
- 前の記事:
- « 【jQuery】ローダーがフェードアウトしてくれない時のTips