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


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 相关文章推荐
Jquery知识点二 jquery下对数组的操作
Jan 15 Javascript
js中哈希表的几种用法总结
Jan 28 Javascript
js判断当前浏览器类型,判断IE浏览器方法
Jun 02 Javascript
使用Sticker.js实现贴纸效果
Jan 28 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
Jul 29 Javascript
jQuery点击输入框显示验证码图片
May 19 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
Oct 09 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
Oct 20 Javascript
three.js中文文档学习之如何本地运行详解
Nov 20 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
Dec 02 Javascript
详解vue 自定义marquee无缝滚动组件
Apr 09 Javascript
跟混乱的页面弹窗说再见
Apr 11 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
php中用foreach来操作数组的代码
2011/07/17 PHP
php ios推送(代码)
2013/07/01 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
Js基础学习资料
2010/11/23 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
python正则表达式re模块详细介绍
2014/05/29 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
大专学生推荐信范文
2013/11/19 职场文书
技术总监管理职责范本
2014/03/06 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
领导干部失职检讨书
2015/05/05 职场文书
地心历险记观后感
2015/06/15 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android