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_15_作用域分配与变量访问规则,再送个闭包
Oct 20 Javascript
javascript模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
js采用map取到id集合组并且实现点击一行选中一行
Dec 16 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
Feb 22 Javascript
JQuery中serialize() 序列化
Mar 13 Javascript
JavaScript编写九九乘法表(两种任选)
Feb 04 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
Dec 11 Javascript
vue-test-utils初使用详解
May 23 Javascript
VUE项目初建和常见问题总结
Sep 12 Javascript
javascript 对象 与 prototype 原型用法实例分析
Nov 11 Javascript
详解webpack的clean-webpack-plugin插件报错
Oct 16 Javascript
vant 中van-list的用法说明
Nov 11 Javascript
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
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
input框中的name和id的区别
2016/11/16 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
常用的javascript设计模式
2017/01/11 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
jQuery.Ajax()的data参数类型详解
2017/07/23 jQuery
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
Python实现随机漫步功能
2018/07/09 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
印度在线购物网站:Paytmmall
2019/07/24 全球购物
优秀的计算机专业求职信范文
2013/12/27 职场文书
生日派对邀请函
2014/01/13 职场文书
党员干部承诺书
2014/03/25 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
2014年减负工作总结
2014/12/10 职场文书
护士自荐信范文
2015/03/25 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
小学语文国培研修日志
2015/11/13 职场文书
2016继续教育研修日志
2015/11/13 职场文书
解决pytorch读取自制数据集出现过的问题
2021/05/31 Python