Vue 下 iframe可不固定高度、无视跨域窗口高度自适应

这篇具有很好参考价值的文章主要介绍了Vue 下 iframe可不固定高度、无视跨域窗口高度自适应。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原理:iframe设置高度100%,使用动态计算出iframe上一个父标签的高度,iframe高度就会自动撑开。限制是iframe只能在一个实时变化高度的窗口里面展示。

一、先看图,以此例子用了element-ui,Home.vue是父组件,Iframe.vue的页面是子组件。简单做了页面,顶部、侧边栏、底部都做了固定定位,iframe只是做嵌入,可以看到如果父级没有高度或者iframe不写死高度只会撑开一部分。
vue中iframe高度自适应,Vue,JS,vue.js,javascript,前端

二、布局
1、打开iframe页面时需要暂时隐藏最大一级页面滚动条,使用iframe的滚动条,不然会出现两个滚动条。且最大一级滚动后,会遮挡到iframe框的内容,效果不好。(最大一级滚动条不明显可以不设置)
vue中iframe高度自适应,Vue,JS,vue.js,javascript,前端

2、子组件 iframePage.vue,设置一个元素包住iframe,设置iframe父级标签的初始高度为500px(不设置也行),irame高度设置为100%

<div id="myIframe" style="position: 'relative';width: '100%';height: '500px';">
     <iframe :src="src" width="100%" height="100%" frameborder="0" scrolling="auto"></iframe>
 </div>

vue中iframe高度自适应,Vue,JS,vue.js,javascript,前端

3、父组件home.vue的头部、底部、iframe的设置id,用于获取高度
vue中iframe高度自适应,Vue,JS,vue.js,javascript,前端

三、计算高度,计算和监听写在父组件,这样可以方便拓展。

1、计算方式,分别获取以下高度页面可视高、顶部实际高、底部实际高,多余高度可以自己衡量。用页面可视高-顶部实际高-底部实际高-多余部分高度,用得出的高度设置给iframe标签的父级标签。

  methods: {
    setMyIframeHeight(){
        // 页面可视高-顶部实际高-底部实际高-多余部分高度
      let that = this;
      this.$nextTick(() => {
        let headerHeight = document.getElementById("header").offsetHeight;
        let footerHeight = document.getElementById("footer").offsetHeight;
        let bodyHeight = document.body.clientHeight;
        let outHeight =parseFloat(bodyHeight - headerHeight - footerHeight)-5+ "px";
        document.querySelector("#myIframe").style.height = outHeight;
      });
    }
  }

2、调用、监听、释放
在mounted里面实时监听调用计算父标签 高度的方法,如此之后即使浏览器高度变化了也会再次计算,从而达到自适应。离开页面需要销毁监听,不然页面可能会出现卡顿。

  mounted() {
    this.setMyIframeHeight();
     window.addEventListener("resize", () => this.setMyIframeHeight(), false);
  },
  beforeDestroy() {
    window.removeEventListener("resize", this.setMyIframeHeight(), false);
  },

最终效果vue中iframe高度自适应,Vue,JS,vue.js,javascript,前端

四、代码
父组件home.vue

<template>
  <div class="home">
    <el-container>
      <el-header id="header">Header</el-header>
      <el-container>
        <el-aside width="200px">Aside</el-aside>
        <el-container>
          <el-main>
              <Iframe />
          </el-main>
          <el-footer id="footer">Footer</el-footer>
        </el-container>
      </el-container>
    </el-container>
  </div>
</template>

<script>
import Iframe from "./Iframe.vue";

export default {
  name: "Home",
  components: {
    Iframe,
  },
  data() {
      return {
      };
  },
  created() {
  },
  mounted() {
    this.setMyIframeHeight();
     window.addEventListener("resize", () => this.setMyIframeHeight(), false);
  },
  beforeDestroy() {
    window.removeEventListener("resize", this.setMyIframeHeight(), false);
  },
  methods: {
    setMyIframeHeight(){
        // 页面可视高-顶部实际高-底部实际高-多余部分高度
      let that = this;
      this.$nextTick(() => {
        let headerHeight = document.getElementById("header").offsetHeight;
        let footerHeight = document.getElementById("footer").offsetHeight;
        let bodyHeight = document.body.clientHeight;
        let outHeight =parseFloat(bodyHeight - headerHeight - footerHeight)-5+ "px";
          console.log('获取到le',bodyHeight);
        //设置iframe页面高度 因为在iframe时页面已经生成,高度无法改变,需要在iframe生成后直接设置高度
        document.querySelector("#myIframe").style.height = outHeight;
      });
    }
  }
};
</script>
<style>
    body{
        overflow: hidden !important;
    }
    .home,.el-container{
      height: 100%;
    }
  .el-header, .el-footer {
    background-color: #B3C0D1;
    color: #333;
    text-align: center;
    line-height: 60px;
  }
  
  .el-aside {
    background-color: #D3DCE6;
    color: #333;
    text-align: center;
  }
  
  .el-main {
    background-color: #E9EEF3;
    color: #333;
    text-align: center;
    padding: 0 !important;
  }
  
  body > .el-container {
    margin-bottom: 40px;
  }
  
  .el-footer{
      height: 60px;
      bottom: 0;
      width: 100%;
  }
</style>

子组件Iframe.vue文章来源地址https://www.toymoban.com/news/detail-726222.html

<template>
    <div id="myIframe"  style="position: 'relative';width: '100%';height: '500px';">
        <iframe src="https://element.eleme.cn/#/zh-CN" width="100%" height="100%" frameborder="0" scrolling="auto"></iframe>
    </div>
</template>
<script>
export default {
    data() {
        return {
        };
    },
    created() {
    },
    mounted() {
    },
    methods: {
    }
};
</script>
<style scoped lang='scss'>

</style>

到了这里,关于Vue 下 iframe可不固定高度、无视跨域窗口高度自适应的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3使用 xx UI解决布局高度自适应

    在相应的Sider部分添加:height: ‘91.8vh’,即可。示例: vw、vh、vmin、vmax是一种视窗单位,也是相对单位。它相对的不是父节点或者页面的根节点。而是由视窗(Viewport)大小来决定的,单位1,代表类似于 1%。 视窗(Viewport)是你的浏览器实际显示内容的区域—,换句话说是你的

    2024年02月04日
    浏览(31)
  • Ant Design Vue的table组件高度自适应问题

    今天在编写公司项目的时候碰到ant design vue的table组件高度没办法自适应的问题,会出现如下页面情况。  最终尝试的解决方案只能通过监听浏览器窗口变化实现自适应 (1)给表格的srcoll定义一个动态接收参数,方便后面数据增加动态改变滚动高度。  (2)vue3项目中就直接

    2024年02月16日
    浏览(38)
  • css、js(vue)进行textarea自适应高度(超详细说明)

    黑色部分——页面布局为上左右下布局 红色部分——在右边有一个文本域,自适应高度,最小高度128px,最大高度不能超过右边屏幕的一半,里面有一个距离右下16px的确认按钮 效果如下图 问题1: 会导致有多余留白 问题2:超出限制的高度也不会出现滚动条(由问题1延申而

    2024年02月13日
    浏览(31)
  • 前端Vue uni-app简单实用通用标签栏自动换行 自适应高度 可设置行数 可改标签颜色

    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随

    2024年02月05日
    浏览(46)
  • 【JavaScript】动态监听iframe高度以及监听iframe内部链接跳转

    目录 背景 实现方式 实现思路 实现代码 扩展场景 参考文档 在日常开发中会遇到一种情况,就是页面需要嵌套iframe,由于iframe无法自适应里面样式高度,所以我们需要去监听iframe的动态高度 MutationObserver 定义观察器MutationObserver 监听iframe的contenWindow的 DOMContentLoaded 事件(当初始

    2024年02月07日
    浏览(33)
  • element-ui表格高度自适应(el-table 自适应高度)

    想让element-ui的表格 el-table 出现滚动条的时候,如果不做处理就只能是 height=“XXXpx”,给它一个固定的高度,我们的页面正常情况下,是不允许出现页面级滚动条的,也是不美观的,想让table自适应高度并且有滚动条,而且不会出现页面级滚动条,可以这么实现,下面是我写

    2024年01月17日
    浏览(43)
  • scroll-view自动适应高度,不定高度

    在前端工作开发中,我们常常会遇到如图需求。 实现也很简单内容区域使用scroll-view标签包裹住,内容超出就可以滚动了。 但是!!! scroll-view需要设置一个高度值,它才可以滚动, 如:height: 300rpx。但是这并不友好 高度值 我们是不应该写死 而是让它灵活自适应 我们可以

    2024年02月11日
    浏览(33)
  • 【微信小程序】图片自适应(高度、宽度自适应)

    wxml: 写入方法bindload=“imageLoad”,该方法为每一个图片自动添加当前图片的实际高度: 加image属性 mode=“widthFix”,使图片高度自适应;

    2024年04月26日
    浏览(32)
  • UITableView根据表格内容进行高度自适应与使用Masonry实现根据内容进行宽度自适应和高度自适应

    Masonry和SDAutoLayout不同:SDAutoLayout需要上下左右四个方向都显示性的进行约束,虽然当高度和宽度自适应时,可以少一个高度约束,但是也应有对应布局处理设置。因为标签是有顶部和底部空白间隙的,通常高度比字体大小大一些(当字体很大时的粗体差别很大),当设置的高

    2023年04月25日
    浏览(31)
  • 与iframe进行跨域交互的解决方案

    目录 前言 使用 postMessage() 方法 使用location.hash  document.domain属性  使用window.name 属性  CORS 使用JSONP 使用WebSocket  使用WebRTC  使用中间页面  在Web开发中,为了避免安全漏洞,浏览器会实行同源策略(Same-Origin Policy),即只允许同源网页之间进行交互,而跨域的交互是被禁止

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包