微信小程序开发之好友列表字母列表跳转对应位置


Posted in Javascript onSeptember 26, 2017

微信小程序开发之好友列表字母列表跳转对应位置

前言:

在小程序里实现微信好友列表点击右侧字母列表跳转对应位置效果。写了个demo,核心部分很简单,所以没多少注释,如果遇到问题就加群问我吧。

核心技术点:

1、小程序scroll-view组件的scroll-into-view, scroll-with-animation. scroll-y属性。
2、小程序的touch事件的应用。
3、Js定时器的应用。

view页面代码:

index.wxml

class="container" scroll-y>
  class="info" id="info" scroll-with-animation scroll-y scroll-top="200" scroll-into-view="{{toView}}" style="height:{{height}}px;">
   class="iitem" id="{{item.id}}" wx:for="{{info_list}}" wx:key="1">
   {{item.id}} . {{item.desc}}
  
 
  class="letter {{active == true ? 'active': ''}}" bindtouchstart='start' bindtouchmove='move' bindtouchend='end'>
   class="litem" bindtap='down' data-index="999">☆
   class="litem" wx:for="{{letter_list}}" bindtap='down' wx:for-index="index" wx:key="2" data-index="{{index}}" style="height: {{letter_height}}px;">{{item}}
 
 class="tips" hidden="{{hide}}">{{curView}}

js代码:

index.js

//index.js
//获取应用实例
const app = getApp()
Page({
 data: {
  letter_list: [],
  info_list: [],
  hide: true,
  active: false,
  toView: 'A',
  curView: 'A',
  letter_height: 18
 },
 onLoad: function () {
  this.active = false;
  this.timer = null;
  var letter_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
  var info_list = [];
  for (var i = 0; i < 26; i++) {
   var obj = {};
   obj.id = letter_list;
   obj.desc = '这是一个用于测试的DEMO。1.目标是用于实现微信好友列表的点击首字母跳转到对应好友位置。2.目标是用于实现微信好友列表的点击首字母跳转到对应好友位置';
   info_list.push(obj);
  }
  this.setData({
   height: app.globalData.height,
   info_list: info_list,
   letter_list: letter_list,
   sHeight: 100 * 26 + 25
  });
 },
 start: function (e) {
  this.setData({
   active: true,
   hide: false
  })
 },
 end: function (e) {
  if (this.timer) {
   clearTimeout(this.timer);
   this.timer = null;
  }
  var moveY = e.changedTouches["0"].clientY - 18, that = this;
  var curIndex = parseInt(moveY / 18);
  var view = this.data.letter_list[curIndex];
  this.setData({
   toView: view,
   active: false
  });
  if (!this.timer) {
   this.timer = setTimeout(function () {
    that.setData({
     hide: true
    })
    that.timer = null;
   }, 1000);
  }
 },
 move: function (e) {
  var moveY = e.changedTouches["0"].clientY - 18;
  var curIndex = parseInt(moveY / 18);
  var view = this.data.letter_list[curIndex];
  this.setData({
   curView: view
  })
 },
 down: function (e) {
  if (this.timer) {
   clearTimeout(this.timer);
   this.timer = null;
  }
  var index = e.currentTarget.dataset.index,
   that = this;
  if (index != 999) {
   var view = this.data.letter_list[index];
   this.setData({
    toView: view,
    curView: view
   })
  } else {
   this.setData({
    toView: 'A',
    curView: '☆'
   })
  }
  if (!this.timer) {
   this.timer = setTimeout(function () {
    that.setData({
     hide: true
    });
    that.timer = null;
   }, 1000);
  }
 }
})

样式部分

index.wxss

/**index.wxss**/
text {
 font-weight: bold
}
.letter {
 font-size: 12px;
 width: 24px;
 height: 100%;
 position: fixed;
 right: 0;
 top: 0;
 z-index: +999;
}
.litem {
 width: 24px;
 height: 18px;
 line-height: 18px;
 text-align: center;
}
.info {
 font-size: 12px;
 text-align: justify;
 overflow: hidden;
}
.active {
 background: rgba(0, 0, 0, 0.2);
}
.iitem {
 padding: 10rpx 10rpx;
 margin-bottom: 10rpx;
 border-radius: 8rpx;
 background: rgba(222,222,222,0.2);
 box-sizing: border-box;
}
.tips {
 width: 40px;
 height: 40px;
 background: rgba(0,0,0,0.4);
 font-size: 20px;
 text-align: center;
 line-height: 40px;
 color: #fff;
 position: fixed;
 left: 50%;
 top: 50%;
 margin: -20px;
 z-index: +999;
 border-radius: 10rpx;

如有疑问请留言或者到本站社区交流讨论,本站关于微信小程序的文章还有很多,希望大家搜索查阅,感谢阅读,希望能帮助到大家谢谢大家对本站的支持!

Javascript 相关文章推荐
prototype Element学习笔记(Element篇三)
Oct 26 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
Sep 14 Javascript
JS根据生日算年龄的方法
May 05 Javascript
jQuery实现的图文高亮滚动切换特效实例
Aug 10 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
Aug 15 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
Apr 01 Javascript
Javascript中的迭代、归并方法详解
Jun 14 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
vue-infinite-loading2.0 中文文档详解
Apr 08 Javascript
vue 监听屏幕高度的实例
Sep 05 Javascript
微信小程序时间选择插件使用详解
Dec 28 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
Oct 30 Javascript
深入理解Vuex 模块化(module)
Sep 26 #Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
Sep 26 #Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
Sep 26 #jQuery
Vue from-validate 表单验证的示例代码
Sep 26 #Javascript
微信小程序之蓝牙的链接
Sep 26 #Javascript
jQuery EasyUI Layout实现tabs标签的实例
Sep 26 #jQuery
jQuery EasyUI开发技巧总结
Sep 26 #jQuery
You might like
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
2014/06/05 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
Vue系列:通过vue-router如何传递参数示例
2017/01/16 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
VUE长按事件需求详解
2017/10/18 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
js实现小时钟效果
2020/03/25 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
python多进程共享变量
2016/04/06 Python
Python切换pip安装源的方法详解
2016/11/18 Python
python 解压pkl文件的方法
2018/10/25 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
纯css3实现照片墙效果
2014/12/26 HTML / CSS
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
哈弗商学院毕业生求职信
2014/02/26 职场文书
家长会学生演讲稿
2014/04/26 职场文书
大学生活动总结模板
2014/07/02 职场文书
刑事法律意见书
2015/06/04 职场文书
安全教育片观后感
2015/06/17 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript