收藏
回答

wx.createSelectorQuery,放在渲染页面后执行还是查不到节点啊

问题模块
API和组件

        var query = wx.createSelectorQuery();

        query.selectAll('.temp_ad_item').boundingClientRect();

        query.exec(function (res) {})




<view class="temp_ad item_cell_box">

    <image class='temp_ad_l' src="/images/ad.png" ></image>

    <view  class='temp_ad_r  item_cell_flex'>

    <view animation="{{animation}}" class="temp_ad_in">

       <view  class="temp_ad_item" wx:for="{{ad}}">

           {{item.title}}

       </view>

    </view>

    </view>

</view>


最后一次编辑于  2017-09-27  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

15 个回答

  • LastLeaf
    LastLeaf
    2017-09-28

    你好,你是在什么时机调用query.exec的呢?能不能给出完整js代码?

    2017-09-28
    赞同
    回复
  • 旋转的木马1
    旋转的木马1
    2017-09-28

    var app = getApp();

    Page({

        data:{

            slider : [],

            ad : [],

            adtype : 2,

            sort : [],

            tasklist : [],

            animation : ''

        },

        onLoad:function(options){

        // 页面初始化 options为页面跳转所带来的参数

            

       var that = this;

            wx.setNavigationBarTitle({

              title: '抢任务',

            })

            app.com.http('index','GET',{},0,false,function(res){

                if (!res.data.message.errno) {

                    that.setData({

                        slider : res.data.data.slider,

                        ad : res.data.data.ad.data,

                        adtype : res.data.data.ad.type

                    })

                }

            });







      },

      onReady:function(){


           var that = this;


            var ad = function(i,windowWidth){

                //console.log( i );

                that.animationb = wx.createAnimation({

                    duration: 10,

                    timingFunction: 'linear',

                    delay: 0

                });

                that.animationb.translateX(-i).step();

                that.setData({

                    animation:that.animationb.export()

                });

            };


            var query = wx.createSelectorQuery();

            query.selectAll('.temp_ad_item').boundingClientRect();


            query.exec(function (res) {

                

                var width = 0;

                for(var t in res[0]){

                    width += res[0][t].width;

                }

                var windowWidth = 0;

                wx.getSystemInfo({

                    success: function(res) {

                        windowWidth = res.windowWidth;

                    }

                });

                var v = 50;

                var time = width*1000 / v;

                var i = 0;

                

                

                setInterval(function(){

                    

                    if( width > 0 ){

                        if( i <= width ){

                            i += 2;

                        }else{

                            i = -windowWidth;

                            console.log( 11 );

                            that.animationb = wx.createAnimation({

                                duration: 10,

                                timingFunction: 'linear',

                                delay: 0

                            });

                            that.animationb.translateX(windowWidth-40).step();

                            that.setData({

                                animation:that.animationb.export()

                            });

                        }

                        ad(i,windowWidth);

                    }

                },60)

                

            });


      },

      onShow:function(){

        // 页面显示


      },

      onHide:function(){

        // 页面隐藏

      },

      onUnload:function(){

        // 页面关闭

      }

    });


    2017-09-28
    赞同
    回复
  • 旋转的木马1
    旋转的木马1
    2017-09-28

    js对应的页面

    <view class="page" >

    <include src="../common/slider.wxml" />

    <include src="../common/ad.wxml" />

    </view>


    ad模板

    <view class="temp_ad item_cell_box">

        <image class='temp_ad_l' src="/images/ad.png" ></image>

        <view  class='temp_ad_r  item_cell_flex'>

        <view animation="{{animation}}" class="temp_ad_in">

           <view  class="temp_ad_item" wx:for="{{ad}}">

               {{item.title}}

           </view>

        </view>

        </view>

    </view>


    2017-09-28
    赞同
    回复
  • LastLeaf
    LastLeaf
    2017-09-28

    你好,ad是空数组的时候,是没有任何 .temp_ad_item 节点的。onReady这个时机也并不保证在网络请求返回之后。

    2017-09-28
    赞同
    回复
  • 旋转的木马1
    旋转的木马1
    2017-09-28

    好吧,animation没有完成回调参数的吗?后续可以加上吗

    2017-09-28
    赞同
    回复
  • 你🐎平砍连击带顺劈
    你🐎平砍连击带顺劈
    2017-11-09

    微信老大应该在那个生命周期函数可以确保页面已经渲染完。不然我怎么获取需要渲染的节点???

    2017-11-09
    赞同
    回复
  • LastLeaf
    LastLeaf
    2017-11-09

    现在setData有个回调函数,在回调函数中调用可以保证是setData的新数据已经渲染完毕。

    2017-11-09
    赞同
    回复
  • 你🐎平砍连击带顺劈
    你🐎平砍连击带顺劈
    2017-11-14

    setData的回调里console.log也打印不出来set的数据呀。。到底是不是回调来的,我用一个匿名函数包着console就不会执行

    2017-11-14
    赞同
    回复
  • LastLeaf
    LastLeaf
    2017-11-14

    请参考文档说明:
    https://mp.weixin.qq.com/debug/wxadoc/dev/framework/app-service/page.html

    2017-11-14
    赞同
    回复
  • 你🐎平砍连击带顺劈
    你🐎平砍连击带顺劈
    2017-11-14

    最后一页大佬,文档没有具体说明callback怎么用,我自己也试过用匿名函数和有名函数来实现渲染完接着获取节点信息。但是没有效果啊。真的不知道你的callback怎么调用。

    2017-11-14
    赞同
    回复