Taro 项目怎么获取元素的高度和视口高度

news2024/11/28 22:34:08

最近做小程序,用的Taro,需要设置空状态居中显示,因为空状态出现的地方不一样,所以需要动态设置,那么就需要获取元素的高度来计算

文档翻了一遍也没有找到,原生js获取高度得到的是null,百度了下一下Taro 怎么获取元素的高度,教程里全都是用原生js,不知道他们怎么得到的

查不到的时候就要想到了强大的chatgpt4,然后去问了一下,果真问到了

Taro 项目怎么获取元素的高度

要获取元素的高度,可以使用 Taro 的 createSelectorQuery 方法。以下是一个简单地获取元素高度的示例:

  1. 首先确保已经安装了 Taro 框架。在项目根目录下执行 taro init myApp 初始化一个新的 Taro 项目。
  2. 切换到创建的项目目录 cd myApp
  3. 在 src/pages/index 目录下创建一个名为 index 的 Taro 页面示例。

在页面的 JSX 中,给需要获取高度的元素添加唯一的 id 属性,例如:

import React, { useEffect } from 'react'
import { View } from '@tarojs/components'
import Taro from '@tarojs/taro'

export default function Index() {
  useEffect(() => {
    getElementHeight()
  }, [])

  const getElementHeight = () => {
    // 创建一个查询,指定要查找的 id
    const query = Taro.createSelectorQuery()
    query.select('#element').boundingClientRect()
    
    // 执行查询,获取结果
    query.exec((res) => {
      if (res && res[0]) {
        console.log('Element height:', res[0].height)
      }
    })
  }

  return (
    <View className='index'>
      <View id='element' style={{ height: '100px', backgroundColor: 'red' }}>Hello Taro</View>
    </View>
  )
}

在这个示例中,我们通过给 View 组件添加 id 属性,并在 useEffect 中调用 getElementHeight 方法来获取元素的高度。getElementHeight 方法使用 Taro.createSelectorQuery() 创建一个查询,根据指定的 id 查找元素,然后执行查询并输出结果中的高度。

该方法调用后,将在控制台中输出获取到的元素高度。

Taro 项目怎么获取视口的高度

在 Taro 项目中,你可以使用 Taro 的 API 来获取视口的高度。具体操作如下:

首先,在你的组件中引入 Taro:

import Taro from '@tarojs/taro';

然后,你可以通过 Taro.getSystemInfo() 方法来获取设备信息,其中包括视口的高度:

Taro.getSystemInfo({
  success: (res) => {
    const windowHeight = res.windowHeight;
    console.log('视口高度:', windowHeight);
  },
  fail: (err) => {
    console.log('获取失败: ', err);
  }
});

Taro.getSystemInfo() 是一个异步方法,它会返回一个 Promise。如果你更喜欢使用 async/await 的方式,可以这样做:

async function getViewportHeight() {
  try {
    const res = await Taro.getSystemInfo();
    const windowHeight = res.windowHeight;
    console.log('视口高度:', windowHeight);
  } catch (err) {
    console.log('获取失败: ', err);
  }
}

getViewportHeight();

以上代码会输出当前设备视口的高度。需要注意的是,在 Taro 项目中,默认单位是 px,请根据实际情况对高度进行处理。

下面是我的获取高度的方法

因为我几个页面加起来拢共也就4个组件来回组合,所以只需要获取每个组件的高度就行了,可以看到res返回的是一个数组,如果没有就返回null

// 获取empty的高度
const getHeight = async () => {
  let windowHeight = 0;
  try {
    const res = await Taro.getSystemInfo();
    windowHeight = res.windowHeight;
  } catch (err) {
    console.log('获取失败: ', err);
  }

  const query = Taro.createSelectorQuery();
  query.select('.calander').boundingClientRect();
  query.select('.time_table').boundingClientRect();
  query.select('.course_all').boundingClientRect();
  query.select(`.${props.type}`).boundingClientRect();

  query.exec((res) => {
    if (res) {
      console.log('res', res);
      let calanderHeight = res[0]?.height || 0;
      let timetableHeight = res[1]?.height || 0;
      let courseHeight = res[2]?.height || 0;
      let emptyHeight = res[0]?.height || 0;

      const margin =
        (windowHeight - calanderHeight - timetableHeight - courseHeight - emptyHeight) / 2 - 20;
      state.margin = margin > 20 ? margin : 20;

      setTimeout(() => {
        state.opacity = 1;
      }, 1);
    }
  });
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/572683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

点云拟合平面原理和实现(Halcon)

最近学习了一下拟合平面的原理&#xff0c;看了这篇文章最小二乘拟合平面(C版) - 知乎 讲到了以下几种方法&#xff0c;我这里在halcon中对其一一实现。 一、算法原理 1&#xff0c;直接求解法 2.使用拉格朗日乘子法 3 SVD分解法 二、Halcon实现 1.各方法对比 在halcon中…

Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性

什么是对象和类 什么是 Python 类、类对象、实例对象 类变量、实例变量/类属性、实例属性 前言 只是叫法不一样 实例属性 实例变量 类属性 类变量 个人认为叫属性更恰当 类属性和实例属性区别 类属性&#xff0c;所有实例对象共享该属性实例属性&#xff0c;属于某一…

win10系统如何设置虚拟回环

在日常生活中&#xff0c;人们(特别是IT行业者)通常需要在一台机上进行软件测试&#xff0c;而同一台计算上通常只能使用一个地址&#xff0c;而在需要同时使用两个地址进行测试的时候就显得捉襟见肘。此方法通过配置window10自带的环回适配器&#xff0c;达到上述目的。 win1…

如何用chatgpt写作论文 GPT写毕业论文的技巧

如何用chatgpt写作论文 GPT写论文的技巧 经常被问到为什么万事知天下小程序不能写论文。也不是不能写&#xff0c;只是GPT3.5的上下文只有4K&#xff0c;一般论文要写上万字&#xff0c;所以不可能你直接输入一个论文标题就直出结果的。 不过手工分一下步骤就可以了。先让写…

适用于中小企业的5种采购策略

与大企业不同&#xff0c;在采购管理方面&#xff0c;中小企业往往不得不在更有限的资源范围内运作&#xff0c;并且没有同等水平的经验丰富的采购专业人员或先进的采购技术。这会使优化采购流程并实现与大型企业相同水平的成本节约和风险管理变得更具挑战性。但是&#xff0c;…

docker idea直接部署到腾讯云镜像服务

首先创建一个Dockerfile 编写Dockerfile的信息 FROM java:8 MAINTAINER clarkshixxx.com RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai >/etc/timezone ENV ACTIVE"pre" ENV loggingpath"/zhibo/logs"…

【Flutter 工程】005-代码分离实践:flutter_hooks functional_widget

【Flutter 工程】005-代码分离实践&#xff1a;flutter_hooks & functional_widget 文章目录 【Flutter 工程】005-代码分离实践&#xff1a;flutter_hooks & functional_widget一、概述1、Flutter “嵌套地狱”2、代码分离实践 二、实践1、安装 flutter_hooks & f…

油猴脚本尝试

现在是这样的&#xff0c;我这边有个运维系统&#xff0c;里面有个日志&#xff0c;我们经常要复制&#xff0c;然后我们复制的时候需要打开内容&#xff0c;然后去选中复制。 类似于这种&#xff0c;我觉得这个时候&#xff0c;去选中复制就很麻烦&#xff0c;右边这里不是有…

ChatGPT四大基本使用场景分析

ChatGPT是一种基于深度神经网络的自然语言生成模型&#xff0c;它能够通过大量的数据训练和学习&#xff0c;以模拟人类的自然语言交互方式来理解和回答用户提出的问题。作为一种全新的人工智能技术&#xff0c;ChatGPT具有高度的灵活性和可扩展性&#xff0c;可以不断地优化、…

Redis BigKey问题

1.广告平台,海量数据查询固定前缀的key 不要使用keys , 使用 scan 命令 scan 0 match "user:" 10 2.Memory usage命令用过吗 memory usage key [semples count] :计算每个键值对的字节数 3.bigKey 问题&#xff0c;多大算bigKey,如何发现&#xff1f;如何处理?如…

【Linux】打开Linux大门,踏入Linux世界(环境搭建再加一群Linux基本指令就OK啦~)

&#x1f9d1;‍&#x1f393;个人主页&#xff1a;简 料 &#x1f3c6;所属专栏&#xff1a;Linux系统编程与网络编程 &#x1f3c6;个人社区&#xff1a;越努力越幸运社区 &#x1f3c6;简 介&#xff1a;简料简料&#xff0c;简单有料~在校大学生一枚&#x…

论文分享 | 视野约束下多机器人系统的最小持久图生成与编队控制

阿木推出的Prometheus项目校园赞助活动&#xff0c;再次迎来开发者参与&#xff01; 北京理工大学自动化学院赵欣悦同学&#xff0c;在Prometheus开源仿真架构的基础上进行了二次开发&#xff0c;且使用P450进行了真机实验并发表了相关论文&#xff0c;其论文《视野约束下多机…

前端开发如何速成java,使用java开发网络接口

引言 我是干前端的&#xff0c;闲来没事&#xff0c;也想学学java&#xff0c;下面我会根据我学习java的经历来整理出java的速成之路。 学习路线 按照数字的顺序学下去就行了 1.学习java基础教程&#xff1a;主要听 class和集合这两部分吧&#xff0c;这两个部分非常重要&am…

ASEMI代理韩景元可控硅C106M参数,C106M封装,C106M尺寸

编辑-Z 韩景元可控硅C106M参数&#xff1a; 型号&#xff1a;C106M 断态重复峰值电压VDRM&#xff1a;600V 通态电流IT(RMS)&#xff1a;4A 通态浪涌电流ITSM&#xff1a;30A 平均栅极功耗PG(AV)&#xff1a;0.2W 峰值门功率耗散PGM&#xff1a;1W 工作接点温度Tj&…

【LeetCode】《LeetCode 101》第九章:巧解数学问题

文章目录 9.1 公倍数与公因数9.2 质数204.计数质数&#xff08;中等&#xff09; 9.3 数字处理504. 七进制数&#xff08;简单&#xff09;172. 阶乘后的零&#xff08;中等&#xff09;415. 字符串相加&#xff08;简单&#xff09;326. 3 的幂&#xff08;简单&#xff09; 9…

mysql语句最大执行时间问题解决,无需改mysql配置

下面是我排错的一个过程&#xff1a; 1、我是ado.net执行一个查询语句报了个错&#xff1a; Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. 译&#xff1a;超时已过期。操作完成前经过的超时时间&a…

【Netty】 工作原理详解(十一)

文章目录 前言一、Netty 模型二、代码示例2.1、引入Maven依赖2.2、服务端的管道处理器2.3、服务端主程序2.4、客户端管道处理器2.5、客户端主程序2.6、测试运行 总结 前言 回顾Netty系列文章&#xff1a; Netty 概述&#xff08;一&#xff09;Netty 架构设计&#xff08;二&…

借军工经验开拓消费市场,三星显示收购eMagin浅析

前不久三星显示&#xff08;Samsung Display&#xff09;宣布&#xff0c;拟支付2.18亿美元收购微显示方案商eMagin全部普通股&#xff0c;收购完成后eMagin将并入三星显示&#xff0c;以加速XR显示业务发展。 据青亭网了解&#xff0c;eMagin成立于1996年&#xff0c;该公司多…

《Spring Guides系列学习》guide11 - guide15

要想全面快速学习Spring的内容&#xff0c;最好的方法肯定是先去Spring官网去查阅文档&#xff0c;在Spring官网中找到了适合新手了解的官网Guides&#xff0c;一共68篇&#xff0c;打算全部过一遍&#xff0c;能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

JVM调优实战

1、当项目运行一段时间以后&#xff0c;产生了OOM的问题&#xff0c;我们该如何排查问题呢&#xff1f; 用top命令&#xff0c;看看是哪个进程CPU占用率高&#xff0c;获取它的进程ID&#xff0c;再根据具体的进程id&#xff0c;执行 top -HP 进程id号 命令,看看哪个线程的CP…