vue 折叠,展开效果JS

//在当前页面导入JS文件

import collapseTransition from "./isActive";

//然后使用标签框中需要折叠,展开的内容。v-if控制。

<collapseTransition>
				<SimpleTables
					v-if="isActive"
					:head-data="headData"
					:body-data="onlineBodyData"
					@editTable="AutoEditTable"
				></SimpleTables>
			</collapseTransition>

// 折叠,展开效果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);
	}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值