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 相关文章推荐
用正则表达式 动态创建/增加css style script 兼容IE firefox
Mar 10 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
Apr 01 Javascript
jquery插件开发之实现google+圈子选择功能
Mar 10 Javascript
jquery中map函数遍历数组用法实例
May 18 Javascript
jQuery实现分隔条左右拖动功能
Nov 21 Javascript
jQuery语法小结(超实用)
Dec 31 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
Nov 29 Javascript
AngularJS表单验证功能
Oct 19 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
Oct 24 Javascript
关于redux-saga中take使用方法详解
Feb 27 Javascript
在vue中使用jointjs的方法
Mar 24 Javascript
详解CocosCreator消息分发机制
Apr 16 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判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
2009/11/12 Javascript
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
Javascript 面向对象之重载
2010/05/04 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
在Python中操作列表之list.extend()方法的使用
2015/05/20 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
基于python实现模拟数据结构模型
2020/06/12 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
高中生物教学反思
2014/02/05 职场文书
员工生日活动方案
2014/08/24 职场文书
婚前财产协议书范本
2014/10/19 职场文书
刑事上诉状范文
2015/05/22 职场文书
python 对图片进行简单的处理
2021/06/23 Python
mysql配置SSL证书登录的实现
2021/09/04 MySQL