首页 > 其他 > 详细

vue collapse折叠动画组件(element transition文件)

时间:2021-08-20 16:02:55      阅读:33      评论:0      收藏:0      [点我收藏+]
// import { addClass, removeClass } from ‘element-ui/src/utils/dom‘;
export function addClass(el, cls) {
if (!el) return;
var curClass = el.className;
var classes = (cls || ‘‘).split(‘ ‘);

for (var i = 0, j = classes.length; i < j; i++) {
var clsName = classes[i];
if (!clsName) continue;

if (el.classList) {
el.classList.add(clsName);
} else if (!hasClass(el, clsName)) {
curClass += ‘ ‘ + clsName;
}
}
if (!el.classList) {
el.setAttribute(‘class‘, curClass);
}
};

/* istanbul ignore next */
export function removeClass(el, cls) {
if (!el || !cls) return;
var classes = cls.split(‘ ‘);
var curClass = ‘ ‘ + el.className + ‘ ‘;

for (var i = 0, j = classes.length; i < j; i++) {
var clsName = classes[i];
if (!clsName) continue;

if (el.classList) {
el.classList.remove(clsName);
} else if (hasClass(el, clsName)) {
curClass = curClass.replace(‘ ‘ + clsName + ‘ ‘, ‘ ‘);
}
}
if (!el.classList) {
el.setAttribute(‘class‘, trim(curClass));
}
};
class Transition {
beforeEnter(el) {
addClass(el, ‘collapse-transition‘);
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‘;
}

afterEnter(el) {
// for safari: remove class then reset height is necessary
removeClass(el, ‘collapse-transition‘);
el.style.height = ‘‘;
el.style.overflow = el.dataset.oldOverflow;
}

beforeLeave(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) {
// for safari: add class after set height, or it will jump to zero height suddenly, weired
addClass(el, ‘collapse-transition‘);
el.style.height = 0;
el.style.paddingTop = 0;
el.style.paddingBottom = 0;
}
}

afterLeave(el) {
removeClass(el, ‘collapse-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: ‘ElCollapseTransition‘,
functional: true,
render(h, { children }) {
const data = {
on: new Transition()
};

return h(‘transition‘, data, children);
}
};

vue collapse折叠动画组件(element transition文件)

原文:https://www.cnblogs.com/zerofan/p/15166509.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!