微信小程序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 相关文章推荐
Jquery乱码的一次解决过程 图解教程
Feb 20 Javascript
js输入框邮箱自动提示功能代码实现
Dec 10 Javascript
js捕获鼠标滚轮事件代码
Dec 16 Javascript
express的中间件basicAuth详解
Dec 04 Javascript
深入分析JSON编码格式提交表单数据
Jun 25 Javascript
jQuery实现两款有动画功能的导航菜单代码
Sep 16 Javascript
JS 中LocalStorage和SessionStorage的使用
Aug 17 Javascript
Vue服务器渲染Nuxt学习笔记
Jan 31 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
Oct 08 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
Apr 14 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
Apr 28 Javascript
Vue中正确使用Element-UI组件的方法实例
Oct 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地址自定义函数分享
2014/12/29 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
python使用magic模块进行文件类型识别方法
2018/12/08 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
python代码能做成软件吗
2020/07/24 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
学生安全教育材料
2014/02/14 职场文书
小学生手册家长评语
2014/04/16 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
家长会主持词开场白
2015/05/29 职场文书
销售口号霸气押韵
2015/12/24 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python