大众平微 發表於 2021-7-21 14:10:00

uni-app 组件之scroll-view

<p style="margin-left: 30px">原网页地址:https://uniapp.dcloud.io/component/scroll-view</p>
<h1>说明</h1>
<p style="margin-left: 30px">scroll-view,可滚动视图区域。用于区域滚动。</p>
<p style="margin-left: 30px">需注意在webview渲染页面中,区域滚动性能不及页面滚动。</p>
<h1>属性说明</h1>
<table border="0">
<tbody>
<tr style="background-color: rgba(204, 204, 204, 1)">
<td><strong>属性名</strong></td>
<td><strong>类型</strong></td>
<td><strong>默认值</strong></td>
<td><strong>说明</strong></td>
<td><strong>平台差异说明</strong></td>
</tr>
<tr>
<td>scroll-x</td>
<td>Boolean</td>
<td>false</td>
<td>允许横向滚动</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>scroll-y</td>
<td>Boolean</td>
<td>false</td>
<td>允许纵向滚动</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>upper-threshold</td>
<td>Number</td>
<td>50</td>
<td>距顶部/左边多远时(单位px),触发scrolltopper事件</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>lower-threshold</td>
<td>Number</td>
<td>50</td>
<td>距离底部/右边多远时(单位px),触发scrolltolwer事件</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>scroll-top</td>
<td>Number</td>
<td>&nbsp;</td>
<td>设置竖直滚动条位置</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>scroll-top</td>
<td>Number</td>
<td>&nbsp;</td>
<td>设置横向滚动条位置</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>scroll-into-view</td>
<td>String</td>
<td>&nbsp;</td>
<td>值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>scroll-with-animation</td>
<td>Boolean</td>
<td>false</td>
<td>在设置滚动条位置时使用动画过渡</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>enable-back-to-top</td>
<td>Boolean</td>
<td>false</td>
<td>iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只支持竖向</td>
<td>app-nvue,微信小程序</td>
</tr>
<tr>
<td>show-scrollbar</td>
<td>Boolean</td>
<td>false</td>
<td>控制是否出现滚动条</td>
<td>App-nvue 2.1.5+</td>
</tr>
<tr>
<td>refresher-enabled</td>
<td>Boolean</td>
<td>false</td>
<td>开启自定义下拉刷新</td>
<td>app-vue 2.5.12+,微信小程序基础库2.10.1+</td>
</tr>
<tr>
<td>refresher-threshold</td>
<td>Number</td>
<td>45</td>
<td>设置自定义下拉刷新阈值</td>
<td>app-vue 2.5.12+,微信小程序基础库2.10.1+</td>
</tr>
<tr>
<td>refresher-default-style</td>
<td>String</td>
<td>"black"</td>
<td>设置自定义下拉刷新默认样式,支持设置 black,white,none,none 表示不使用默认样式</td>
<td>app-vue 2.5.12+,微信小程序基础库2.10.1+</td>
</tr>
<tr>
<td>refresher-background</td>
<td>String</td>
<td>"#FFF"</td>
<td>设置自定义下拉刷新区域背景颜色</td>
<td>app-vue 2.5.12+,微信小程序基础库2.10.1+</td>
</tr>
<tr>
<td>refresher-triggered</td>
<td>Boolean</td>
<td>false</td>
<td>设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发</td>
<td>app-vue 2.5.12+,微信小程序基础库2.10.1+</td>
</tr>
<tr>
<td>enable-flex</td>
<td>Boolean</td>
<td>false</td>
<td>启用 flexbox 布局。开启后,当前节点声明了 display: flex 就会成为 flex container,并作用于其孩子节点。</td>
<td>微信小程序 2.7.3</td>
</tr>
<tr>
<td>scroll-anchoring</td>
<td>Boolean</td>
<td>false</td>
<td>开启 scroll anchoring 特性,即控制滚动位置不随内容变化而抖动,仅在 iOS 下生效,安卓下可参考 CSS overflow-anchor 属性。</td>
<td>微信小程序 2.8.2</td>
</tr>
<tr>
<td>@scrolltoupper</td>
<td>EventHandle</td>
<td>&nbsp;</td>
<td>滚动到顶部/左边,会触发 scrolltoupper 事件</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>@scrolltolower</td>
<td>EventHandle</td>
<td>&nbsp;</td>
<td>滚动到底部/右边,会触发 scrolltolower 事件    </td>
<td>&nbsp;</td>
</tr>
<tr>
<td>@scroll</td>
<td>EventHandle</td>
<td>&nbsp;</td>
<td>滚动时触发,event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>@refresherpulling</td>
<td>EventHandle</td>
<td>&nbsp;</td>
<td>自定义下拉刷新控件被下拉</td>
<td>app-vue 2.5.12+,微信小程序基础库2.10.1+</td>
</tr>
<tr>
<td>@refresherrefresh</td>
<td>EventHandle</td>
<td>&nbsp;</td>
<td>自定义下拉刷新被触发</td>
<td>app-vue 2.5.12+,微信小程序基础库2.10.1+</td>
</tr>
<tr>
<td>@refresherrestore</td>
<td>EventHandle</td>
<td>&nbsp;</td>
<td>自定义下拉刷新被复位</td>
<td>app-vue 2.5.12+,微信小程序基础库2.10.1+</td>
</tr>
<tr>
<td>@refresherabort</td>
<td>EventHandle</td>
<td>&nbsp;</td>
<td>自定义下拉刷新被中止</td>
<td>app-vue 2.5.12+,微信小程序基础库2.10.1+</td>
</tr>
</tbody>
</table>
<p style="margin-left: 30px">使用数值滚动时,需要给&lt;scroll-view&gt;一个固定高度,通过css设置heigth;使用横向滚动时,需要给<span style="background-color: rgba(255, 204, 153, 1)">&lt;scroll-view&gt;</span>添加<span style="background-color: rgba(255, 204, 153, 1)">white-space:nowrap;</span>样式。</p>
<h1><strong>示例</strong> 查看演示</h1>
<p style="margin-left: 30px">以下示例代码来自hello uni-app项目,推荐使用HBuilderX。</p>
<div class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_66cf6f9e-1bac-4188-827a-171cbf518446" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_66cf6f9e-1bac-4188-827a-171cbf518446" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)"> 本示例未包含完整css,获取外链css请参考上文,在hello uni-app项目中查看 </span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span>         <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="uni-padding-wrap uni-common-mt"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>             <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="uni-title uni-common-mt"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">                Vertical Scroll
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>               <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>\n纵向滚动<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span>             <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>             <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>               <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">scroll-view </span><span style="color: rgba(255, 0, 0, 1)">:scroll-top</span><span style="color: rgba(0, 0, 255, 1)">="scrollTop"</span><span style="color: rgba(255, 0, 0, 1)"> scroll-y</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="scroll-Y"</span><span style="color: rgba(255, 0, 0, 1)"> @scrolltoupper</span><span style="color: rgba(0, 0, 255, 1)">="upper"</span><span style="color: rgba(255, 0, 0, 1)"> @scrolltolower</span><span style="color: rgba(0, 0, 255, 1)">="lower"</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(255, 0, 0, 1)">                @scroll</span><span style="color: rgba(0, 0, 255, 1)">="scroll"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">12</span>                     <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="demo1"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="scroll-view-item uni-bg-red"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>A<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>                     <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="demo2"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="scroll-view-item uni-bg-green"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>B<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">14</span>                     <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="demo3"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="scroll-view-item uni-bg-blue"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>C<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">15</span>               <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">scroll-view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">16</span>             <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">17</span>             <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">@tap</span><span style="color: rgba(0, 0, 255, 1)">="goTop"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="uni-link uni-center uni-common-mt"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">                点击这里返回顶部
</span><span style="color: rgba(0, 128, 128, 1)">19</span>             <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">20</span>             <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="uni-title uni-common-mt"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 0, 1)">                Horizontal Scroll
</span><span style="color: rgba(0, 128, 128, 1)">22</span>               <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>\n横向滚动<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">23</span>             <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">24</span>             <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">25</span>               <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">scroll-view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="scroll-view_H"</span><span style="color: rgba(255, 0, 0, 1)"> scroll-x</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)"> @scroll</span><span style="color: rgba(0, 0, 255, 1)">="scroll"</span><span style="color: rgba(255, 0, 0, 1)"> scroll-left</span><span style="color: rgba(0, 0, 255, 1)">="120"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">26</span>                     <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="demo1"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="scroll-view-item_H uni-bg-red"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>A<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">27</span>                     <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="demo2"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="scroll-view-item_H uni-bg-green"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>B<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">28</span>                     <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="demo3"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="scroll-view-item_H uni-bg-blue"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>C<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">29</span>               <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">scroll-view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">30</span>             <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">31</span>         <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">32</span>   <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<span class="cnblogs_code_collapse">示例</span></div>
<div class="cnblogs_code"><img id="code_img_closed_9b9d68f2-b74f-498c-9720-2180bbe190f5" class="code_img_closed lazyload" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_9b9d68f2-b74f-498c-9720-2180bbe190f5" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_9b9d68f2-b74f-498c-9720-2180bbe190f5" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 0, 1)">    data() {
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>             scrollTop: 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 0, 1)">            old: {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>               scrollTop: 0
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 0, 1)">    },
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">    methods: {
</span><span style="color: rgba(0, 128, 128, 1)">11</span>         upper: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(e) {
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">            console.log(e)
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">14</span>         lower: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(e) {
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">            console.log(e)
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">17</span>         scroll: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(e) {
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">            console.log(e)
</span><span style="color: rgba(0, 128, 128, 1)">19</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.old.scrollTop =<span style="color: rgba(0, 0, 0, 1)"> e.detail.scrollTop
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">21</span>         goTop: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(e) {
</span><span style="color: rgba(0, 128, 128, 1)">22</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.scrollTop = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.old.scrollTop
</span><span style="color: rgba(0, 128, 128, 1)">23</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.$nextTick(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 128, 128, 1)">24</span>               <span style="color: rgba(0, 0, 255, 1)">this</span>.scrollTop = 0
<span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">            });
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">            uni.showToast({
</span><span style="color: rgba(0, 128, 128, 1)">27</span>               icon:"none"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">28</span>               title:"纵向滚动 scrollTop 值已被修改为 0"
<span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">            })
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">31</span>   }</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h1>自定义下拉刷新</h1>
<p style="margin-left: 30px">注意自定义下拉刷新的性能不及pages.json中配置的原生下拉刷新。</p>
<div class="cnblogs_code"><img id="code_img_closed_03eae496-ffe7-4780-9ce7-288b05e50e11" class="code_img_closed lazyload" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_03eae496-ffe7-4780-9ce7-288b05e50e11" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_03eae496-ffe7-4780-9ce7-288b05e50e11" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">2</span>   <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">3</span>         <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">scroll-view </span><span style="color: rgba(255, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">="height: 300px;"</span><span style="color: rgba(255, 0, 0, 1)"> scroll-y</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)"> refresher-enabled</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)"> :refresher-triggered</span><span style="color: rgba(0, 0, 255, 1)">="triggered"</span>
<span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(255, 0, 0, 1)">            :refresher-threshold</span><span style="color: rgba(0, 0, 255, 1)">="100"</span><span style="color: rgba(255, 0, 0, 1)"> refresher-background</span><span style="color: rgba(0, 0, 255, 1)">="lightgreen"</span><span style="color: rgba(255, 0, 0, 1)"> @refresherpulling</span><span style="color: rgba(0, 0, 255, 1)">="onPulling"</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(255, 0, 0, 1)">            @refresherrefresh</span><span style="color: rgba(0, 0, 255, 1)">="onRefresh"</span><span style="color: rgba(255, 0, 0, 1)"> @refresherrestore</span><span style="color: rgba(0, 0, 255, 1)">="onRestore"</span><span style="color: rgba(255, 0, 0, 1)"> @refresherabort</span><span style="color: rgba(0, 0, 255, 1)">="onAbort"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">scroll-view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">6</span>   <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<div class="cnblogs_code"><img id="code_img_closed_d83770ac-43a0-457f-87e1-de463c8be898" class="code_img_closed lazyload" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_d83770ac-43a0-457f-87e1-de463c8be898" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_d83770ac-43a0-457f-87e1-de463c8be898" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;script&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">      data() {
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>               triggered: <span style="color: rgba(0, 0, 255, 1)">false</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">      onLoad() {
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>._freshing = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">10</span>             setTimeout(() =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">11</span>               <span style="color: rgba(0, 0, 255, 1)">this</span>.triggered = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">12</span>             }, 1000<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">      methods: {
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">            onPulling(e) {
</span><span style="color: rgba(0, 128, 128, 1)">16</span>               console.log("onpulling"<span style="color: rgba(0, 0, 0, 1)">, e);
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)">            },
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">            onRefresh() {
</span><span style="color: rgba(0, 128, 128, 1)">19</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">this</span>._freshing) <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">20</span>               <span style="color: rgba(0, 0, 255, 1)">this</span>._freshing = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">21</span>               setTimeout(() =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">22</span>                     <span style="color: rgba(0, 0, 255, 1)">this</span>.triggered = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">23</span>                     <span style="color: rgba(0, 0, 255, 1)">this</span>._freshing = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">24</span>               }, 3000<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">            },
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">            onRestore() {
</span><span style="color: rgba(0, 128, 128, 1)">27</span>               <span style="color: rgba(0, 0, 255, 1)">this</span>.triggered = 'restore'; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 需要重置</span>
<span style="color: rgba(0, 128, 128, 1)">28</span>               console.log("onRestore"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">            },
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 0, 1)">            onAbort() {
</span><span style="color: rgba(0, 128, 128, 1)">31</span>               console.log("onAbort"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">35</span> &lt;/script&gt;</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h2><img alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto" data-src="https://img2020.cnblogs.com/blog/1602649/202107/1602649-20210721140549524-320743072.png"> Tips</h2>
<ul>
<li>APP-vue和小程序中,请勿在 scroll-view 中使用 map、video 等原生组件。小程序中 scroll-view 中也不要使用 canvas、textarea 原生组件。更新:微信基础库2.4.4起支持了原生组件在 scroll-view、swiper、movable-view 中的使用。app-nvue无此限制。</li>
<li>scroll-view 不适合放长列表,有性能问题。长列表滚动和下拉刷新,应该使用原生导航栏搭配页面级的滚动和下拉刷新实现。包括在app-nvue页面,长列表应该使用list而不是scroll-view。</li>
<li>scroll-into-view 的优先级高于 scroll-top。</li>
<li>scroll-view是区域滚动,不会触发页面滚动,无法触发pages.json配置的下拉刷新、页面触底onReachBottomDistance、titleNView的transparent透明渐变。</li>
<li>若要使用下拉刷新,建议使用页面的滚动,而不是 scroll-view 。插件市场有前端模拟的基于scroll-view的下拉刷新,但性能不佳。如必需使用前端下拉刷新,推荐使用基于wxs的下拉刷新,性能会比基于js监听方式更高。</li>
<li>如果遇到scroll-top、scroll-left、refresher-triggered属性设置不生效的问题参考:组件属性设置不生效解决办法</li>
<li>scroll-view的滚动条设置,可通过css的-webkit-scrollbar自定义,包括隐藏滚动条。(app-nvue无此css)。</li>
</ul>

</div>
<div id="MySignature" role="contentinfo">
    有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。<br><br>
来源:https://www.cnblogs.com/luyj00436/p/15039228.html
頁: [1]
查看完整版本: uni-app 组件之scroll-view