极乐门资源网 Design By www.ioogu.com
本文实例为大家分享了微信小程序实现通讯录功能的具体代码,供大家参考,具体内容如下
微信小程序模仿通讯录功能需要用到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.ioogu.com
极乐门资源网
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
极乐门资源网 Design By www.ioogu.com
暂无微信小程序仿通讯录功能的评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年12月24日
2024年12月24日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]