ホームページ >ウェブフロントエンド >jsチュートリアル >iframe でのページアンカーの失敗に対処する方法

iframe でのページアンカーの失敗に対処する方法

php中世界最好的语言
php中世界最好的语言オリジナル
2018-04-26 10:40:452176ブラウズ

今回は、iframe のページアンカーポイントが失敗した場合の対処方法を説明します。 iframe のページアンカーポイントが失敗した場合の注意事項は何ですか? 以下は実際的なケースです。見てください。

アプリケーションのシナリオは次のとおりです: iframe ページにはスクロール バーがありません。親フォームにスクロール バーが表示される場合、アンカー ポイントは現在のウィンドウのスクロール バーに基づいてウィンドウをスクロールするため、アンカー マークは無効になります。子バーになった後はスクロールしません。当然スクロールしません。

解決策は次のとおりです。js を使用してページがネストされているかどうかを判断し、js を使用して親フォーム内の iframe の位置とフレーム内のアンカー ポイントの位置を計算し、その 2 つを追加してフォームのスクロールとなります。親フォーム。

問題が発生しました: 親フォーム要素を取得します (ドメイン制限のため、すべてがネットワーク環境 (つまり、http://domain.com) 内にある必要があります)。親フォームは複数の iframe をネストして、それが現在のものであるかどうかを判断します。 iframeページ。

コード:

親フォームページindex.html

<!doctype html>
<html>
<head>
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
border: 0;
}
html,
body{
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<p style="width:100%;background:#f00;height:500px;"></p>
<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>
</body>
</html>
子フォームページiframe.html

<!doctype html>
<html>
<head>
<title></title>
<style type="text/css">
a{
padding: 5px;
border: 1px solid #f00;
float: left;
display: block;
margin-right: 5px;
}
p{
width: 80%;
margin: 10px auto;
height: 500px;
border: 1px solid #f00;
font-size: 30px;
}
</style>
<script type="text/javascript" src="jquery-1.8.2.min.js"></script>
<script type="text/javascript">
$(function(){
//如果是iframe则需要在网络中访问,因为js里有域限制
//如果没有iframe则不进行处理,
if(window!==window.top){
//获取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加载完成给a锚点加事件
window.top.document.getElementsByTagName('iframe')[i].onload=function(){
//确定iframe在父窗体的距顶部距离
var top = window.top.document.getElementsByTagName('iframe')[i].offsetTop;
$('a').each(function(){
var href = $(this).attr('href');
if(href.indexOf('#')!=-1){//判断是否是锚点而不是链接
var name = href.substring(href.indexOf('#')+1);
$(this).bind('click',function(){
$('a').each(function(){
if($(this).attr('name')==name){
//父窗口滚动
$(window.parent).scrollTop($(this).offset().top+top);
}
});
});
}
});
}
}
}
}
});
</script>
</head>
<body>
<a href="#a" rel="external nofollow" >a</a>
<a href="#b" rel="external nofollow" >b</a>
<a href="#c" rel="external nofollow" >c</a>
<a href="#d" rel="external nofollow" >d</a>
<p><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" a">A</a></p>
<p><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" b">B</a></p>
<p><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" c">C</a></p>
<p><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" d">D</a></p>
</body>
</html>
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、他の関連情報に注目してください。 PHP 中国語 Web サイトの記事をご覧ください。

推奨読書:

iframe の高さと幅の調整を実装するための JS+jquery ライブラリ (コード付き)

iframe が親ウィンドウ要素イベントをトリガーする方法

タブ タブのスクロール ナビゲーション切り替えの実装 (コード付き) ))

以上がiframe でのページアンカーの失敗に対処する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。