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 相关文章推荐
那些年,我还在学习jquery 学习笔记
Mar 05 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
JavaScript电子时钟倒计时
Jan 09 Javascript
原生js制作日历控件实例分享
Apr 06 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
Jul 11 Javascript
JS使用贪心算法解决找零问题示例
Nov 27 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
Mar 08 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
Aug 10 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
Aug 31 Javascript
vue实现点击选中,其他的不选中方法
Sep 05 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
JS中的防抖与节流及作用详解
Apr 01 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
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
学习Vue组件实例
2018/04/28 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
详解nodejs http请求相关总结
2019/03/31 NodeJs
JS定义函数的几种常用方法小结
2019/05/23 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
python使用心得之获得github代码库列表
2014/06/25 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
利用python进行文件操作
2020/12/04 Python
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
客服实习的个人自我鉴定
2013/10/20 职场文书
服装设计专业毕业生推荐信
2013/11/09 职场文书
工程招投标邀请书
2014/01/30 职场文书
消防安全检查制度
2014/02/04 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
幼儿园安全责任书
2014/04/14 职场文书
国际会计专业求职信
2014/08/04 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
教师自荐信范文
2015/03/06 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
个人合作协议范本
2015/08/06 职场文书
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android
Django框架中视图的用法
2022/06/10 Python