微信小程序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 相关文章推荐
PJ Blog修改-禁止复制的代码和方法
Oct 25 Javascript
javascript得到XML某节点的子节点个数的脚本
Oct 11 Javascript
js数组方法扩展实现数组统计函数
Apr 09 Javascript
JS实现动态生成表格并提交表格数据向后端
Nov 25 Javascript
JavaScript转换数据库DateTime字段类型方法
Jun 27 Javascript
JavaScript实现三级级联特效
Nov 05 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
Mar 13 Javascript
简单的vuex 的使用案例笔记
Apr 13 Javascript
JavaScript使用math.js进行精确计算操作示例
Jun 19 Javascript
探索JavaScript中私有成员的相关知识
Jun 13 Javascript
ES6 Array常用扩展的应用实例分析
Jun 26 Javascript
JavaScript实现模态对话框实例
Jan 13 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中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
PHP插入排序实现代码
2013/04/04 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
JS访问对象两种方式区别解析
2020/08/29 Javascript
python读取Android permission文件
2013/11/01 Python
python3编写C/S网络程序实例教程
2014/08/25 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
html5新特性与用法大全
2018/09/13 HTML / CSS
ASP.NET中的身份验证有那些
2012/07/13 面试题
省级四好少年事迹材料
2014/01/25 职场文书
运动会口号16字
2014/06/07 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
酒桌上的祝酒词
2015/08/12 职场文书