ポップアップ登録フォームにjQuery Fancyboxを使用しています here
フォームが450px x 700pxのサイズで表示されるようにしたいのですが、スクロールバーを取得する際に高さと幅を何に設定しても関係ありません。
<script type="text/javascript">
$(document).ready(function() {
$("a#regForm").fancybox({
'titleShow' : false,
'autoscale' : true,
'width' : '450',
'height' : '700',
'transitionIn' : 'elastic',
'transitionOut' : 'elastic'
});
});
</script>
私が間違っていることはあるに違いありませんが、それが何であるかを理解することはできません。ここでお役に立てば幸いです。ありがとう。
少し奇妙に聞こえます。い解決策は、css、overflow:hiddenを使用することです。
Fancyboxを使用するたびに、スクロールバーは正しく機能します。ファンシーボックスのコンテンツが別の高さを設定していないことを確認してください?
編集:サンプルサイトを表示しました。コンテンツに設定されている幅の幅が、fancybox自体よりも大きいようです。
私はfancyboxとiframeで同じ問題を抱えていましたが、解決策を探してここに行きました。オーバーフロー:隠しは機能しませんでしたが、fancyboxを使用するとiframeスクロールのオプションを設定できることがわかりました(iframeで "scrolling = no"属性を設定するのと同等)。優雅なマナー:
$.fancybox({
'type' : 'iframe',
'scrolling' : 'no',
... and the rest of the parameters.
私はこれにかなり苦労しましたが、Fancyboxのドキュメント内で答えを見つけました。
上記で示唆したように、最初にスクロールを無効にするのはこれと同じくらい簡単だと思った:
$('.fancybox').fancybox({'type': 'iframe', 'scrolling': 'no', 'width': 500})
ただし、「スクロール」オプションを「いいえ」に設定するだけでは不十分です。次のように、「iframe」オプションで同じことを繰り返す必要がありました。
$('.fancybox').fancybox({
'type': 'iframe',
'scrolling': 'no',
'width': 500,
'iframe': {'scrolling': 'no'}
})
上記のマグナスの答えは私のためにしたと言いたかったのですが、2番目の「オーバーレイ」は「オーバーフロー」する必要があります
helpers : {
overlay : {
css : { 'overflow' : 'hidden' }
}
}
上記のすべてのヒントをテストした後(およびいくつかのインラインoverflow: scroll
at .fancybox-inner
)また、他の多くの回避策を試してみましたが、このソリューションでスクロールバーを取り除きました:
afterShow: function(){
this.inner.css({
overflow: 'auto' // or 'no'
});
}
私は同じ問題に直面しており、試行錯誤の後、フレームcssクラスをオーバーライドすることでスクロールバーを回避できることがわかりました。
このようにすることができます:
iframe.fancybox-iframe {
overflow:hidden;
}
JS設定:
jQuery(document).ready(function(){
$("a.various").fancybox({
'width' : 'auto',
'height' : 'auto',
'autoScale' : false,
'autoDimensions' : false,
'scrolling' : 'no',
'transitionIn' : 'none',
'transitionOut' : 'none',
'type' : 'iframe'
});
});
注:これを有効にするには、fancyboxボックスタイプをiframe
にする必要があります。
FancyboxオプションでmaxWidthを設定すると、垂直スクロールバーが表示されるという同様の問題がありました。
設定しなければならなかった問題を回避するために
.fancybox-inner {
overflow: hidden !important;
}
fancyboxオプションでmaxWidthを指定するのではなく、Fancyboxコンテンツに固定幅のCSSルールを設定します。後者を実行した場合、コンテンツのFancyboxの計算された高さは少し小さすぎました-そもそもスクロールバーを配置した理由を示唆している可能性があります。
たとえば、iframeオプションを独自のコンテキストに配置する必要があります。
$(".someclass").fancybox({
type : 'iframe',
iframe : {
scrolling : 'no'
}
});
これに対する解決策は、
'autoDimensions' : false
インラインコンテンツの幅と高さは、設定したとおりになります
これは少し奇妙に聞こえますが、フォームページのbodyタグのmargin
を0に設定しようとしました。
問題は実際には非常に単純です。理由は、ボディタグmargin
がデフォルトで8px
(ブラウザに応じて)に設定され、0に設定しただけでスクロールバーが修正されるためです。
私が持っているjs構成は次のとおりであり、fancyboxのCSSを変更せずにうまく機能します。
$(".iframe").fancybox({
'autoScale' : false,
'autoDimensions' : false,
'transitionIn' : 'none',
'transitionOut' : 'none',
'type' : 'iframe'
});
Iframeを追加:{scrolling: 'no'}オプションとして
例
$.fancybox({
href: 'yourUrl.html',
width: 800,
height: 415,
autoSize: false,
type : 'iframe',
iframe: {
scrolling : 'no',
preload : true
}});
jquery.fancybox.jsで、この部分を編集しました。
iframe : {
scrolling : 'no', // i changed this from 'auto' to 'no'
preload : true
},
Fancyboxバージョン:2.1.5を使用して、ここで提案するさまざまなオプションをすべて試してみましたが、スクロールバーが表示されたままでした。
$('.foo').click(function(e){
$.fancybox({
href: $(this).data('href'),
type: 'iframe',
scrolling: 'no',
iframe : {
scrolling : 'no'
}
});
e.preventDefault();
});
そのため、これが見つかるまでコードのデバッグを行ったため、設定したすべてのオプションが上書きされ、多くのオプションを使用してこれを上書きすることはできません。
if (type === 'iframe' && isTouch) {
coming.scrolling = 'scroll';
}
最終的には、ソリューションはCSS!importantハックを使用することでした。
.fancybox-inner {
overflow: hidden !important;
}
担当するコード行は次のとおりです。
current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));
Fancyboxは以前は信頼できる実用的なソリューションでしたが、今では一貫性のなさを見つけています。開発者ライセンスを購入した後でも、実際にダウングレードについて議論しています。商用プロジェクトに必要なことに気づかなかった場合の詳細情報: https://stackoverflow.com/a/8837258/560287
高さと幅の値を囲む引用符を削除します。
<script type="text/javascript">
$(document).ready(function() {
$("a#regForm").fancybox({
'titleShow' : false,
'autoscale' : true,
'width' : 450,
'height' : 700,
'transitionIn' : 'elastic',
'transitionOut' : 'elastic'
});
});
</script>
これはIEとGoogle Chromeの両方で機能した唯一のものです。これは主に.body.scrollHeightが原因で、IE =最高です。Firefoxに+30を追加しました...
jQuery.fancybox({
href: href,
type: "iframe",
centerOnScroll: 'true',
scrolling: 'no',
width: 650,
'onComplete': function() {
jQuery('#fancybox-frame').load(function() {
jQuery('#fancybox-content').height(this.contentWindow.document.body.scrollHeight + 30);
});
}
});
Fancybox 2.xには、少なくとも「オーバーレイヘルパー」があり、それが私にとっての鍵となりました。 fancybox構成パラメーターに次を追加しました。
helpers : {
overlay : {
css : { 'overlay' : 'hidden' }
}
}
CSSでこれを設定しようとしましたが、それは機能せず、ゲームの後半(beforeShowイベントなど)でしたが、ちらつきが発生しました。これは問題なく機能するようです。
私は同じ問題を推測しました。 fancyboxのプロパティやCSSが何であるかではなく、私のサイトの主要なCSSです。
あなたが何かを持っている場合
div {overflow:auto;height:auto;}
サイトのCSSの継承可能/ルートの場合、空想ボックスでスクロールバーの問題が発生します。 IDとクラスを使用してHTMLとCSSを削除し、より正確にします
$(".various").fancybox({
fitToView : false,
width : '100%',
height : '100%',
maxWidth : 850,
maxHeight : 550,
fitToView : false,
padding : 20,
autoSize : true,
closeClick : true,
openEffect : 'none',
closeEffect : 'none',
overflow : 'hidden',
scrolling : 'no'
});
ここでの回答は、この問題を潜在的に解決する多くの方法を提供しますが、ほとんどはタッチスクリーンを備えたデバイスでは機能しません。問題の原因は、ソースの次のコード行にあると思います。
if (type === 'iframe' && isTouch) {
coming.scrolling = 'scroll';
}
これは、fancyboxの初期構成で設定されたオプションをオーバーライドするようであり、これらのコード行が実行された後にのみ変更できます。つまり、afterShow
メソッドを使用してcssを変更します。ただし、このようなメソッドはすべて、顕著な遅延/遅延を引き起こし、スクロールバーを開くと消えるのを見ることができます。
私の提案する修正は、タッチスクリーンを備えたデバイスにスクロールバーを強制する理由が見当たらないため、880行目あたりのメインソースファイルjquery.fancybox.js
からこれらの行を削除することです。
これにより、スクロールバーがすぐに消えるわけではなく、単にscrolling
構成オプションのオーバーライドが停止されることに注意してください。したがって、scrolling: 'no'
をfancyboxの初期構成に追加する必要もあります。
私の2セント、書き込み
*{ margin:0; padding:0; }
ターゲットページのメインcssで、すべての要素の高さサイズでコンテンツdivを追加します。js、listo、saludosには触れないでください
オーバーフロー(スクロールバー)を取り除くためにこれを行いました...
jquery.fancybox .... jsファイルの終わりまでに、onStart、onCancel、onCompleteなどの関数があり、それらはすべて空です...したがって、先に進み、「$( '」でonStartの中括弧に入力します。 body ')。css(' overflow '、' hidden ') "およびonClosed" $(' body ')。css(' overflow '、' visible ') "...このように見えるはずです...
onStart:function(){$('body').css('overflow','hidden')},
onClosed:function(){$('body').css('overflow','visible')},
平和
別の考えがあります。持っていた
html { overflow-y: scroll; }
メインのCSSで、スクロールバーを必要とするまたは必要としないページ間で中央コンテンツがうまくジャンプしないようにします。これに気付くまで、上記のすべてをポップアップのスクロールバーを削除しようとしました。ポップアップでのみ無効にすると、ポップアップのスクロールバーも消えました。そのため、表示されているスクロールバーが実際にはiframeから来ており、内部のページから来ていないことを確認してください。
行を編集197
および198
of jquery.fancybox.css
:
.fancybox-lock .fancybox-overlay {
overflow: auto;
overflow-y: auto;
}