zoukankan      html  css  js  c++  java
  • vue在munted中获取dom高度不准确的问题

    今天遇到这么个问题:

    在组件中给div设置了默认的高度100px,然后父组件也会传入样式120px,在mounted中获取div的高度会获取到默认的高100px而不是渲染的高120px;就算加上$nextTick也是一样。

    
    
    data () {
        return {
          itemHeight: 0,
        }
      },
    mounted () {
         // this.itemHeight = this.$refs.item.$el.offsetHeight // 100
         this.$nextTick(() => {
           this.itemHeight = this.$refs.item.$el.offsetHeight // 100
         })
      }
    
    //style
    .item {
       100%;
      height: 100px;
    }

    问题就是这么个问题;那怎么办呢?

    data () {
        return {
          itemHeight: 0,
        }
      },
    mounted () {
         // this.itemHeight = this.$refs.item.$el.offsetHeight // 100
         // this.$nextTick(() => {
         //   this.itemHeight = this.$refs.item.$el.offsetHeight // 100
         // })
        setTimeout(() => {
          this.itemHeight = this.$refs.item.$el.offsetHeight // 120
        }, 0)
      }
    
    //style
    .item {
       100%;
      height: 100px;
    }

    用setTimeout就可以了,网上有位兄台说setTimeout延迟500毫秒,可以我这样延迟0秒也可以,亲测可以,为啥呢?

    加延迟也就是为了让页面完全渲染完成之后再去获取高度,用了setTimeout就已经实现这个效果了,因为setTimeout里边的代码就是页面渲染完成之后执行的;

    这涉及到线程问题了 , 简单说一下吧:

    js里有个渲染线程类似于java里边的主线程主线程按顺序执行代码,执行完才会有空去看看任务栈里边有没有任务需要执行,有的话就拿来到主线程里边执行,setTimeout就把里边的代码放到任务栈中(类似于子线程)了,所以setTimeout里边这部分代码会在主线程执行完才会执行;

    这样就好像Android里只能在主线程里操作视图,不能在主线程里做耗时操作,子线程做了耗时操作需要更改视图时候要通过handler通知主线程;

     

    说到这里就再多说两句:什么样的代码会被丢到任务栈里边呢?耗时的代码都会被丢到任务栈里边。比如ajax,setTimeout,点击事件等。

    都是自己理解,有不对的地方欢迎下方评论。

    关于任务栈渲染线程这位仁兄写的很不错,可以详细看看https://www.cnblogs.com/jiasm/p/9482443.html

    over

  • 相关阅读:
    2、容器初探
    3、二叉树:先序,中序,后序循环遍历详解
    Hebbian Learning Rule
    论文笔记 Weakly-Supervised Spatial Context Networks
    在Caffe添加Python layer详细步骤
    论文笔记 Learning to Compare Image Patches via Convolutional Neural Networks
    Deconvolution 反卷积理解
    论文笔记 Feature Pyramid Networks for Object Detection
    Caffe2 初识
    论文笔记 Densely Connected Convolutional Networks
  • 原文地址:https://www.cnblogs.com/rainbowLover/p/13256438.html
Copyright © 2011-2022 走看看