微信小程序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中的$(document).ready()与window.onload的区别
Nov 18 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
Apr 18 Javascript
JQuery实现table行折叠效果以JSON做数据源
May 26 Javascript
javascript setinterval 的正确语法如何书写
Jun 17 Javascript
jQuery中next()方法用法实例
Jan 07 Javascript
javascript中传统事件与现代事件
Jun 23 Javascript
JavaScript与ActionScript3两者的同性与差异性
Sep 22 Javascript
JavaScript九九乘法口诀表的简单实现
Oct 04 Javascript
微信小程序如何获知用户运行小程序的场景教程
May 17 Javascript
AngularJS全局警告框实现方法示例
May 18 Javascript
详解一个基于react+webpack的多页面应用配置
Jan 21 Javascript
关于vue属性使用和不使用冒号的区别说明
Oct 22 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小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
实例详解JSON取值(key是中文或者数字)方式
2017/08/24 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
python多进程操作实例
2014/11/21 Python
简介Django中内置的一些中间件
2015/07/24 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
简单谈谈Python流程控制语句
2016/12/04 Python
Python内存映射文件读写方式
2020/04/24 Python
python cookie反爬处理的实现
2020/11/01 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
武汉东之林科技有限公司机试
2013/09/17 面试题
大客户销售经理职责
2013/12/04 职场文书
迷你西餐厅创业计划书范文
2013/12/31 职场文书
团结演讲稿范文
2014/05/23 职场文书
法院授权委托书范文
2014/08/02 职场文书
2016党校培训心得体会
2016/01/07 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
Python加密技术之RSA加密解密的实现
2022/04/08 Python