微信小程序仿通讯录功能
作者:默认S 发布时间:2024-05-22 10:31:38
标签:微信小程序,通讯录
本文实例为大家分享了微信小程序实现通讯录功能的具体代码,供大家参考,具体内容如下
微信小程序模仿通讯录功能需要用到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?id={{bdiet.id}}' hover-class='none'>
<view class="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 ? 'active':'' }}" 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();
},
})
来源:https://blog.csdn.net/qq_37949737/article/details/90764700
0
投稿
猜你喜欢
- QQ邮箱/163邮箱的邮件发送:py文件发送邮件内容相当于一个第三方的客户端,借助于QQ/163邮箱服务器来发送的邮件。主要配置:导入模块—
- 1. 语句块:{ }之间的部分即为BLOCK语句块。2. 条件语句:if ( expression ) BLOCK;if ( e
- 在机房收费系统中,有几处这样的情况:起始日期和终止日期,相信聪明的你肯定可以想象出为什么要有两个日期控件!是的,就是从一张表中查找出在这两个
- 一、zmial发送邮件zmial是第三方库,需进行安装pip install zmail完成后,来给发一封邮件subject:标题conte
- 今天为大家介绍几个Python“装逼”实例代码,python绘制樱花、玫瑰、圣诞树代码实例,主要使用了turtle库Python绘制樱花代码
- Windows下的安装:下载地址:https://pypi.python.org/pypi/pyquery/#downloads下载后安装:
- MySQL的默认的调度策略可用总结如下:· 写入操作优先于读取操作。· 对某张数据表的写入操作某一时刻只能发生一次,写入请求按照它们到达的次
- Python异步编程之Asyncio1. 协程简介1.1 协程的含义及实现方法协程(Coroutine),也可以被称为微线程,是一种用户态内
- groupcache 简介在软件系统中使用缓存,可以降低系统响应时间,提高用户体验,降低某些系统模块的压力.groupcache是一款开源的
- 本文实例为大家分享了JavaScript实现年历效果的具体代码,供大家参考,具体内容如下<!DOCTYPE html><h
- 在开发中有个需求是一个选择城市的列表,看了看做成 * 联动好像不是特别方便 还是做成一整页可以按导航选取的就可以了话不多说开始上码我用的是va
- Mysql数据库、数据库表、数据基础操作笔记分享给大家,供大家参考,具体内容如下一、数据库操作1.创建数据库Create dat
- 实现html界面<!DOCTYPE html><html><head><title>Sele
- 在使用selenium去获取淘宝商品信息时会遇到登录界面这个登录界面处理的难度在于滑动验证的实现,有的人使用微博登录,避免了滑动验证,那可不
- 为什么使用虚拟环境因为直接在真实环境进行安装python的包会造成环境之间的污染,因此需要创建虚拟环境,原则上每一个项目都需要有一个独属于自
- 随着网络技术的不断发展,网络应用已经渗透到人类社会的各个角落。作为网络世界的支撑点的网站,更是人们关注的热点:政府利用网站宣传自己的施政纲领
- 游戏规则用pygame动画实现神庙逃亡类似的小游戏,当玩家移动的时候躲避 * ,如果 * 命中玩家或者名字龙都会减速,玩家躲避 * 使更多的 * 打
- 之前的笔记里实现了softmax回归分类、简单的含有一个隐层的神经网络、卷积神经网络等等,但是这些代码在训练完成之后就直接退出了,并没有将训
- 以前看到 andy的关于“Quiet Structure”觉的很不错,于是今天到她的个人站点上逛逛,发现不少好的文章,今天介绍的是
- CentOS6.9+Mysql5.7.18源码安装,以下操作均在root用户下执行。1、安装依赖工具cmake make3.75+ gcc4