微信小程序?qū)崿F(xiàn)錨點功能
“錨點”功能在實際應(yīng)用設(shè)計的好,可以提高用戶體驗。今天碰到一個類似下面功能:
由于頁面數(shù)據(jù)比較多,除了做些上拉加載,下拉刷新等優(yōu)化。還可以進行進行分類,如上圖。功能要求:點擊導(dǎo)航的菜單,相應(yīng)頁面的分類內(nèi)容滑動到頁面頂部。由于微信小程序頁面無dom操作,改功能改如何操作呢?
一開始想到 wx.pageScrollTo(Object object) 這個API,由于每個點擊每個導(dǎo)航利用wx.pageScrollTo滾動到相應(yīng)分類的scrollTop不能確定,所以放棄了。
后發(fā)現(xiàn) scroll-view 組件 的屬性 scroll-into-view 可以利用一下:
<scroll-view scroll-y scroll-into-view="{{toView}}" bindscroll="scrollTopFun" style='height:100vh' scroll-top="{{scrollTop.scroll_top}}" scroll-with-animation="true" > <!-- 內(nèi)容 --> <view class='bg-white m-t10'> <view class='flex'> <view class='flex-1 f16 p-v text-center {{currentId === index? "active":""}}' data-id="{{index}}" bindtap='navHandleClick' wx:for="{{navietm}}" wx:key="{{index}}">{{item}}</view> </view> <view class='has-padding-sm'> <!-- 實時停電信息 --> <view> <view class='m-t10' wx:for="{{navlist}}" wx:key="{{index}}"> <view class='itembox' id='{{item.id}}'> <view class='titlebox flex'> <view class='flex-1 text-ellipsis'>{{item.name}}</view> <view class='f12'> <text class='icon icon-like-o inline-middle'></text> <text class='inline-middle m-l5'>加入關(guān)注</text> </view> </view> <view class='itemconbox'> <view class='flex c9'> <view class='line m-r5 flex-1 self-middle'></view> ·<text class='p-w-sm'>昨天</text>· <view class='line m-l5 flex-1 self-middle'></view> </view> <view class='bg-white p-w-sm radius-sm m-t5' bindtap="togglePopup"> <view class='border-line-b flex text-bold p-t5 p-b5'> <view class='flex-1'> <image src='../../images/date.png' class='ico-date inline-middle'></image> <text class='inline-middle m-l10'>2018-09-12 22:15:00</text> </view> <view>電網(wǎng)故障停限電</view> </view> <view class='p-w-sm p-v-sm'> <view> <text class='text-bold m-r10 c-11A99A'>送電時間:</text> <text class='f12 c6'>2018-09-13 16:15:00</text> <text class='label bg-A5A5A5'>預(yù)計</text> </view> <view> <text class='text-bold m-r10 c-11A99A'>停電范圍:</text> <text class='f12 c6'>[開福區(qū)] 湘江世紀(jì)城、湘江世紀(jì)城、湘江世紀(jì)城、湘江世紀(jì)城、湘江世紀(jì)城、湘江世紀(jì)城、</text> </view> <view> <text class='text-bold m-r10 c-11A99A'>停電區(qū)域:</text> <text class='f12 c6'>湖南省長沙市開福區(qū)</text> </view> </view> </view> </view> <view class='itemconbox'> <view class='flex c9'> <view class='line m-r5 flex-1 self-middle'></view> ·<text class='p-w-sm'>昨天</text>· <view class='line m-l5 flex-1 self-middle'></view> </view> <view class='bg-white p-w-sm radius-sm m-t5' bindtap="togglePopup"> <view class='border-line-b flex text-bold p-t5 p-b5'> <view class='flex-1'> <image src='../../images/date.png' class='ico-date inline-middle'></image> <text class='inline-middle m-l10'>2018-09-12 22:15:00</text> </view> <view>電網(wǎng)故障停限電</view> </view> <view class='p-w-sm p-v-sm'> <view> <text class='text-bold m-r10 c-11A99A'>送電時間:</text> <text class='f12 c6'>2018-09-13 16:15:00</text> <text class='label bg-A5A5A5'>預(yù)計</text> </view> <view> <text class='text-bold m-r10 c-11A99A'>停電范圍:</text> <text class='f12 c6'>[開福區(qū)] 湘江世紀(jì)城、湘江世紀(jì)城、湘江世紀(jì)城、湘江世紀(jì)城、湘江世紀(jì)城、湘江世紀(jì)城、</text> </view> <view> <text class='text-bold m-r10 c-11A99A'>停電區(qū)域:</text> <text class='f12 c6'>湖南省長沙市開福區(qū)</text> </view> </view> </view> </view> </view> </view> <view class='text-center p-t10 f12 c9'> 沒有更多信息了 </view> </view> </view> </view> </scroll-view> <!-- 導(dǎo)航 --> <view class='nav-fixed' wx:if="{{scrollTop.goTop_show}}"> <!-- 滾動到離頂部一定距離在顯示導(dǎo)航按鈕 --> <view class='navitembtn shadow {{isnavfixed ? "":"navitembtned"}}' catchtap='navfixedHandleClick'>導(dǎo)航</view> <view class='navconbox' hidden='{{isnavfixed}}'> <view class='floor gotop' catchtap='gotop'>返回頂部</view> <view class='floor' bindtap='clickScroll' data-id="{{item.id}}" wx:for="{{navlist}}" wx:key="{{index}}"> {{item.name}} </view> </view> </view>
Page({ data: { isnavfixed:true, //是否顯示浮動導(dǎo)航 toView:'', //顯示區(qū)域 navlist: [//地區(qū)數(shù)據(jù) { id:"list0", name:'市區(qū)河?xùn)|' }, { id: "list1", name: '市區(qū)河西' }, { id: "list2", name: '長沙縣' }, { id: "list3", name: '望城區(qū)' }, { id: "list4", name: '瀏陽市' }, { id: "list5", name: '寧鄉(xiāng)市' } ], scrollTop: {//豎直滾動的位置 scroll_top: 0, goTop_show: false } }, navfixedHandleClick(){ // 浮動導(dǎo)航 this.setData({ isnavfixed: !this.data.isnavfixed }); }, scrollTopFun: function (e) { // 頁面滾動到一定位置顯示導(dǎo)航 if (e.detail.scrollTop > 200) { this.setData({ 'scrollTop.goTop_show': true }); } else { this.setData({ 'scrollTop.goTop_show': false }); } }, gotop(){ //返回頂部, var _top = this.data.scrollTop.scroll_top; _top == 1 ? _top = 0 : _top = 1 this.setData({ 'scrollTop.scroll_top': _top, 'isnavfixed':true }); console.log(this.data.scrollTop); }, clickScroll: function (e) { //點擊導(dǎo)航菜單滾動 var toView = e.currentTarget.dataset.id this.setData({ "toView": toView, 'isnavfixed': true }) } })
主要用到 scroll-view 組件 scroll-into-view 屬性;當(dāng)點擊導(dǎo)航菜單的時候,我們改變相應(yīng)的 scroll-into-view 的值,并且同時需要在 scroll-view 組件內(nèi)相應(yīng)位置處的子元素上定義相應(yīng)的 id;因為scroll-into-view 值應(yīng)為某子元素 id,設(shè)置哪個方向可滾動,則在哪個方向滾動到該元素。
scroll-view 組件使用的一些注意點:
1. scroll-into-view 與 上面提到的子元素id 不能以數(shù)字開頭
2.bindscroll 屬性 實時監(jiān)聽滾動 ; 如上面 頁面滾動到一定位置顯示導(dǎo)航按鈕功能
3.scroll-top 、scroll-left 屬性: 設(shè)置豎向或者橫向滾動條位置,如上面 返回頂部 功能
4.scroll-with-animation 屬性:滾動平滑過渡,提高體驗
5.如果需要隱藏 scroll-view 的滾動條使用 css ::-webkit-scrollbar{width: 0;height: 0;color: transparent;}
6.如果scroll-view占頁面整個高度,可設(shè)置 scroll-view的高度 height:100vh , 設(shè)置height:100%無效 (vh:相對于視口的高度。視口被均分為100單位的vh)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS日期格式化之javascript Date format
這篇文章主要介紹了JS日期格式化之javascript Date format的相關(guān)資料,需要的朋友可以參考下2015-10-1015個簡單的JS編碼標(biāo)準(zhǔn)讓你的代碼更整潔(小結(jié))
這篇文章主要介紹了15個簡單的JS編碼標(biāo)準(zhǔn)讓你的代碼更整潔(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07JS實現(xiàn)獲取當(dāng)前所在周的周六、周日示例分析
這篇文章主要介紹了JS實現(xiàn)獲取當(dāng)前所在周的周六、周日,結(jié)合具體實例形式分析了javascript針對日期時間的獲取與計算相關(guān)操作技巧,需要的朋友可以參考下2019-05-05bootstrap折疊調(diào)用collapse()后data-parent不生效的快速解決辦法
今天做的項目,用到了bootstrap的折疊功能,這個功能需要只展開一個折疊框,點擊一個就會自動隱藏另一個,實現(xiàn)起來也很容易,但是在測試時同事提出了一個bug,怎么解決呢?今天小編通過本教程給大家分享下2017-02-02前端常見的時間轉(zhuǎn)換方法以及獲取當(dāng)前時間方法小結(jié)
在做開發(fā)時會對不同的時間格式進行轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于前端常見的時間轉(zhuǎn)換方法以及獲取當(dāng)前時間方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01js實現(xiàn)提交前對列表數(shù)據(jù)的增刪改查
這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)提交前對列表數(shù)據(jù)的增刪改查,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-01-01微信內(nèi)置瀏覽器WeixinJSBridge的使用技巧(隱藏右上角按鈕,獲取用戶網(wǎng)絡(luò)狀態(tài),支付等)
這篇文章主要介紹了微信內(nèi)置瀏覽器WeixinJSBridge的使用技巧,隱藏右上角按鈕,獲取用戶網(wǎng)絡(luò)狀態(tài),支付,隱藏下方工具欄等,需要的朋友可以參考下2024-02-02JavaScript中將number轉(zhuǎn)為string的5種方法
這篇文章主要給大家介紹了關(guān)于JavaScript中將number轉(zhuǎn)為string的5種方法,在JavaScript的值類型轉(zhuǎn)換中,最常發(fā)生的就是string與number這兩種類型值之間的相互轉(zhuǎn)換,需要的朋友可以參考下2023-07-07微信小程序?qū)崿F(xiàn)點擊按鈕移動view標(biāo)簽的位置功能示例【附demo源碼下載】
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)點擊按鈕移動view標(biāo)簽的位置功能,涉及微信小程序事件綁定與this.setData動態(tài)修改data數(shù)值進而改變view標(biāo)簽樣式的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12