琴妹8
侠客
侠客
  • 最后登录2019-10-25
  • 发帖数39
阅读:8293回复:2

[其它]iframe多层嵌套引起子表错位

楼主#
更多 发布于:2018-12-10 10:02
bug:iframe多层嵌套的时候,切换时嵌套得子层会自动触发一个滚动到顶部的事件


这问题我这里表现为:iframe里嵌套得dialog,dialog得ui-content是iframe,然后点击子表,继续在iframe里打开一个dialog,我这里有二层子表,加上原本的iframe,有4层iframe。切换tab时,切换回来,打开得子表位置错位了

图片:1.png


正常应该是:

图片:1.1.png


dom结构图:

图片:2.png




图片:3.png


解决思路:参考https://bbs.csdn.net/topics/392438851 多个iframe切换时,如何保持每个iframe的滚动位置




二个步骤:
1、获取值:进入iframe的时候保存当前的scrolltop,可以新设一个属性_scrolltop保存该滚动值。如果多层嵌套找寻到iframe进行设置即可,
我此处的代码片段:
secondIframe =firstDialog.querySelector("iframe")
 secondIframeId =secondIframe.getAttribute("data-key")
 secondScrollTop =secondIframe.contentDocument.documentElement.scrollTop
//把iframe滚动得高度存到iframe得属性_scrollTop
secondIframe.setAttribute('_scrollTop',secondIframe.contentDocument &&  secondIframe.contentDocument.documentElement &&  secondScrollTop)

2、赋值:切换的时候把iframe的新属性_scrolltop(这个是之前滚动过的值)赋值给当前iframe的scrolltop(进入iframe触发事件,清0了)。
代码片段:
if (secondIframe.getAttribute('_scrollTop')) {
    secondIframe.contentDocument.documentElement.scrollTop = secondIframe.getAttribute('_scrollTop')
}
代码得海洋有些深,我这还不会游泳,就带着游泳圈,还要带个打气筒,时不时打点气,不让自己沉下去。 希望通过我们得交流和学习,能够慢慢有艘船,在大海中航行,不用为了活下去而忽略海上得风景,其实慢慢成长我们会发现,大海,真是个神秘得地方。 学习使我们优秀,我们一起加油吧!
琴妹8
侠客
侠客
  • 最后登录2019-10-25
  • 发帖数39
沙发#
发布于:2018-12-17 17:22
@sunshine:
代码得海洋有些深,我这还不会游泳,就带着游泳圈,还要带个打气筒,时不时打点气,不让自己沉下去。 希望通过我们得交流和学习,能够慢慢有艘船,在大海中航行,不用为了活下去而忽略海上得风景,其实慢慢成长我们会发现,大海,真是个神秘得地方。 学习使我们优秀,我们一起加油吧!
sunshine
管理员
管理员
  • 最后登录2023-10-30
  • 发帖数170
  • 社区居民
板凳#
发布于:2018-12-10 11:13
这个问题,是个好问题哦!楼主太赞了
游客


返回顶部

公众号

公众号