iframe定位与自适应高度

首先我碰到的情况咧,比较二;在用户登录首页面后加载首页body页面;body呢包含了N个iframe,其中有一个iframe是加载后预先隐藏的,此iframe的显示触发条件是在本body主页面,点击另一个iframe上的数据才显示;

<iframe id="projectAndPlanFrame" style="display: none" border="0" vspace="0" hspace="0" marginwidth="0" marginheight="0" 	framespacing="0" frameborder="0" scrolling="no" width="100%" height="" src="">
</iframe>

问题在于我点击body页面的触发条件,该id=projectAndPlanFrame的隐藏iframe确实是出来了,但是只出现了一半;

oh,忘了介绍了,至于上面的iframe的src链接地址怎么是空的了。

刚说了我点击另一个iframe才能触发这个隐藏的iframe,另一个iframe在主页面body加载时候跟着加载,它是一个由XML+swf文件生成的flash,因为要用到该flash的一些参数数据才能让俩个iframe匹配上,所以我在body页面写了js

function taskClick(projectID,planID,planTYPE){
            var plan = document.getElementById('projectAndPlanFrame');
            plan.style.display = "block";
            plan.src = "<%=request.getContextPath()%>/HomePageAction.do?cmd=queryGttDetial&planid="+planID+"&proid="+projectID+"&protype="+planTYPE;
            document.location.href = "#projectAndPlanFrame";//页面定位
     }

看到吗,projectID,俩个iframe公用一个项目ID,所以由taskCllick方法给隐藏掉的那个iframe赋上链接地址;

注意,这里的taskClick在哪用的呢,它是在生成XML文件时候调用的,不是在body页面调用;

Element processes = root.addElement("processes");
Element process = processes.addElement("process");
//传递参数项目id,计划id,计划类型
process.addAttribute("link", "javascript:taskClick('"+vo.getProject_id()+"','"+vo.getId()+"','"+vo.getPlan_type()+"')");

好了,到这里终于把具体问题背景发生的情况说完了;接下来就是解决怎么让隐藏掉的iframe自适应body页面的高度

网上找了一些资料大部分的解释情况如下:

//var iframe = document.getElementById("projectAndPlanFrame");
//iframe.height =  iframe.contentWindow.document.documentElement.scrollHeight;

试了不行,后来猜测是不是js不能跨域所以从body主页面并不能这样给iframe控制高度;不知道大伙怎么搞的,反正我是alert出来的高度是0;

看到taskClick中plan.src链接的地址了吧,就在那个页面加上如下代码

$(window.parent.document).find("#projectAndPlanFrame").load(function(){//绑定事件
	var main = $(window.parent.document).find("#projectAndPlanFrame");//找到iframe对象
	var thisheight = $(document).height();//获取页面高度
	main.height(thisheight);});

从body父页面我取不到子iframe的高度,我从子页面整还不行吗,现在高度是自适应了,可另一个问题又来了,页面定位;

看到//页面定位 的那行了啊,本来是可以直接定位到要展示的iframe的位置的,但是由于从iframe页面内部计算了高度,不知道什么原因body页面定位不到该iframe,只能让它出现一半,但是呢第二次在重新触发已经显示的隐藏iframe时,它倒是定位准到了;纠结中。。。

------------------------------------------------------------------------------

解决办法:

首先分析一下,我们的这俩个iframe都是预加载的,只是一个是直接数据显示,另一个没有指定链接地址所以是空的iframe,并且是隐藏状态,只有点击触发条件时才会重新填充内容;而现在当我点击触发条件时,隐藏iframe内部计算该高度并赋给它,所以完成了页面的iframe自适应高度。但是由于第一次登陆进入body时候,隐藏的iframe并不占用body页面的高度,而定位代码是在body页面的js中,也就是触发显示隐藏iframe的js中,所以它会找不到该iframe显示后的位置,所以定位不准;

既然它是没有位置,所以才不能定位的,那咱就给他个位置,在iframe上套个div同样隐藏状态,并且给div一个大高度,反正隐藏的不影响页面,等触发iframe时,由该iframe内部计算的高度会覆盖掉这个1000px的,所以这里他的作用主要就是为了定位而占位置;

<div id="div_projectAndPlanFrame" style="height:1000px; display: none" >
<iframe id="projectAndPlanFrame" style="display: none" border="0" vspace="0" hspace="0" marginwidth="0" marginheight="0" 	framespacing="0" frameborder="0" scrolling="no" width="100%" src="">
</iframe>
</div>

触发条件js,

function taskClick(projectID,planID,planTYPE){
         var div_plan = document.getElementById("div_projectAndPlanFrame");                                                   div_plan.style.display="block";//显示隐藏的div                                                                                      var plan = document.getElementById('projectAndPlanFrame');
         plan.style.display = "block";//显示隐藏的iframe                                                                      plan.src = "<%=request.getContextPath()%>/HomePageAction.do?cmd=queryGttDetial&planid="+planID+"&proid="+projectID+"&protype="+planTYPE;
         document.location.href = "#projectAndPlanFrame";//页面定位
}

iframe页面内部计算高度,并同时赋给iframe和div

 $(window.parent.document).find("#projectAndPlanFrame").load(function(){//绑定事件
            var main = $(window.parent.document).find("#projectAndPlanFrame");//找到iframe对象
            var main_div = $(window.parent.document).find("#div_projectAndPlanFrame");//找到div对象
            main.height("auto");//重新赋给父页面高度为auto,此句可有可无,为了不致使一些莫名因素导致页面错乱,最好还是带着吧                       var thisheight = $(document).height();//获取页面高度
            main.height(thisheight);//给iframe高度
            main_div.height(thisheight);//给div高度
        });

我去丫的,终于搞定!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撸依天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值