微信小程序之SelectorQuery

      发布在:前端技术      评论:0 条评论
<p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">在开发小程序展开全文组件时需要用到节点查询API -&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">wx.createSelectorQuery()</code>&nbsp;来查询全文内容的高度。&nbsp;</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);"><img src="http://img.80zx.com/ueditor/image/202007/1593850478a23480.jpg" title="f5183c25044d59624caebc12ddce0737" alt="f5183c25044d59624caebc12ddce0737"/></p><ul style="list-style-type: none;" class=" list-paddingleft-2"><li><p><code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">wx.createSelectorQuery()</code>&nbsp;返回一个&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code>&nbsp;对象实例。</p></li><li><p><code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code>&nbsp;有五个方法(<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">in</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">select</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">selectAll</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">selectViewport</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">exec</code>),第一个返回&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code>,后四个返回&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">NodesRef</code>。</p></li><li><p><code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">NodesRef</code>&nbsp;有四个方法(<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">fields</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">boundingClientRect</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">scrollOffset</code>,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">context</code>),第一个返回&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">NodesRef</code>,后三个返回&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code>。</p></li></ul><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">对照官方提供的示例代码来看</p><pre style="background-color:#262e37;color:#ffffff;font-family:&#39;Consolas&#39;;font-size:11.3pt;"><span style="color:#f92672;">const </span>query <span style="color:#f92672;">= </span><span style="color:#660e7a;font-weight:bold;">wx</span>.createSelectorQuery(); <span style="color:#5b7773;background-color:#191f26;">// query </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">是</span><span style="color:#5b7773;background-color:#191f26;"> SelectorQuery </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">对象 如果在组件内查询请使用</span><span style="color:#5b7773;background-color:#191f26;">this</span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">代替</span><span style="color:#5b7773;background-color:#191f26;">wx,</span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">否则有可能无法获取节点的查询信息</span><span style="color:#5b7773;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#64a2a2;">query</span>.<span style="color:#4ac60a;">select</span>(<span style="color:#e6db74;">&#39;#the-id&#39;</span>).<span style="color:#660e7a;font-weight:bold;">boundingClientRect</span>(); <span style="color:#5b7773;background-color:#191f26;">// select </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">后是</span><span style="color:#5b7773;background-color:#191f26;"> NodesRef </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">对象,然后</span><span style="color:#5b7773;background-color:#191f26;"> boundingClientRect </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">返回</span><span style="color:#5b7773;background-color:#191f26;"> SelectorQuery </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">对象</span><span style="color:#5b7773;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#64a2a2;">query</span>.selectViewport().<span style="color:#660e7a;font-weight:bold;">scrollOffset</span>(); <span style="color:#5b7773;background-color:#191f26;">// selectViewport </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">后是</span><span style="color:#5b7773;background-color:#191f26;"> NodesRef </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">对象,然后</span><span style="color:#5b7773;background-color:#191f26;"> scrollOffset </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">返回</span><span style="color:#5b7773;background-color:#191f26;"> SelectorQuery </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">对象</span><span style="color:#5b7773;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#64a2a2;">query</span>.<span style="color:#4ac60a;">exec</span>(<span style="color:#f92672;">function </span>(<span style="color:#fd971f;font-style:italic;">res</span>) { <span style="color:#5b7773;background-color:#191f26;">// exec </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">返回</span><span style="color:#5b7773;background-color:#191f26;"> NodesRef </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">对象</span><span style="color:#5b7773;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#5b7773;font-family:&#39;宋体&#39;;"> &nbsp;</span><span style="color:#660e7a;font-weight:bold;font-style:italic;">console</span>.<span style="color:#4ac60a;">log</span>(<span style="color:#fd971f;font-style:italic;">res</span>[<span style="color:#ae81ff;">0</span>].<span style="color:#660e7a;font-weight:bold;">top</span>); <span style="color:#5b7773;background-color:#191f26;">// #the-id</span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">节点的上边界坐标</span><span style="color:#5b7773;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#5b7773;font-family:&#39;宋体&#39;;"> &nbsp;</span><span style="color:#660e7a;font-weight:bold;font-style:italic;">console</span>.<span style="color:#4ac60a;">log</span>(<span style="color:#fd971f;font-style:italic;">res</span>[<span style="color:#ae81ff;">1</span>].<span style="color:#660e7a;font-weight:bold;">scrollTop</span>); <span style="color:#5b7773;background-color:#191f26;">// </span><span style="color:#5b7773;background-color:#191f26;font-family:&#39;宋体&#39;;">显示区域的竖直滚动位置</span><span style="color:#5b7773;font-family:&#39;宋体&#39;;"><br/></span>});</pre><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">问题:每行执行返回的&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code>&nbsp;对象是相同的吗?</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">答案:是的,都是同一个对象。</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">问题:直接执行&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query.select(&#39;#the-id&#39;).boundingClientRect().exec</code>&nbsp;也可以吗?</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">答案:可以,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">boundingClientRect()</code>&nbsp;返回就是&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query</code>。</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">问题:这样连写&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query.select(&#39;#the-id&#39;).boundingClientRect().selectViewport().scrollOffset()</code>&nbsp;算两条查询请求吗?</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">答案:是两条请求。</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">问题:<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query.exec</code>&nbsp;执行后会清空前面的查询请求吗?再次执行还能拿到结果吗?</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">答案:可以,<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query</code>&nbsp;不会清空请求。</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">问题:<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">boundingClientRect</code>&nbsp;和&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">scrollOffset</code>&nbsp;可以接受&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">callback</code>&nbsp;参数,它与&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query.exec</code>&nbsp;执行顺序是怎样,修改&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">res</code>&nbsp;结果会影响到后面的&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">callback</code>&nbsp;吗?</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">答案:先执行&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">boundingClientRect</code>&nbsp;和&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">scrollOffset</code>&nbsp;的&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">callback</code>,再执行&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">query.exec</code>&nbsp;的&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">callback</code>;修改&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">res</code>&nbsp;结果会影响到后面&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">exec</code>&nbsp;的结果。</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">上面的问题通过小程序开发者工具中的&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">WAService.js</code>&nbsp;源码简单美化还原后可以了解&nbsp;<code style="word-break: break-all; margin: 0px 3px; padding: 1px 3px; border: 1px solid rgb(204, 204, 204); vertical-align: baseline; font-family: Menlo, Monaco, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; background: rgb(221, 221, 221); text-shadow: rgb(255, 255, 255) 0px 1px; font-size: 0.9em; color: rgb(102, 102, 102);">SelectorQuery</code>&nbsp;的代码逻辑</p><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">SelectorQuery.js</p><pre class="hljs javascript" style="word-break: break-all; margin-top: 10px; margin-bottom: 10px; padding: 15px 20px; border: 0px; vertical-align: baseline; overflow: auto; text-size-adjust: none; font-family: &quot;Source Code Pro&quot;, Consolas, Monaco, Menlo, monospace; color: rgb(255, 255, 255); background-color: rgb(39, 40, 34); line-height: 22px; border-radius: 6px;"><code class="hljs javascript" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; display: block; overflow-x: auto; font-size: 12px; text-size-adjust: none; font-family: &quot;Source Code Pro&quot;, Consolas, Monaco, Menlo, monospace; color: rgb(248, 248, 242); background: 0px center; text-shadow: rgb(34, 34, 34) 0px 1px;"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">import</span> NodesRef <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">from</span> <span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;NodesRef&#39;</span>;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">import</span> requestComponentInfo <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">from</span> <span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;requestComponentInfo&#39;</span>;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">export</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">default</span> <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">pluginId</span>) </span>{ &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-class" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">class</span> <span class="hljs-title" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(166, 226, 46); font-style: italic;">SelectorQuery</span> </span>{ &nbsp; &nbsp;constructor(plugin) { &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (plugin &amp;&amp; plugin.page) { &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component = <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._defaultComponent = plugin.page; &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId = <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._defaultComponent.__wxWebviewId__; &nbsp; &nbsp; &nbsp;} <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">else</span> { &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">var</span> pages = __internalGlobal__.getCurrentPagesByDomain(<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;&#39;</span>); &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._defaultComponent = pages[pages.length - <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">1</span>], &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component = <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">null</span>; &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId = <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">null</span>; &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queue = []; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queueCb = []; &nbsp; &nbsp;} &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">in</span>(component) { &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (!<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId) { &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId = component.__wxWebviewId__; &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component = component; &nbsp; &nbsp; &nbsp;} <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">else</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId !== component.__wxWebviewId__) { &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-built_in" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">console</span>.error(<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;A single SelectorQuery could not work in components in different pages. A SelectorQuery#in call has been ignored.&#39;</span>); &nbsp; &nbsp; &nbsp;} <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">else</span> { &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component = component; &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>; &nbsp; &nbsp;} &nbsp; &nbsp;select(selector) { &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">new</span> NodesRef(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component, selector, <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>); &nbsp; &nbsp;} &nbsp; &nbsp;selectAll(selector) { &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">new</span> NodesRef(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component, selector, <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">false</span>); &nbsp; &nbsp;} &nbsp; &nbsp;selectViewport() { &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">new</span> NodesRef(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>, <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">0</span>, <span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;&#39;</span>, <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>); &nbsp; &nbsp;} &nbsp; &nbsp;_push(selector, component, single, fields, callback) { &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (!<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId) { &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId = <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._defaultComponent ? <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._defaultComponent.__wxWebviewId__ : <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">undefined</span>; &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> rootNodeId = pluginId ? <span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;&#39;</span> : r.getRootNodeId(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId); &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queue.push({ &nbsp; &nbsp; &nbsp; &nbsp;component: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">null</span> != component ? (<span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">0</span> === component ? <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">0</span> : component.__wxExparserNodeId__) : rootNodeId, &nbsp; &nbsp; &nbsp; &nbsp;selector, &nbsp; &nbsp; &nbsp; &nbsp;single, &nbsp; &nbsp; &nbsp; &nbsp;fields, &nbsp; &nbsp; &nbsp;}); &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queueCb.push(callback || <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">null</span>); &nbsp; &nbsp;} &nbsp; &nbsp;exec(callback) { &nbsp; &nbsp; &nbsp;requestComponentInfo(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._webviewId, { &nbsp; &nbsp; &nbsp; &nbsp;pluginId, &nbsp; &nbsp; &nbsp; &nbsp;queue: <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queue, &nbsp; &nbsp; &nbsp;}, (results) =&gt; { &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> queueCb = <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._queueCb; &nbsp; &nbsp; &nbsp; &nbsp;results.forEach((res, index) =&gt; { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;function&#39;</span> == <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">typeof</span> queueCb[index]) { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;queueCb[index].call(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>, res); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp; &nbsp;}); &nbsp; &nbsp; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;function&#39;</span> == <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">typeof</span> callback) { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;callback.call(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>, results); &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp;}) &nbsp; &nbsp;} &nbsp;} }</code></pre><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">requestComponentInfo.js</p><pre class="hljs javascript" style="word-break: break-all; margin-top: 10px; margin-bottom: 10px; padding: 15px 20px; border: 0px; vertical-align: baseline; overflow: auto; text-size-adjust: none; font-family: &quot;Source Code Pro&quot;, Consolas, Monaco, Menlo, monospace; color: rgb(255, 255, 255); background-color: rgb(39, 40, 34); line-height: 22px; border-radius: 6px;"><code class="hljs javascript" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; display: block; overflow-x: auto; font-size: 12px; text-size-adjust: none; font-family: &quot;Source Code Pro&quot;, Consolas, Monaco, Menlo, monospace; color: rgb(248, 248, 242); background: 0px center; text-shadow: rgb(34, 34, 34) 0px 1px;"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> subscribe = <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">eventType, callback</span>) </span>{ &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> _callback = <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">event, webviewId, nativeInfo = {}</span>) </span>{ &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> { data = {}, options } = event; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> startTime = options &amp;&amp; options.timestamp || <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">0</span>; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> endTime = <span class="hljs-built_in" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">Date</span>.now(); &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;function&#39;</span> == <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">typeof</span> callback) { &nbsp; &nbsp; &nbsp;callback(data, webviewId); &nbsp; &nbsp; &nbsp;Reporter.speedReport({ &nbsp; &nbsp; &nbsp; &nbsp;key: <span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;webview2AppService&#39;</span>, &nbsp; &nbsp; &nbsp; &nbsp;data, &nbsp; &nbsp; &nbsp; &nbsp;timeMark: { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;startTime, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;endTime, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nativeTime: nativeInfo.nativeTime || <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">0</span>, &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp;}); &nbsp; &nbsp;} &nbsp;}; &nbsp;__safeway__.bridge.subscribe(eventType, _callback); }<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> publish = <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">eventType, data, webviewIds</span>) </span>{ &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> event = { &nbsp; &nbsp;data, &nbsp; &nbsp;options: { &nbsp; &nbsp; &nbsp;timestamp: <span class="hljs-built_in" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">Date</span>.now(), &nbsp; &nbsp;} &nbsp;}; &nbsp;__safeway__.bridge.publish(eventType, event, webviewIds); }<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> requestCb = {};<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">let</span> requestId = <span class="hljs-number" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">1</span>; subscribe(<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;responseComponentInfo&#39;</span>, <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">data</span>) </span>{ &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> reqId = data.reqId; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> callback = requestCb[reqId]; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (callback) { &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">delete</span> requestCb[reqId]; &nbsp; &nbsp;callback(data.res); &nbsp;} });<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">export</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">default</span> <span class="hljs-function" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">function</span> <span class="hljs-title" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(166, 226, 46);">requestComponentInfo</span>(<span class="hljs-params" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(248, 248, 242);">webviewId, reqs, callback</span>) </span>{ &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">const</span> reqId = requestId++; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">if</span> (!webviewId) { &nbsp; &nbsp;<span class="hljs-built_in" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">console</span>.warn(<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;An SelectorQuery call is ignored because no proper page or component is found. Please considering using `SelectorQuery.in` to specify a proper one.&#39;</span>); &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span>; &nbsp;} &nbsp;requestCb[reqId] = callback, &nbsp;publish(<span class="hljs-string" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(230, 219, 116);">&#39;requestComponentInfo&#39;</span>, &nbsp; &nbsp;{ &nbsp; &nbsp; &nbsp;reqId, &nbsp; &nbsp; &nbsp;reqs, &nbsp; &nbsp;}, &nbsp; &nbsp;[webviewId], &nbsp;); }</code></pre><p style="word-break: break-all; margin-top: 10px; margin-bottom: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(51, 51, 51); font-family: &quot;Microsoft YaHei&quot;, Verdana, Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">NodesRef.js</p><pre class="hljs javascript" style="word-break: break-all; margin-top: 10px; margin-bottom: 10px; padding: 15px 20px; border: 0px; vertical-align: baseline; overflow: auto; text-size-adjust: none; font-family: &quot;Source Code Pro&quot;, Consolas, Monaco, Menlo, monospace; color: rgb(255, 255, 255); background-color: rgb(39, 40, 34); line-height: 22px; border-radius: 6px;"><code class="hljs javascript" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; display: block; overflow-x: auto; font-size: 12px; text-size-adjust: none; font-family: &quot;Source Code Pro&quot;, Consolas, Monaco, Menlo, monospace; color: rgb(248, 248, 242); background: 0px center; text-shadow: rgb(34, 34, 34) 0px 1px;"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">export</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">default</span> <span class="hljs-class" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(102, 217, 239);">class</span> <span class="hljs-title" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(166, 226, 46); font-style: italic;">NodesRef</span> </span>{ &nbsp;constructor(selectorQuery, component, selector, single) { &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery = selectorQuery; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component = component; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selector = selector; &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._single = single; &nbsp;} &nbsp;fields(fields, callback) { &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery._push(<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selector, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._single, &nbsp; &nbsp; &nbsp;fields, &nbsp; &nbsp; &nbsp;callback, &nbsp; &nbsp;); &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery; &nbsp;} &nbsp;boundingClientRect(callback) { &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery._push( <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selector, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._single, &nbsp; &nbsp; &nbsp;{ &nbsp; &nbsp; &nbsp; &nbsp;id: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>, &nbsp; &nbsp; &nbsp; &nbsp;dataset: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>, &nbsp; &nbsp; &nbsp; &nbsp;rect: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>, &nbsp; &nbsp; &nbsp; &nbsp;size: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>, &nbsp; &nbsp; &nbsp;}, &nbsp; &nbsp; &nbsp;callback, &nbsp; &nbsp;); &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery; &nbsp;} &nbsp;scrollOffset(callback) { &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery._push( <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selector, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._component, <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._single, &nbsp; &nbsp; &nbsp;{ &nbsp; &nbsp; &nbsp; &nbsp;id: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>, &nbsp; &nbsp; &nbsp; &nbsp;dataset: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>, &nbsp; &nbsp; &nbsp; &nbsp;scrollOffset: <span class="hljs-literal" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(174, 129, 255);">true</span>, &nbsp; &nbsp; &nbsp;}, &nbsp; &nbsp; &nbsp;callback, &nbsp; &nbsp;); &nbsp; &nbsp;<span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">return</span> <span class="hljs-keyword" style="word-break: break-all; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(249, 38, 114);">this</span>._selectorQuery; &nbsp;} }</code></pre><p>转载自:<a href="https://imweb.io/topic/5cdba50de363b77a0edeb862">https://imweb.io/topic/5cdba50de363b77a0edeb862</a></p>
热门推荐