JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)


Posted in Javascript onAugust 16, 2017

今天做到了一个联系人列表的需求, 要求和微信的一样! 写出来分享给大家, 使用了jq和doT模版引擎

JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)

首先对数据源进行数据排序

// 数据排序
 function sortData(data) {
  var letterArr = [];
  for (var i = 0; i < data.length; i++) {
   for (var j = 0; j < data.length; j++) {
    if (data[i].flag < data[j].flag) {
     var temp = data[i];
     data[i] = data[j];
     data[j] = temp;
    }
   }
   }
   if (f_check_uppercase(data[0].flag)) {
   letterArr.push(data[0].flag)
   } else {
   letterArr.push('#')
   }
  for (var i = 0; i < data.length; i++) {
   if(f_check_uppercase(data[0].flag)) {
    data[0].flagLetter = data[0].flag
   } else {
    data[0].flagLetter = '#'
   }
   if (i>0) {
    if (data[i].flag !== data[i-1].flag) {
     if (f_check_uppercase(data[i].flag)) {
      data[i].flagLetter = data[i].flag;
      letterArr.push(data[i].flag)
     } else {
      data[i].flagLetter = '#';
      letterArr.push('#')
     }
    }
   }
   }
// 侧边栏
   var str = '' ;
   for (var i = 0; i < letterArr.length; i++) {
   str += '<a ontouchstart="anchorJump(this)" >'+ letterArr[i] +'</a>'
   }
   $('.slidePage div').html(str)
   $('.resultList').html(doT.template($('#listT').text())(data))
 }
 // 判断是否是字母
 function f_check_uppercase(obj) {
  if (/[A-Z]/.test(obj)) { 
   return true; 
  } 
  return false; 
 }

然后是跳转锚点

location.hash = '#id' 和a标签的作用相同, 跳转到指定锚点

// 跳转锚点
 function anchorJump(n) {
  var text = $(n).text();
  if (text.length < 2) {
   $('.letter').text(text)
   $('.letter').css({'opacity':' 1'})
   location.hash = '#' + text
  }
 }

手指滑动, 页面跳转

// 手指滑动
 function move() {
  // 阻止默认事件, 页面滑动
  event.preventDefault();
  anchorJump(document.elementFromPoint(event.changedTouches[0].clientX,event.changedTouches[0].clientY))
 }

document.elementFromPoint(x,y) 获取指定坐标的顶层元素

最后滑动结束, 手指离开屏幕

// 滑动结束
 function touchEnd() {
  var opcityNum = 1;
  setInterval(function () {
   opcityNum -= 0.1;
   if (opcityNum > 0) {
    $('.letter').css({'opacity': opcityNum})
   } else {
    clearInterval();
   }
  },50)
 }

点击每条数据

// 点击事件
 function clickInfo(ele) {
  alert($(ele).find('.name').text())
 }

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助~如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持!

Javascript 相关文章推荐
javascript onmouseout 解决办法
Jul 17 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
Jul 01 Javascript
jQuery中:contains选择器用法实例
Dec 30 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
May 21 Javascript
JavaScript禁止用户多次提交的两种方法
Jul 24 Javascript
微信小程序进行微信支付的步骤昂述
Dec 01 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
Feb 14 Javascript
JavaScript 实现 Tab 点击切换实例代码
Mar 25 Javascript
Vue组件实例间的直接访问实现代码
Aug 20 Javascript
通过js控制时间,一秒一秒自己动的实例
Oct 25 Javascript
解决LayUI数据表格复选框不居中显示的问题
Sep 25 Javascript
vue全局使用axios的操作
Sep 08 Javascript
理解 Node.js 事件驱动机制的原理
Aug 16 #Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
Aug 16 #Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
Aug 16 #Javascript
vue实现留言板todolist功能
Aug 16 #Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
Aug 16 #Javascript
vue的事件绑定与方法详解
Aug 16 #Javascript
vue父组件通过props如何向子组件传递方法详解
Aug 16 #Javascript
You might like
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
python验证码识别的示例代码
2017/09/21 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
python中pip的安装与使用教程
2018/08/10 Python
Tensorflow 实现释放内存
2020/02/03 Python
Selenium启动Chrome时配置选项详解
2020/03/18 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
应用数学自荐书范文
2013/11/24 职场文书
销售演讲稿范文
2014/01/08 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
2014年大学班长工作总结
2014/11/14 职场文书
简历自荐信范文
2015/03/09 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书