当前位置: 首页 > article >正文

uni-app如何向Vue那样操作dom节点

2024年8月2日

引言

一般节点渲染出来后,其样式多为固定。如果之后想进行样式变化,在Vue.js框架中,就可以在js模块用document API获取节点进行操作。但是uni-app并没有document这样的API,所以当碰到这种需要在js模块对节点进行操作时,就得需要其他方法。

1.简单的样式控制

介绍

因为uni-app用的是Vue.js框架,所以可以利用其响应式属性的特性,来动态更新样式。

步骤

  1. 创建一个响应式变量
    let viewStyle=ref(‘’);
  2. 将目标节点的style属性,改为:style=‘响应式变量’。或者class也是可以。
  3. 然后在js模块就可以随时修改viewStyle的值来更新节点的样式。比如在一个按钮点击事件函数中,希望点击按钮后,节点背景颜色变为红色
    function Click(){
    viewStyle.value=’
    background-color: red;
    }

2.uni-app的createSelectorQuery()

参考uni-app官网https://uniapp.dcloud.net.cn/api/ui/nodes-info.html#selectorquery-selectall

介绍

该方法为uni-app内置的API,返回一个 SelectorQuery 对象实例。可以在这个实例上使用 select 等方法选择节点也就是NodesRef,就是本文说的节点,要操作的也就是这个对象。之后使用 boundingClientRect 等方法选择需要查询的信息。

然后基于本文,将重点介绍如何用该API获取节点然后修改样式,最简单一下的用法就可以获取一个节点的样式属性

uni.createSelectorQuery().select().fields().exec()
  • 使用 uni.createSelectorQuery() 需要在生命周期 mounted 后进行调用。
  • 默认需要使用到 selectorQuery.in 方法。

具体用例

获取类名为‘.testDom’的节点的width和height属性

  1. 首先获取selectorQuery对象
uni.createSelectorQuery()
  1. 之后选取NodesRef对象
uni.createSelectorQuery().select('.testDom')
  1. 根据需要的信息选择NodesRef的方法,获取样式需要用到fields()方法。
uni
.createSelectorQuery()
.select('.testDom')
.fields({ computedStyle: ['width', 'height'] },data=>{
    //需要获取的值以绑定到data,可在此处进行代码编写
})
  1. 最后加上exec()才会执行所有的请求,完整代码如下
uni
.createSelectorQuery()
.select('.testDom')
.fields({ computedStyle: ['width', 'height'] },data=>{
    //需要获取的值以绑定到data,可在此处进行代码编写
}).exec()

selectorQuery对象

slectorQuery是由createSelectorQuery()返回的对象,其下有以下方法可以选择节点,返回一个NodesRef对象。

selectorQuery.in(component)

将选择器的选取范围更改为自定义组件 component 内,返回一个 SelectorQuery 对象实例。(初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点)。

import { getCurrentInstance } from 'vue';
const instance = getCurrentInstance();

const query = uni.createSelectorQuery().in(instance.proxy);
query
  .select("#id")
  .boundingClientRect((data) => {
    console.log("得到布局位置信息" + JSON.stringify(data));
    console.log("节点离页面顶部的距离为" + data.top);
  })
  .exec();
  • 支付宝小程序不支持in这个方法,使用无效果

selectorQuery.select(selector)

在当前页面下选择第一个匹配选择器 selector 的节点,返回一个 NodesRef 对象实例,可以用于获取节点信息。类似CSS的选择器,支持语法如下

  • ID 选择器:#the-id
  • class 选择器(可以连续指定多个):.a-class.another-class
  • 子元素选择器:.the-parent > .the-child
  • 后代选择器:.the-ancestor .the-descendant
  • 跨自定义组件的后代选择器:.the-ancestor >>> .the-descendant (H5 暂不支持)
  • 多选择器的并集:#a-node, .some-other-nodes

selectorQuery.selectAll(selector)

在当前页面下选择匹配选择器 selector 的所有节点,返回一个 NodesRef 对象实例,可以用于获取节点信息。

selectorQuery.selectViewport()

选择显示区域,可用于获取显示区域的尺寸、滚动位置等信息,返回一个 NodesRef 对象实例。

selectorQuery.exec(callback)

执行所有的请求。请求结果按请求次序构成数组,在 callback 的第一个参数中返回。

NodeRef对象

由selectorQuery的一些方法返回的节点对象,节点信息就在这个对象里

nodesRef.fields(object,callback)

获取节点的相关信息。第一个参数是节点相关信息配置(必选);第二参数是方法的回调函数,参数是指定的相关节点信息。

nodesRef.boundingClientRect(callback)

添加节点的布局位置的查询请求。相对于显示区域,以像素为单位。其功能类似于 DOM 的 getBoundingClientRect。返回 NodesRef 对应的 SelectorQuery。

nodesRef.scrollOffset(callback)

添加节点的滚动位置查询请求。以像素为单位。节点必须是 scroll-view 或者 viewport。返回 NodesRef 对应的 SelectorQuery。

nodesRef.context(callback)

添加节点的 Context 对象查询请求。支持 VideoContext、CanvasContext、和 MapContext 等的获取。

nodesRef.node(callback)

获取 Node 节点实例。目前支持 Canvas 的获取。


http://www.kler.cn/a/400864.html

相关文章:

  • css数据不固定情况下,循环加不同背景颜色
  • 【AI+教育】一些记录@2024.11.11
  • 搭建Spring gateway网关微服务
  • DB Type
  • SpringBoot多环境配置的实现
  • 每日一博 - Java的Shallow Copy和Deep Copy
  • Chapter 2 - 15. Understanding Congestion in Fibre Channel Fabrics
  • 2024雪浪小镇·京东科技上海产业对接会
  • 预训练 BERT 使用 Hugging Face 和 PyTorch 在 AMD GPU 上
  • Spring Boot汽车资讯:科技与速度的交响
  • Matlab信号处理:频域分析中的功率谱
  • 第三十二天|动态规划| 理论基础,509. 斐波那契数,70. 爬楼梯 ,746. 使用最小花费爬楼梯
  • 汽车资讯新引擎:Spring Boot技术领航
  • springboot 获取spring上下文
  • ### 哋它亢在5G基站中的应用:新兴技术与未来通信的融合
  • 在vue中,在使用antdesign的table组件时,实现可以直接编辑修改某个单元格的值
  • spring boot 请求
  • CSS 样式的优先级?
  • Matlab信号处理:频域分析中的包络谱
  • 系统架构设计师:系统架构设计基础知识
  • 基于KNN的旋转机械故障诊断Matlab实现
  • 使用Java爬虫技术高效获取电商平台商品历史价格信息
  • PostgreSQL技术内幕18:物理备份工具pg_basebackup
  • 静态路由综合实验
  • 算法——螺旋矩阵II(leetcode59)
  • 基于YOLOv8深度学习的智慧社区高空抛物检测系统研究与实现(PyQt5界面+数据集+训练代码)