微信小程序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 相关文章推荐
Javascript 自定义类型方法小结
Mar 02 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
Oct 01 Javascript
JS求平均值的小例子
Nov 29 Javascript
js关于字符长度限制的问题示例探讨
Jan 24 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
Jun 24 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
Nov 30 Javascript
JavaScript提升性能的常用技巧总结【经典】
Jun 20 Javascript
js实现页面刷新滚动条位置不变
Nov 27 Javascript
JQuery异步提交表单与文件上传功能示例
Jan 12 Javascript
vue watch深度监听对象实现数据联动效果
Aug 16 Javascript
关于js陀螺仪的理解分析
Apr 11 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
May 28 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
PHP 错误之引号中使用变量
2009/05/04 PHP
php获取淘宝分类id示例
2014/01/16 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
php微信开发自定义菜单
2016/08/27 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中的startswith和endswith函数使用实例
2014/08/25 Python
Django日志模块logging的配置详解
2017/02/14 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
3个CCIE对一个工程师的面试题
2012/05/06 面试题
幼儿园父亲节活动方案
2014/03/11 职场文书
金融保险专业求职信
2014/09/03 职场文书
入股合作协议书
2014/10/12 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL