微信小程序scroll-view组件实现滚动动画


Posted in Javascript onJanuary 31, 2018

本文实例为大家分享了scroll-view组件实现索引列表滚动动画效果,供大家参考,具体内容如下

效果图

实现原理

利用scroll-view的scroll-into-view属性进行定位;
利用scroll-view的scroll-with-animation属性实现滚动动画过度。

WXML

<view class="right-nav">
  <view bindtap="getCurrentCode" class="{{chooseIndex == index ? '.city-list-active' : ''}}" wx:for="{{cityList}}" style="height:{{codeHeight}}px" data-code="{{item.code}}" data-index="{{index}}">
  {{item.code}}
  </view>
</view>

<view class="city-layer {{isShowLayer ? '' : 'layer-hide'}}">
 {{codeY}}
</view>

<view class="current-choose-city">当前选择机场:{{chooseCity}}</view>
<scroll-view class="city-scroll" scroll-y="true" scroll-into-view="{{codeY}}" scroll-with-animation="true" style="height:{{cityHeight}}px" bindscroll="scroll">
  <view class="city-box" wx:for="{{cityList}}" wx:key="{{item.code}}">
    <view class="city-code" id="{{item.code}}">{{item.code}}</view>
    <view class="city-list" wx:for="{{item.cityList}}" wx:for-item="city" bindtap="getChooseCity" data-city="{{city}}"> 
       {{city}} 
    </view> 
  </view>
</scroll-view>

WXSS

.current-choose-city{
 position: fixed;
 width: 100%;
 height: 50px;
 line-height: 50px;
 padding: 0 10px;
 top: 0;
 left: 0;
 background-color: #fff;
 z-index: 10;
}
.right-nav{
 width: 30px;
 color: #888;
 text-align: center;
 position: fixed;
 bottom: 0;
 right: 0;
 background-color: rgb(200, 200, 200);
 z-index: 9;
}
.city-scroll{padding-top: 50px;}
.city-code{
 background-color: #f7f7f7;
}
.city-list,.city-code{
 height: 39px;
 line-height: 40px;
 padding: 0 30px 0 10px;
 overflow: hidden;
 border-bottom: 1px solid #c8c7cc;
}
.city-list-active{color:#007aff;}

/*提示点击的字母 */
.city-layer{
 width: 70px;
 height: 70px;
 line-height: 70px;
 text-align: center;
 border-radius: 50%;
 color: #fff;
 background-color: rgba(0, 0, 0, .7);
 position: fixed;
 top: calc(50% - 35px);
 left:calc(50% - 35px);
 z-index: 11;
}
.layer-hide{display: none;}

JS

var city_list = require('./city.js');

Page({
 data: {
  cityList: city_list.city,
  chooseCity: '您还未选择机场!',
  isShowLayer: false,
  chooseIndex: 0,
  codeY: 'A',
  codeHeight: null,
  cityHeight:null
 },
 onLoad (options) {
  var windowHeight = wx.getSystemInfoSync().windowHeight;
  this.setData({ 
   codeHeight: (windowHeight - 50) / this.data.cityList.length,
   cityHeight: windowHeight - 50,
  });
 },
 getCurrentCode(e){
  var self = this;
  this.setData({ 
   codeY: e.target.dataset.code,
   chooseIndex: e.target.dataset.index,
   isShowLayer: true 
  })
  setTimeout(() => {
   self.setData({ isShowLayer: false })
  },500);
 },
 getChooseCity(e){
  this.setData({ chooseCity: e.target.dataset.city });
 }
})

对比

对比结果总结

  • 由于scroll-view的scroll-into-view属性是滚动到指定id位置,所以,在列表的字母行加上id属性;
  • 由于scroll-view的scroll-into-view属性实现了滚动到指定位置,所以减少了scrollTop的计算;
  • 由于scroll-view的scroll-with-animation属性,实现了滚动动画过度效果;
  • 减少了计算scrollTop的循环消耗;
  • js代码量减少,减少this.setData方法的变量设置。

DEMO下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用非html5实现js板连连看游戏示例代码
Sep 22 Javascript
js为空或不是对象问题的快速解决方法
Dec 11 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 Javascript
AngularJS基础 ng-options 指令详解
Aug 02 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
Aug 05 Javascript
Angular的$http的ajax的请求操作(推荐)
Jan 10 Javascript
swiper 解决动态加载数据滑动失效的问题
Feb 26 Javascript
解决layui 复选框等内置控件不显示的问题
Aug 14 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
Apr 07 Javascript
Vue Autocomplete 自动完成功能简单示例
May 25 Javascript
React 条件渲染最佳实践小结(7种)
Sep 27 Javascript
JavaScript实现两个数组的交集
Mar 25 Javascript
微信小程序实现全国机场索引列表
Jan 31 #Javascript
微信小程序radio组件使用详解
Jan 31 #Javascript
微信小程序checkbox组件使用详解
Jan 31 #Javascript
原生JS实现多个小球碰撞反弹效果示例
Jan 31 #Javascript
浅析Angular19 自定义表单控件
Jan 31 #Javascript
JavaScript实现计算多边形质心的方法示例
Jan 31 #Javascript
微信小程序switch开关选择器使用详解
Jan 31 #Javascript
You might like
ASP知识讲座四
2006/10/09 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
Javascript中的相等与不等运算
2010/04/25 Javascript
js 函数的副作用分析
2011/08/23 Javascript
js实现一键复制功能
2017/03/16 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
2019/04/25 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
初步解析Python中的yield函数的用法
2015/04/03 Python
Python生成器(Generator)详解
2015/04/13 Python
Python栈类实例分析
2015/06/15 Python
python实现linux下使用xcopy的方法
2015/06/28 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
Pytorch mask-rcnn 实现细节分享
2020/06/24 Python
关于赌博的检讨书
2014/01/24 职场文书
推荐信怎么写
2014/05/09 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
店面出租协议书范本
2014/11/28 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
土地租赁协议书
2015/01/29 职场文书
外贸业务员岗位职责
2015/02/13 职场文书
2015年幼师工作总结
2015/04/28 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
门面租赁合同范文
2019/08/06 职场文书
python执行js代码的方法
2021/05/13 Python
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS