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 相关文章推荐
document.getElementById方法在Firefox与IE中的区别
May 18 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
Sep 12 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
Jul 20 Javascript
js正文内容高亮效果的实现方法
Jun 30 Javascript
jquery选择器之基本过滤选择器详解
Jan 27 Javascript
js获得页面的高度和宽度的方法
Feb 23 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
Jan 05 Javascript
axios基本入门用法教程
Mar 25 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
Jul 22 Javascript
js回调函数仿360开机
Dec 26 Javascript
使用preload预加载页面资源时注意事项
Feb 03 Javascript
如何在vue中使用HTML 5 拖放API
Jan 14 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
PHP number_format() 函数定义和用法
2012/06/01 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
Javascript 遍历对象中的子对象
2009/07/03 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
python进阶教程之循环对象
2014/08/30 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
一文了解Python并发编程的工程实现方法
2019/05/31 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
python遍历路径破解表单的示例
2020/11/21 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
室内设计专业个人的自我评价
2013/10/19 职场文书
公司年会晚宴演讲稿
2014/01/06 职场文书
班组建设经验交流材料
2014/05/12 职场文书
春节联欢会策划方案
2014/05/16 职场文书
论文致谢词范文
2015/05/14 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
python for循环赋值问题
2021/06/03 Python
基于JavaScript实现年月日三级联动
2021/06/22 Javascript