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 相关文章推荐
接收键盘指令的脚本
Jun 26 Javascript
javascript编程起步(第六课)
Feb 27 Javascript
用js生产批量批处理执行命令
Jul 28 Javascript
让AJAX不依赖后端接口实现方案
Dec 03 Javascript
js去除空格的12种实用方法
Nov 08 Javascript
JS自调用匿名函数具体实现
Feb 11 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
Aug 08 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
Mar 01 Javascript
JS如何设置元素样式的方法示例
Aug 28 Javascript
vue接入腾讯防水墙代码
May 07 Javascript
vue绑定数字类型 value为数字的实例
Aug 31 Javascript
vue router返回到指定的路由的场景分析
Nov 10 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版本不同可能诱发的问题
2015/12/22 PHP
phalcon框架使用指南
2016/02/23 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
python:动态路由的Flask程序代码
2019/11/22 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
音乐教师个人总结
2015/02/06 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python