微信小程序CSS3动画下拉菜单效果


Posted in Javascript onNovember 04, 2018

微信小程序没有自带的下拉菜单组件,因此我们需要自己需要写一个

思路

利用列表来存储菜单项,在外面套一个view元素作为外框,将其设置为overflow:hidden,使用CSS3动画逐渐改变外层view元素的高度,当高度为0时,里面嵌套的列表元素被完全隐藏,相当于菜单关闭。而当view元素的高度大于列表元素的高度时,相当于菜单显示。

效果图

微信小程序CSS3动画下拉菜单效果

wxml

button按钮用于触发菜单的打开和关闭,first_click参数使用户第一次点击按钮之前菜单不可见,state参数用于控制菜单的打开和关闭状态

<view id="text_box">
   <text decode='true'> 历 史 记 录</text>
</view>
<button id="slide" bindtap="toggle">?</button>
<view id="box" class="{{first_click?'show':'hide'}} {{state?'open':'close'}}">
   <view id="item_list">
      <view>111</view>
      <view>222</view>
      <view>333</view>
   </view>
</view>

css

使用@keyframes动画实现菜单的渐变打开和关闭动画

#box{
 width: 100%;
 border-top: 1px solid #ddd;
 overflow: hidden;
 height: 0;
 animation-fill-mode: forwards;
}

#item_list{
  background-color: white;
  width: 100%;
}

#item_list view{
  text-align: right;
  overflow: auto;
  white-space: nowrap;
}

@keyframes slidedown{
  from {
    height: 0;
  }
  to {
    height: 240rpx;
  }
}

@keyframes slideup{
  from {
    height: 240rpx;
  }
  to {
    height: 0;
  }
}

.open{
  animation: slidedown 1s;
}

.close{
  animation: slideup 1s; 
}

.hide{
  display: none;
}

.show{
  display: block;
}

js

页面加载完成时,菜单初始状态为隐藏和关闭,用户一旦点击按钮,菜单就显示,并逐渐打开

data: {
  state:false,
  first_click:false,
 },

 toggle: function(){
   var list_state = this.data.state,
     first_state = this.data.first_click;
   if (!first_state){
     this.setData({
      first_click: true
     });
   }
   if (list_state){
     this.setData({
      state: false
     });
   }else{
     this.setData({
      state: true
     });
   }
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript[js]获取url参数的代码
Oct 17 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 Javascript
js jquery获取随机生成id的服务器控件的三种方法
Jul 11 Javascript
jquery mobile实现拨打电话功能的几种方法
Aug 05 Javascript
javascript定义变量时有var和没有var的区别探讨
Jul 21 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
Jan 13 Javascript
js中创建对象的几种方式
Feb 05 Javascript
JS回调函数简单用法示例
Feb 09 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
Sep 14 Javascript
微信小程序封装自定义弹窗的实现代码
May 08 Javascript
JS操作json对象key、value的常用方法分析
Oct 29 Javascript
vue 点击其他区域关闭自定义div操作
Jul 17 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
Nov 04 #Javascript
浅谈React碰到v-if
Nov 04 #Javascript
微信小程序实现顶部下拉菜单栏
Nov 04 #Javascript
微信小程序使用template标签实现五星评分功能
Nov 03 #Javascript
基于Vue-cli快速搭建项目的完整步骤
Nov 03 #Javascript
微信小程序实现笑脸评分功能
Nov 03 #Javascript
小程序实现五星点评效果
Nov 03 #Javascript
You might like
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
PHP在线书签系统分享
2016/01/04 PHP
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
C#基础面试题
2016/10/17 面试题
车辆安全检查制度
2014/01/12 职场文书
优秀语文教师事迹
2014/05/18 职场文书
村级个人对照检查材料
2014/08/22 职场文书
见义勇为事迹材料
2014/12/24 职场文书
运动会宣传稿100字
2015/07/23 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
python中pandas对多列进行分组统计的实现
2021/06/18 Python
nginx结合openssl实现https的方法
2021/07/25 Servers
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript