uniapp获取dom节点的方法:1、通过“let dom=query.select(selector)”方法获取匹配选择器的第一个节点;2、使用“letdoms=query.selectall(selector)”方法获取所有节点。
本教程操作环境:windows7系统、uni-app2.5.1版本、thinkpad t480电脑。
推荐(免费):uni-app开发教程
uni-app 获取dom 节点
【参考官网:https://uniapp.dcloud.io/api/ui/nodes-info?id=selectorqueryexec】
一、如何获取selectorquery对象实例:
let query=uni.createselectorquery();
功能:返回一个selectorquery对象的实例,该实例用来查询dom节点的信息。
注意事项:
(1)该方法需要在生命周期mounted后进行调用。
(2)nvue技术不支持该方法。
二、如何获取dom节点:
1、获取匹配选择器的第一个节点:
let dom=query.select(selector)
2、获取匹配选择器的所有节点:
letdoms=query.selectall(selector)
上述两个方法均返回nodesref对象实例,该实例用来获取dom节点的信息。
三、如何获取dom节点的信息:(以doms为例)
1、获取dom节点的布局位置信息:
doms.boundingclienrect(function(res){//res:{left,top,right,bottom,width,height}}).exec(function(){//上述布局位置信息获取成功后执行的回调函数})
2、获取dom节点的滚动位置信息:
doms.scrolloffset(function(){//res:{scrollleft,scrolltop}}).exec(function(){//上述滚动位置信息获取成功后执行的回调函数})
3、获取dom节点的所有信息:
doms.fields({rect:true, //是否返回节点布局位置信息{left,top,right,bottom}size:true, //是否返回节点尺寸信息{width,height}scrolloffset:true //是否返回节点滚动信息{scrollleft,scrolltop}},function(res){//res 可以返回第一个参数对象中指定为true的相关信息}).exec(function(){//上述节点信息获取成功后执行的回调函数})
四、代码实例
1、例1: <template>中有多个类名为leftitem的节点,如何获取这些节点距离顶部的距离,并将这些距离赋给一个在数据区已经定义好的名为leftitemtop的数组。
uni.createselectorquery().selectall(".leftitem").boundingclienrect(res=>{this.leftitemtop=res.map(item=>item.top)}).exec(()=>{console.log(this.leftitemtop)})
2、例2:<template:>中有多个类名为rightitem的节点,如何获取这些节点的高度,并将这些高度赋值给一个在数据区已经定义好的名为rightitem的数组。
uni.createselectorquery().selectall(".rightitem").fields({size:true},res=>{this.rightitemheight=res.map(item=>{item.height})}).exec(()=>{console.log(this.rightitemheight)})
五、数据渲染dom造成的异步问题:
【参考官网:https://cn.vuejs.org/v2/api/#vm-nexttick】
【推荐阅读:https://segmentfault.com/a/1190000012861862】
**问题:**某个数据区的变量temp讲影响dom结构的渲染,且规定该变量更新后直到dom结构重新渲染完成后还需要做一个其他的操作,则这些其他的操作如何保证在dom结构重新渲染完成后才发生?
解决方案:这些需要dom结构重新渲染完成后才发生的操作必须写在this&nexttick(function(){})格式的回调函数中。
<block v-for="(item,index) in domdata"><view class="domitem">{{item.title}}</view></block>
我们就说上述结构是基于数据domdata驱动的结构,变量domdata需要先从接口中获取必要的数据,再渲染到dom结构中。
data(){return{domdata:[], //用于储存从接口中获取的dom数据domitemwidth:[] //用于储存获取的dom结构的宽度}}
当变量domdata从接口中得到数据后,还必须保证成功渲染了dom结构之后,才能去获取这些结构的宽度,因此要将后续的操作用this.nexttick(function(){})包裹起来 ,既书写在this.nexttick(function(){})的回调函数内部。
上述事例的代码如下:
uni.request({url:"http://localhost:8080/......",data:{.....},success:res=>{this.domdata=res.data;this.nexttick(()=>{//该格式保证了domdata已经得到接口数据并成功渲染dom结构uni.createselectorquery().selectall(".domitem").fields({size:true},res=>{this.domitemwidth=res.map(item=>item.width)}).exec(()=>{console.log(this.domitemwidth)})})}})
以上就是uniapp如何获取dom节点的详细内容。