微信小程序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 相关文章推荐
document.getElementById方法在Firefox与IE中的区别
May 18 Javascript
JS在textarea光标处插入文本的小例子
Mar 22 Javascript
Javascript 垃圾收集机制介绍理解
May 14 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
Jun 16 Javascript
jQuery控制TR显示隐藏的三种常用方法
Aug 21 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
Sep 23 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
Mar 30 Javascript
修改node.js默认的npm安装目录实例
May 15 Javascript
node.js实现微信开发之获取用户授权
Mar 18 Javascript
移动端吸顶fixbar的解决方案详解
Jul 17 Javascript
为react组件库添加typescript类型提示的方法
Jun 15 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
Nov 24 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
个人站长制做网页常用的php代码
2007/03/03 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python的多维空数组赋值方法
2018/04/13 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
Python进度条的制作代码实例
2019/08/31 Python
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
英语简历自我评价
2014/01/26 职场文书
生产车间标语
2014/06/11 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书
MySQL之DML语言
2021/04/05 MySQL
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技
vue动态绑定style样式
2022/04/20 Vue.js