技术难点:按住右侧indexList滑动定位,获取字母indexList的上边距 offsetTop ,按住滑动时获取手指距离屏幕顶部的距离 clientY, 手指移动距离为 moveY=clientY-offsetTop, 具体实现如下:
// 索引定位(滑动开始) @touchstart="handlerStart" handlerStart (e) { this.targetIndex = e.mp.target.id }, // 索引定位(滑动过程) @touchmove="handlerMove" handlerMove(e) { let keyList = this.keyList; // 手指滑动垂直距离 let moveY = e.mp.touches[0].clientY; let rY = moveY - this.offsetTop; if (rY >= 0) { // apHeight为字母表indexList中单个字母块高度,计算结果向上取整 let index = Math.ceil((rY - this.apHeight) / this.apHeight); if (index >= 0 && index < keyList.length) { this.targetIndex = keyList[index]; } } else { this.targetIndex = keyList[0] } },
坑
view或者text设置border-radius=50%有时候在真机会变形(排除flex布局的影响)。
wxml不支持复杂逻辑,如模版字符串,字符串截取等等。
text设置行高的时候会出现样式异常,替换成view便可解决此问题。
wx.showLoading和wx.showToast的属性title不可为空,线上会报错,影响js执行。