微信小程序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 相关文章推荐
6个DIV 135或246间隔一秒轮番显示效果
Jul 24 Javascript
用原生js做个简单的滑动效果的回到顶部
Oct 15 Javascript
javascript实现数组去重的多种方法
Mar 14 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
May 30 Javascript
Bootstrap下拉菜单样式
Feb 07 Javascript
微信小程序本作用域下调用全局JS详解及实例
Feb 22 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
Apr 13 Javascript
VUE 使用中踩过的坑
Feb 08 Javascript
用p5.js制作烟花特效的示例代码
Mar 21 Javascript
jQuery-ui插件sortable实现自由拖动排序
Dec 01 jQuery
node实现socket链接与GPRS进行通信的方法
May 20 Javascript
jquery实现简单每周轮换的日历
Sep 10 jQuery
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获取服务器时间的实现代码
2013/06/07 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
详解JavaScript 浮点数运算的精度问题
2019/07/23 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
Python编程之Re模块下的函数介绍
2017/10/28 Python
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
python画环形图的方法
2020/03/25 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
什么是java序列化,如何实现java序列化
2012/11/14 面试题
公司JAVA开发面试题
2015/04/02 面试题
一套中级Java程序员笔试题
2015/01/14 面试题
大学生简历的个人自我评价
2013/12/04 职场文书
八年级语文教学反思
2014/02/11 职场文书
好人好事事迹材料
2014/02/12 职场文书
优秀党员先进材料
2014/12/18 职场文书
行政上诉状范文
2015/05/23 职场文书
工作证明格式范文
2015/06/15 职场文书
婚育证明样本
2015/06/16 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL