本文实例为大家分享了微信小程序实现通讯录功能的具体代码,供大家参考,具体内容如下
微信小程序模仿通讯录功能需要用到scroll-view标签
思路:首先需要获取到你所需要展示的数据样式的高度(这就需要用到微信给我们提供的一个API来完成了,因为小程序是没有DOM树结构的,这个可以去看我的前一篇里面有详细的记载怎么获取想要的元素的宽高。),然后组合成一个高度数组(便于后面根据这个数组进行判断),再获取滚动距离,用这两个比较判断之后就可以得出滚动的时候右边选中的字母了,然后再利用scroll-view标签的scroll-into-view属性来实现点击右侧导航字母,对应的左侧列表滚动到相应的位置。(每个人的想法不同,解法和理解也不太可能相同。所以,按自己的心走就好了),话不多说,上代码!
wxml
<view> <!-- 左侧列表内容部分 --> <scroll-view class="content" enable-back-to-top scroll-into-view="{{toView}}" scroll-y="true" scroll-with-animation="true" bindscroll="onPageScroll"> <view wx:for="{{listMain}}" wx:for-item="group" wx:key="{{group.id}}" id="{{ 'inToView'+group.id}}" data-id='{{group.id}}'> <view class="address_top">{{group.name}}</view> <view wx:for="{{group.list}}" wx:for-item="bdiet" wx:key="{{index}}"> <navigator url='./wholeDetail"address_bottom" data-id='{{bdiet.id}}'>{{bdiet.wiki_name}}</view> </navigator> </view> </view> </scroll-view> <!-- 右侧字母导航 --> <view class="orientation_region"> <view class="orientation">#</view> <block wx:for="{{listMain}}" wx:key="{{item.id}}"> <view class="orientation_city {{isActive==item.id " bindtap="scrollToViewFn" data-id="{{item.id}}"> {{item.name}} </view> </block> </view> </view>
wxss
page { height: 100%; } .content { padding-bottom: 20rpx; box-sizing: border-box; height: 100%; position: fixed; } .location { width: 100%; } .location_top { height: 76rpx; line-height: 76rpx; background: #f4f4f4; color: #606660; font-size: 28rpx; padding: 0 20rpx; } .location_bottom { height: 140rpx; line-height: 140rpx; color: #d91f16; font-size: 28rpx; border-top: 1rpx #e5e5e5 solid; border-bottom: 1rpx #e5e5e5 solid; padding: 0 20rpx; align-items: center; display: -webkit-flex; } .address_top { height: 56rpx; line-height: 56rpx; background: #ebebeb; color: #384857; font-size: 28rpx; padding: 0 20rpx; } .address_bottom { height: 88rpx; line-height: 88rpx; background: #fff; color: #000; font-size: 28rpx; border-bottom: 1rpx #e5e5e5 solid; margin: 0 32rpx; } .location_img { width: 48rpx; height: 48rpx; position: absolute; right: 20rpx; top: 125rpx; } .add_city { width: 228rpx; height: 60rpx; line-height: 60rpx; text-align: center; border: 1rpx solid #e5e5e5; color: #000; margin-right: 20rpx; } .add_citying { width: 228rpx; height: 60rpx; line-height: 60rpx; text-align: center; border: 1rpx solid #09bb07; color: #09bb07; margin-right: 20rpx; } .orientation { white-space: normal; display: inline-block; width: 45rpx; height: 50rpx; font-size: 28rpx; font-weight: bold; color: rgb(88, 87, 87); text-align: center; } .orientation_region { padding: 5px 0px; width: 45rpx; font-size: 20rpx; position: fixed; top: 50%; right: 6rpx; transform: translate(0, -50%); background: rgb(199, 198, 198); border-radius: 10px; } .orientation_city { height: 40rpx; line-height: 40rpx; color: #000; text-align: center; } .active { color: #2cc1d1; } .list-fixed { position: fixed; width: 100%; z-index: 999; height: 56rpx; line-height: 56rpx; background: #ebebeb; color: #999; font-size: 28rpx; padding: 0 20rpx; z-index: 9999; } .fixed-title { color: #2cc1d1; }
核心来了(JS逻辑)
Page({ /** * 页面的初始数据 */ data: { isActive: null, listMain: [], toView: 'inToView0', oHeight: [], }, //点击右侧字母导航定位触发 scrollToViewFn: function (e) { var that = this; var _id = e.target.dataset.id; var scrollTop = that.data.scrollTop; console.log('点击获取Id', _id) console.log('点击获取滚动距离', scrollTop) for (var i = 0; i < that.data.oHeight.length; i++) { if (that.data.oHeight[i].key === _id) { that.setData({ toView: 'inToView' + that.data.oHeight[i].key }); break } } }, // 页面滑动时触发 onPageScroll: function (e) { var that = this; that.setData({ scrollTop: e.detail.scrollTop }) var scrollTop = that.data.scrollTop; console.log(scrollTop); for(var i =0; i< that.data.oHeight.length; i++){ if (scrollTop >= 0 && scrollTop + 20 < that.data.oHeight[0].height){ that.setData({ isActive: that.data.oHeight[0].key }); } else if (scrollTop + 20 <= that.data.oHeight[i].height) { that.setData({ isActive: that.data.oHeight[i].key }); return false; } } }, // 处理数据格式,及获取分组高度 getBrands: function () { var that = this; var url = config.DOMAIN_API.wikiWholeList, data = {}; //发起get请求,使用方式如下: util.ajaxPost(url, data).then((res) => { //成功处理 that.setData({ listMain: res }); var number = 0; for (let i = 0; i < that.data.listMain.length; i++) { wx.createSelectorQuery().select('#inToView' + that.data.listMain[i].id).boundingClientRect(function (rect) { number = rect.height + number; var newArry = [{ 'height': number, 'key': rect.dataset.id, "name": that.data.listMain[i].name }] that.setData({ oHeight: that.data.oHeight.concat(newArry) }) }).exec(); }; }).catch((errMsg) => { //错误处理,已统一处理,此处可以不需要 console.log(errMsg); }); }, onLoad: function (options) { var that = this; wx.hideShareMenu() that.getBrands(); }, })
以上就是做这个仿通讯录功能的所有步骤,和别的大同小异。
为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年11月20日
2024年11月20日
- 容祖儿《小小》香港首版 [WAV+CUE][1.1G]
- 莫文蔚《拉活…》SONY [WAV+CUE][1G]
- Beyond《极品天碟》LPCD45II首批限量版[WAV+CUE][1.7G]
- HIFI示范巅峰之作《情解药·Hi-Fi心魂》2CD[WAV+CUE]
- 房东的猫2021-关于彻夜不眠的事情(EP)[青柴文化][WAV+CUE]
- 群星.1993-一曲成名·青春无悔【飞碟】【WAV+CUE】
- 张芸京.2016-失败的高歌【泡耳音乐】【WAV+CUE】
- 天籁女声《2024第31届上海国际高端音影展纪念CD》[WAV+CUE][1.1G]
- 姚斯婷 《敢爱敢做》头版限量编号24K金碟[低速原抓WAV+CUE][1.2G]
- 雷婷 《把爱留在昨天》紫银合金AQCD[低速原抓WAV+CUE][1.1G]
- 董文华2024-《精选30年·长城长HQ》头版限量[WAV+CUE]
- 柏菲·魏松2024-《跟你走》限量开盘母带ORMCD[WAV+CUE]
- 柏菲·甘雅丹《雅鲁藏布》限量开盘母带ORMCD[WAV+CUE]
- 孙露《明天你是否依然爱我》1:1母盘直刻[低速原抓WAV+CUE][1G]
- 群星2024《龙年精选.音乐盛宴》纯银CD[WAV+CUE][1.1G]