微信小程序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 相关文章推荐
合并table相同单元格的jquery插件分享(很精简)
Jun 20 Javascript
基于jquery的大众点评,分类导航实现代码
Aug 23 Javascript
jQuery制作拼图小游戏
Jan 12 Javascript
使用微信小程序开发前端【快速入门】
Dec 05 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
Apr 27 Javascript
使用jQuery实现动态添加小广告
Jul 11 jQuery
详解vue移动端项目的适配(以mint-ui为例)
Aug 17 Javascript
js字符串处理之绝妙的代码
Apr 05 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
Aug 14 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
Feb 16 Javascript
angular共享依赖的解决方案分享
Oct 15 Javascript
vue项目开启Gzip压缩和性能优化操作
Oct 26 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来实现网络服务
2009/09/15 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
Javascript this指针
2009/07/30 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
python生成word合同的实例方法
2021/01/12 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
用CSS3实现无限循环的无缝滚动的示例代码
2017/11/01 HTML / CSS
印度低票价航空公司:GoAir
2017/10/11 全球购物
母亲节感恩活动记录
2014/03/16 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
春节慰问信范文
2015/02/15 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
Nginx配置Https安全认证的实现
2021/05/26 Servers
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js