微信小程序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 相关文章推荐
图片onload事件触发问题解决方法
Jul 31 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
Oct 14 Javascript
文本框输入时 实现自动提示(像百度、google一样)
Apr 05 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
Oct 18 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 Javascript
jQuery绑定事件on()与弹窗的简要概述
Apr 27 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
Sep 28 Javascript
js实现简单的网页换肤效果
Jan 18 Javascript
vue动态组件实现选项卡切换效果
Mar 08 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
Mar 21 Javascript
轻松解决JavaScript定时器越走越快的问题
May 13 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
May 29 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中date()日期函数有关参数整理
2011/07/19 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
twig模板常用语句实例小结
2016/02/04 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
python 实现让字典的value 成为列表
2019/12/16 Python
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
物理研修随笔感言
2014/02/14 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
2014年新教师工作总结
2014/11/08 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
Nginx解决403 forbidden的完整步骤
2021/04/01 Servers
python playwrigh框架入门安装使用
2022/07/23 Python