適用シナリオ: iframe ページにスクロール バーがなく、親ウィンドウにスクロール バーが表示され、アンカー マークが無効になります。これは、アンカーが現在のウィンドウのスクロール バーに基づいてウィンドウをスクロールするためです。子ウィンドウになった後は、スクロール バーがなくなり、自然にスクロールしなくなります。 解決策は、js を使用してページがネストされているかどうかを判断し、js を使用して親ウィンドウ内の iframe の位置と firame 内のアンカー ポイントの位置を計算し、その 2 つの合計が親ウィンドウのスクロールになるというものです。 発生した問題: 親フォーム要素を取得します (ドメイン制限のため、すべてがネットワーク環境 (つまり、http://domain.com) 内に配置されている必要があります)。親フォームは複数の iframe をネストしており、それが現在の iframe ページであるかどうかを判断します。 コード: 親フォームページ index.html コードをコピー コードは次のとおりです。<!doctypehtml> <html> <ヘッド> <タイトル></タイトル> <スタイル タイプ="text/css"> *{ マージン: 0; パディング: 0; 境界線: 0; } html, 体{ 幅: 100%; 高さ: 100%; } </スタイル> </head> <本文> <div スタイル="幅:100%;背景:#f00;高さ:500px;"></div> <a href="">dd</a> <a href="">ddd</a> <iframe name="iframe2" id="iframe2" src="iframe.html?a=b&c=d" style="width:100%;height:2060px;"></iframe> <iframe name="iframe2" id="iframe2" src="iframe.html?a=d&c=b" style="width:100%;height:2060px;"></iframe> </本文> </html> サブフォームページ iframe.html コードをコピー コードは次のとおりです。<!doctypehtml> <html> <ヘッド> <タイトル></タイトル> <スタイル タイプ="text/css"> { パディング: 5px; 境界線: 1px 実線 #f00; フロート: 左; 表示: ブロック; 右マージン: 5px; } div{ 幅: 80%; マージン: 10px 自動; 高さ: 500px; 境界線: 1px 実線 #f00; フォントサイズ: 30px; } </スタイル> <script type="text/javascript" src="jquery-1.8.2.min.js"></script> <script type="text/javascript"> $(関数(){ //iframeの場合はjsにドメイン制限があるためネットワーク上でアクセスする必要がある //iframeがない場合には処理は行われません。 if(window!==window.top){ // 上部のウィンドウの iframe を取得します。ネストされた iframe が多すぎる場合は、自分で変更してください。 var iframeList=window.top.document.getElementsByTagName('iframe'); for(var i=0;i<iframeList.length;i++){ //ループ内で現在のウィンドウが iframe であるかどうかを判定します if(window.location.toString().indexOf(iframeList[i].getAttribute('src').toString())!=-1){ //iframeが読み込まれるのを待ち、アンカーポイントにイベントを追加します。 window.top.document.getElementsByTagName('iframe')[i].onload=function(){ //iframeと親ウィンドウの上端の間の距離を決定する var top = window.top.document.getElementsByTagName('iframe')[i].offsetTop; $('a').each(関数(){ var href = $(this).attr('href'); if(href.indexOf('#')!=-1){//リンクではなくアンカーポイントであるかどうかを判断します var name = href.substring(href.indexOf('#')+1); $(this).bind('click',function(){ $('a').each(関数(){ if($(this).attr('name')==name){ // 親ウィンドウのスクロール $(window.parent).scrollTop($(this).offset().top+top); } }); }); } }); } } } } }); </スクリプト> </head> <本文> <a href="#a">は</a> <a href="#b">b</a> <a href="#c">c</a> <a href="#d">d</a> <div><a href="" name="a">あ</a></div> <div><a href="" name="b">B</a></div> <div><a href="" name="c">C</a></div> <div><a href="" name="d">D</a></div> </本文> </html> |
<<: WeChat アプレットのシンプルなログイン ページの実装 (ソース コード付き)
>>: MySQL インデックス障害の上位 10 の問題の概要
解決Docker for Macに付属するLinux仮想マシン(軽量ですが、ソケットファイルを使用し...
この記事では、ポップアップウィンドウをクリックしたときにポップアップログインボックスを実現するための...
1. サーバー環境の構成: 1. ディスクパーティションを確認します。最近、あるプロジェクト内のサー...
この記事では、シンプルなカレンダー効果を実現するためのJavaScriptの具体的なコードを参考まで...
この記事では、例を使用して、MySQL ストアド プロシージャにおけるカーソル (DECLARE) ...
これはウェブサイトのユーザビリティに関する記事です。著者は自身の経験に基づいて、ウェブサイトのデザイ...
REPLACE構文REPLACE(String,from_str,to_str)つまり、String...
1. 背景最近、独立した開発者がUIデザインを行うのを支援するために、uideaというWebサイト...
目次Linux netstat コマンド1. TCP接続ステータスの詳細な説明2. コマンド形式3....
概要中小規模のプロジェクトでは、特にレポートを作成するときに、結合テーブル クエリが非常に一般的な操...
目次ストレージエンジンMySQL でサポートされているストレージ エンジン同時実行制御ロック粒子をロ...
目次1. フォークの起源2. 初期のUNIXオーバーレイ技術3. UNIXに導入される前のフォークの...
目次1. JSの特徴1.1 マルチパラダイム1.2 説明1.3 シングルスレッド1.4 ノンブロッキ...
誰もがボックス モデルの構成を、内側から外側まで、コンテンツ、パディング、境界線、マージンについて知...
最近、Linux ホストに環境を展開する際に多くの問題に遭遇しました。最初の問題は、ジャンプ サーバ...