Vue 实现展开折叠效果的示例代码


Posted in Javascript onAugust 27, 2018

本文介绍了Vue 实现展开折叠效果的示例代码,分享给大家,具体如下:

效果如见:

Vue 实现展开折叠效果的示例代码

1.html代码

<!DOCTYPE html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>js文本段落展开和收拢效果</title>
  <script type="text/javascript" src="https://3water.com/ajaxjs/jquery-1.6.2.min.js"></script>
</head>
<body>
  <div id="container"> 
 <div id="wrap">
 <div>
    <h1>这一段文字是可以折叠展开的,点击下面的“更多”就可以展开,点击下面的“折叠”就可以折叠</h1>
 </div>
 </div>
 <div id="read-more"></div>
  </div>
</body>
 </html>

2.js代码,最关键的

$(function() {
 var slideHeight = 45; // px 定义折叠的最小高度
 var defHeight = $('#wrap').height();
 if(defHeight >= slideHeight) {
 $('#wrap').css('height', slideHeight + 'px');
 $('#read-more').append('<a href="#" rel="external nofollow" >更多</a>');
 $('#read-more a').click(function() {
  var curHeight = $('#wrap').height();
  if(curHeight == slideHeight) {
  $('#wrap').animate({
   height: defHeight
  }, "normal");
  $('#read-more a').html('折叠');
  } else {
  $('#wrap').animate({
   height: slideHeight
  }, "normal");
  $('#read-more a').html('更多');
  }
  return false;
 });
 }
});

3.css代码

#container {
 margin: 0 auto;
 width: 600px;
 border: 1px solid #3bb2d0;
}
 
#wrap {
 position: relative;
 padding: 10px;
 overflow: hidden;
}
 
#read-more {
 padding: 5px;
 background: #fff;
 color: #333;
}
 
#read-more a {
 padding-right: 22px;
 no-repeat 100% 50%;
 font-weight: bold;
 text-decoration: none;
}
 
#read-more a: hover {
 color: #000;
}

除了使用jQuery的方式实现上述效果,同样可以在Vue实现,下面是解决办法:

1、创建collapse.js文件

const elTransition =
 "0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out";
const Transition = {
 "before-enter"(el) {
  el.style.transition = elTransition;
  if (!el.dataset) el.dataset = {};

  el.dataset.oldPaddingTop = el.style.paddingTop;
  el.dataset.oldPaddingBottom = el.style.paddingBottom;

  el.style.height = 0;
  el.style.paddingTop = 0;
  el.style.paddingBottom = 0;
 },

 enter(el) {
  el.dataset.oldOverflow = el.style.overflow;
  if (el.scrollHeight !== 0) {
   el.style.height = el.scrollHeight + "px";
   el.style.paddingTop = el.dataset.oldPaddingTop;
   el.style.paddingBottom = el.dataset.oldPaddingBottom;
  } else {
   el.style.height = "";
   el.style.paddingTop = el.dataset.oldPaddingTop;
   el.style.paddingBottom = el.dataset.oldPaddingBottom;
  }

  el.style.overflow = "hidden";
 },

 "after-enter"(el) {
  el.style.transition = "";
  el.style.height = "";
  el.style.overflow = el.dataset.oldOverflow;
 },

 "before-leave"(el) {
  if (!el.dataset) el.dataset = {};
  el.dataset.oldPaddingTop = el.style.paddingTop;
  el.dataset.oldPaddingBottom = el.style.paddingBottom;
  el.dataset.oldOverflow = el.style.overflow;

  el.style.height = el.scrollHeight + "px";
  el.style.overflow = "hidden";
 },

 leave(el) {
  if (el.scrollHeight !== 0) {
   el.style.transition = elTransition;
   el.style.height = 0;
   el.style.paddingTop = 0;
   el.style.paddingBottom = 0;
  }
 },

 "after-leave"(el) {
  el.style.transition = "";
  el.style.height = "";
  el.style.overflow = el.dataset.oldOverflow;
  el.style.paddingTop = el.dataset.oldPaddingTop;
  el.style.paddingBottom = el.dataset.oldPaddingBottom;
 }
};

export default {
 name: "collapseTransition",
 functional: true,
 render(h, { children }) {
  const data = {
   on: Transition
  };
  return h("transition", data, children);
 }
};

2、在.vue组件中引入

<template>
  <div class="container">
    <button @click="isActive = !isActive">展开/折叠</button>
    <collapse>
      <div class="container" v-show="isActive">
        <h2>欢迎大家品尝Pizza!</h2>
        <h5>这里有你非常喜欢的Pizza!</h5>
      </div>
    </collapse>
  </div>
</template>
<script>
import collapse from "../assets/js/collapse.js";
export default {
 data() {
  return {
   isActive: false
  };
 },
 components: {
  collapse
 }
};
</script>

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

Javascript 相关文章推荐
JavaScript修改css样式style
Apr 15 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
Nov 01 Javascript
浏览器窗口加载和大小改变事件示例
Feb 27 Javascript
详细分析JavaScript函数定义
Jul 16 Javascript
纯JS实现表单验证实例
Dec 24 Javascript
jQuery EasyUI Draggable拖动组件
Mar 01 Javascript
jstree单选功能的实现方法
Jun 07 Javascript
详解Layer弹出层样式
Aug 21 Javascript
微信小程序模板(template)使用详解
Jan 31 Javascript
JS使用正则表达式提交页面验证的代码
Oct 16 Javascript
VUEX-action可以修改state吗
Nov 19 Javascript
vue打开其他项目页面并传入数据详解
Nov 25 Vue.js
vue.js响应式原理解析与实现
Jun 22 #Javascript
JavaScript Canvas实现验证码
Aug 02 #Javascript
JS实现方形抽奖效果
Aug 27 #Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
Aug 27 #Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
Aug 27 #Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
Aug 27 #Javascript
vue展示dicom文件医疗系统的实现代码
Aug 27 #Javascript
You might like
全文搜索和替换
2006/10/09 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
告诉大家什么是JSON
2008/06/10 Javascript
flash javascript之间的通讯方法小结
2008/12/20 Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
2018/01/22 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
低版本中Python除法运算小技巧
2015/04/05 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
对python 自定义协议的方法详解
2019/02/13 Python
Python中的整除和取模实例
2020/06/03 Python
基于python实现模拟数据结构模型
2020/06/12 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
2020/07/05 Python
cf战队收人口号
2014/06/21 职场文书
大学辅导员述职报告
2015/01/10 职场文书
催款通知书范文
2015/04/17 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
Go语言应该什么情况使用指针
2021/07/25 Golang
Mysql排序的特性详情
2021/11/01 MySQL
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android