微信小程序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 相关文章推荐
[原创]网络复制内容时常用的正则+editplus
Nov 30 Javascript
JavaScript 基础知识 被自己遗忘的
Oct 15 Javascript
jQuery ready函数滥用分析
Feb 16 Javascript
jQuery动态修改超链接地址的方法
Feb 13 Javascript
让图片跳跃起来  javascript图片轮播特效
Feb 16 Javascript
使用BootStrap进行轮播图的制作
Jan 06 Javascript
详解React之父子组件传递和其它一些要点
Jun 25 Javascript
JS使用Date对象实时显示当前系统时间简单示例
Aug 23 Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 Javascript
Emberjs 通过 axios 下载文件的方法
Sep 03 Javascript
node.JS路径解析之PATH模块使用方法详解
Feb 06 Javascript
Javascript Web Worker使用过程解析
Mar 16 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中使用Oracle数据库(5)
2006/10/09 PHP
php输入流php://input使用浅析
2014/09/02 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
jquery 插件开发方法小结
2009/10/23 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
AngularJS 表单验证手机号的实例(非必填)
2017/11/12 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
go和python变量赋值遇到的一个问题
2017/08/31 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
详解python变量与数据类型
2020/08/25 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
英国网上电器商店:Electricshop
2020/03/15 全球购物
linux面试题参考答案(1)
2016/01/22 面试题
电话销售经理岗位职责
2013/12/07 职场文书
旅游网创业计划书
2014/01/31 职场文书
投资协议书范本
2014/04/21 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
食品质检员岗位职责
2015/04/08 职场文书
一般纳税人申请报告
2015/05/18 职场文书