problem: vue中获取动态元素高度

前言:始终要相信你能想到的解决方案,基本上都是可以用技术实现的...

解决方法就是在mounted中在this.$nextTick()去获取,如果没有获取到,不是写法错就是,元素没有绑定对地方,注意检查自己的逻辑,自己在写什么思路一定要清晰。

有这样一个需求:

实现一个表格,每一行代表课程的一期,每一期的天数不固定,每一期有安排老师的要显示老师的数据,也就是要显示一个白条来展示数据,白条的宽度可以根据后端给的开始时间和结束时间来计算间隔数从而算出宽度,而白条高度需要根据内容来自适应,左侧的期数栏的高度也要对应的显示相同的高度。白条中的内容显示体验要好。

思路:

1、根据每期的开始时间定位白条的起始位置,即当前行的哪一个表格

2、白条设置绝对定位,相对对应的表格定位

3、根据开始时间和结束时间,算出白条应设的宽度值(拿到数据就可以算出来,表格的宽度固定的)

4、白条的高度要注意是在白条里面的数据显示渲染完之后再去获取元素的高度值,在table层(一般会是一个组件)的mouned中通过在this.$nextTick()获取数据渲染完成之后的元素

5、获取每一行白条的高度,然后存到数组中

6、当前白条的父元素tr元素和左侧的显示期数的元素设置和填充了数据的白条的高度,一样的高度

白条的布局:

白条用flex布局,并允许换行,flex-wrap: wrap,里面的内容分两列显示,左侧固定一定百分比的宽度(所以内容长度一定要有最大长度不能太长,必须约定),右侧不设置宽度,如果内容太长就会换行显示,体验会比较好。

低效解决方案:

通过元素个数来算高度,这样必须保证白条里面的内容,在超出最小单元格高度时,元素必须每行显示2个,并且左右两列必须都设置一定比例的宽度,这样才能根据内容的个数准确算出白条的总高度。

这个方案解决了高度随着内容变化而变化的问题,但是没有解决白条里面的内容长度很长时的显示问题,因为白条中左右列宽度是一定的,又是flex布局,内容太长里面的内容就会自动换行,视觉效果很不好。

考虑到显示问题,最终解决方案就应该采用第一种,右侧元素宽度不固定,内容太长自动换行显示,白条高度在数据渲染完毕去读取的方式最合适。

原文地址:https://www.cnblogs.com/yy95/p/10066867.html

时间: 2024-08-01 12:10:00

problem: vue中获取动态元素高度的相关文章

javascript中获取dom元素高度和宽度

javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.body.offsetWidth (包括边线的宽)网页可见区域高: document.body.offsetHeight (包括边线的高)网页正文全文宽: document.body.scrollWidth网页正文全文高: document.body.scrollH

JS中获取 DOM 元素的绝对位置实例详解

在操作页面滚动和动画时经常会获取 DOM 元素的绝对位置,例如 本文 左侧的悬浮导航,当页面滚动到它以前会正常地渲染到文档流中,当页面滚动超过了它的位置,就会始终悬浮在左侧. 本文会详述各种获取 DOM 元素绝对位置 的方法以及对应的兼容性.关于如何获取 DOM 元素高度和滚动高度,请参考视口的宽高与滚动高度 一文. 概述 这些是本文涉及的 API 对应的文档和标准,供查阅: API 用途 文档 标准 offsetTop 相对定位容器的位置 MDN CSSOM View Module clien

Activity中获取view的高度和宽度为0的原因以及解决方案

在activity中可以调用View.getWidth.View.getHeight().View.getMeasuredWidth() .View.getgetMeasuredHeight()来获得某个view的宽度或高度,但是在onCreate().onStrart().onResume()方法中会返回0,这是应为当前activity所代表的界面还没显示出来没有添加到WindowPhone的DecorView上或要获取的view没有被添加到DecorView上或者该View的visibili

JavaScript中获取HTML元素的方式

JavaScript中获取HTML元素的方式 1.使用id方式获取元素,返回一个具体对象   document.getElementById(id名) 2.使用className方式获取元素,返回类数组对象 document.getElementsByClassName(类名) 3.使用tagName标签名的方式获取元素,返回类数组对象   document.getElementsByTagName(标签名/元素名) 4.使用标签的name属性获取元素,返回类数组对象 document.getE

使用Vue.js获取dom元素

标签中添加ref属性,相当于id 在Vue中通过    $refs.ref的属性名    获取或者设置dom元素 <div id="demo"> <button @click="fn">点击这里</button> <div ref="box" style="width:200px;height:300px">西南交大</div> </div> <sc

Python3列表中获取相同元素出现位置的下标

前言 list: Python3的列表类型, 和其他语言中的数组类似 定义格式: l = ["a", "b", "c", "a", "b", "c", "a"] , 下文举例用到的列表x为此列表 list常用方法(文章中用到的方法): index(元素[, Start[, Stop]]) : 获取列表下标 三个参数, 后两个参数为可选参数. 一个参数, PS: l.i

jquery中获取相邻元素相关的命令:next()、prev()和siblings()

jquery里我们要获取某个元素的相邻元素时,可以用到的命令有三个: next():用来获取下一个同辈元素. prev():用来获取上一个同辈元素. siblings():用来获取所有的同辈元素. 下面来看看简单的实例: <div> <p id="1">1</p> <p id="2">2</p> <p id="3">3</p> </div> <s

js中获取DOM元素

通过ID获取(getElementById)通过name属性(getElementsByName)通过标签名(getElementsByTagName)通过类名(getElementsByClassName)通过选择器获取一个元素(querySelector)通过选择器获取一组元素(querySelectorAll)获取html的方法(document.documentElement) document.documentElement是专门获取html这个标签的获取body的方法(documen

vue中获取本地ip

一.目的 获取当前访问的ip地址 二.思路 通过使用搜狐的api获取访问ip 三.操作步骤 1.在index.html中添加 <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> 2.新建一个组件Admin.vue,调用方法 <template> <div> <h1>username:{{user.username}}</h1> <h1>