微信小程序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算法学习(直接插入排序)
Apr 12 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
Oct 17 Javascript
javascript中获取下个月一号,是星期几
Jun 01 Javascript
浅析return false的正确使用
Nov 04 Javascript
js实现局部页面打印预览原理及示例代码
Jul 03 Javascript
javascript实现全局匹配并替换的方法
Apr 27 Javascript
如何判断Javascript对象是否存在的简单实例
May 18 Javascript
详解Vue中过度动画效果应用
May 25 Javascript
微信小程序自定义导航隐藏和显示功能
Jun 13 Javascript
AngularJS实现表单验证功能详解
Oct 12 Javascript
关于JavaScript语句后面的分号问题
Dec 07 Javascript
Element UI 自定义正则表达式验证方法
Sep 04 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实现查询百度google收录情况(示例代码)
2013/08/02 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
微信小程序日历效果
2018/12/29 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
python正则表达式re模块详细介绍
2014/05/29 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
python mock测试的示例
2020/10/19 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
计算机专业毕业生推荐信
2013/11/25 职场文书
社区包粽子活动方案
2014/01/21 职场文书
玲玲的画教学反思
2014/02/04 职场文书
导师工作推荐信范文
2014/05/17 职场文书
学校安全生产承诺书
2014/05/23 职场文书
天猫活动策划方案
2014/08/21 职场文书
个人违纪检讨书
2014/09/15 职场文书
小鞋子观后感
2015/06/05 职场文书
《西门豹》教学反思
2016/02/23 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书