微信小程序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 相关文章推荐
fckeditor 获取文本框值的实现代码
Feb 09 Javascript
jquery 圆形旋转图片滚动切换效果
Jan 19 Javascript
javascript 学习笔记(一)DOM基本操作
Apr 08 Javascript
jquery和javascript的区别(常用方法比较)
Jul 04 Javascript
删除Javascript Object中间的key
Nov 18 Javascript
JavaScript前端图片加载管理器imagepool使用详解
Dec 29 Javascript
JavaScript中使用数组方法汇总
Feb 16 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
Jun 27 Javascript
vue 实现类似淘宝星级评分的示例
Mar 01 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
Jul 20 Javascript
vue+node 实现视频在线播放的实例代码
Oct 19 Javascript
vue实现表格合并功能
Dec 01 Vue.js
微信小程序实现全国机场索引列表
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作的文本留言本的例子(五)
2006/10/09 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
Python XML RPC服务器端和客户端实例
2014/11/22 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
python创建学生成绩管理系统
2019/11/22 Python
python实现录制全屏和选择区域录屏功能
2021/02/05 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
如何获得EntityManager
2014/02/09 面试题
酒店服务与管理毕业生求职信
2013/11/02 职场文书
高级方案规划工程师岗位职责
2013/11/29 职场文书
松材线虫病防治方案
2014/06/15 职场文书
设计专业自荐信
2014/06/19 职场文书
应届生面试求职信
2014/07/02 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
如何用Python搭建gRPC服务
2021/06/30 Python
利用js实现简单开关灯代码
2021/11/23 Javascript