Commit 335506628e15e29e08df55d4b7e7cf6333fe25be

Authored by vben
1 parent a0b09e74

fix: fix expandTransition

.vscode/settings.json
... ... @@ -116,15 +116,21 @@
116 116 // ================ Eslint ===================
117 117 // ===========================================
118 118 "eslint.enable": true, // 是否开启eslint
119   -
120 119 "eslint.options": {
121 120 // 配置
122   - "plugins": ["html", "vue", "javascript", "jsx", "typescript"]
  121 + "plugins": [
  122 + "html",
  123 + "vue",
  124 + "javascript",
  125 + "jsx",
  126 + "typescript"
  127 + ]
123 128 },
124 129 "eslint.autoFixOnSave": true, // 保存自动格式化
125 130 // ===========================================
126 131 // ================ Vetur ====================
127 132 // ===========================================
  133 + "vetur.experimental.templateInterpolationService": true,
128 134 "vetur.format.options.tabSize": 2,
129 135 "vetur.format.defaultFormatter.html": "js-beautify-html", // 使用js-beautify-html格式化
130 136 "vetur.format.defaultFormatter.scss": "prettier", // 使用js-beautify-html格式化
... ... @@ -244,7 +250,9 @@
244 250 "[markdown]": {
245 251 "editor.defaultFormatter": "esbenp.prettier-vscode"
246 252 },
247   - "cSpell.words": ["yfboilerplate"],
  253 + "cSpell.words": [
  254 + "yfboilerplate"
  255 + ],
248 256 "editor.codeActionsOnSave": {
249 257 "source.fixAll.eslint": true
250 258 }
... ...
src/components/Transition/index.ts
1   -import {
2   - // createSimpleTransition,
3   - createJavascriptTransition,
4   -} from './src/CreateTransition';
  1 +// import {
  2 +// // createSimpleTransition,
  3 +// createJavascriptTransition,
  4 +// } from './src/CreateTransition';
5 5  
6   -import ExpandTransitionGenerator from './src/ExpandTransition';
  6 +// import ExpandTransitionGenerator from './src/ExpandTransition';
7 7  
8 8 export { default as CollapseTransition } from './src/CollapseTransition';
  9 +// export { default as CollapseTransition } from './src/CollapseTransition';
9 10  
10 11 // export const FadeTransition = createSimpleTransition('fade-transition');
11 12 // export const ScaleTransition = createSimpleTransition('scale-transition');
... ... @@ -20,12 +21,14 @@ export { default as CollapseTransition } from './src/CollapseTransition';
20 21 // export const ScaleRotateTransition = createSimpleTransition('scale-rotate-transition');
21 22  
22 23 // Javascript transitions
23   -export const ExpandTransition = createJavascriptTransition(
24   - 'expand-transition',
25   - ExpandTransitionGenerator()
26   -);
  24 +// export const ExpandTransition = createJavascriptTransition(
  25 +// 'expand-transition',
  26 +// ExpandTransitionGenerator()
  27 +// );
27 28  
28 29 // export const ExpandXTransition = createJavascriptTransition(
29 30 // 'expand-x-transition',
30 31 // ExpandTransitionGenerator('', true)
31 32 // );
  33 +
  34 +export { default as ExpandTransition } from './src/ExpandTransition.vue';
... ...
src/components/Transition/src/CollapseTransition.tsx
1   -import type { PropType } from 'vue';
2   -
3 1 // collapse 展开折叠
4 2 import { defineComponent } from 'vue';
5 3 import { getSlot } from '/@/utils/helper/tsxHelper';
6   -import { createJavascriptTransition } from './CreateTransition';
7   -import ExpandTransitionGenerator from './ExpandTransition';
  4 +// import { createJavascriptTransition } from './CreateTransition';
  5 +import ExpandTransition from './ExpandTransition.vue';
8 6  
9   -export const ExpandTransition = createJavascriptTransition(
10   - 'expand-transition',
11   - ExpandTransitionGenerator()
12   -);
  7 +// export const ExpandTransition = createJavascriptTransition(
  8 +// 'expand-transition',
  9 +// ExpandTransitionGenerator()
  10 +// );
13 11 export default defineComponent({
14 12 name: 'CollapseTransition',
15   - components: {
16   - ExpandTransition,
17   - },
18   - props: {
19   - // 是否打开折叠功能
20   - enable: {
21   - type: Boolean as PropType<boolean>,
22   - default: true,
23   - },
24   - },
25   - setup(props, { slots }) {
26   - return () =>
27   - props.enable ? <ExpandTransition>{() => getSlot(slots)}</ExpandTransition> : getSlot(slots);
  13 + setup(_, { slots }) {
  14 + return () => <ExpandTransition>{() => getSlot(slots)}</ExpandTransition>;
28 15 },
29 16 });
... ...
src/components/Transition/src/ExpandTransition.ts
... ... @@ -34,9 +34,9 @@ export default function (expandedParentClass = &#39;&#39;, x = false) {
34 34  
35 35 el.style.setProperty('transition', 'none', 'important');
36 36 el.style.overflow = 'hidden';
37   - const offset = `${el[offsetProperty]}px`;
  37 + // const offset = `${el[offsetProperty]}px`;
38 38  
39   - el.style[sizeProperty] = '0';
  39 + // el.style[sizeProperty] = '0';
40 40  
41 41 void el.offsetHeight; // force reflow
42 42  
... ... @@ -47,7 +47,7 @@ export default function (expandedParentClass = &#39;&#39;, x = false) {
47 47 }
48 48  
49 49 requestAnimationFrame(() => {
50   - el.style[sizeProperty] = offset;
  50 + // el.style[sizeProperty] = offset;
51 51 });
52 52 },
53 53  
... ... @@ -84,6 +84,6 @@ export default function (expandedParentClass = &#39;&#39;, x = false) {
84 84 const size = el._initialStyle[sizeProperty];
85 85 el.style.overflow = el._initialStyle.overflow!;
86 86 if (size != null) el.style[sizeProperty] = size;
87   - delete (el as any)._initialStyle;
  87 + Reflect.deleteProperty(el, '_initialStyle');
88 88 }
89 89 }
... ...
src/components/Transition/src/ExpandTransition.vue 0 → 100644
  1 +<template>
  2 + <transition v-on="on">
  3 + <slot></slot>
  4 + </transition>
  5 +</template>
  6 +<script lang="ts">
  7 + import { addClass, removeClass } from '/@/utils/domUtils';
  8 + import { defineComponent } from 'vue';
  9 + export default defineComponent({
  10 + name: 'CollapseTransition',
  11 + setup() {
  12 + return {
  13 + on: {
  14 + beforeEnter(el: any) {
  15 + addClass(el, 'collapse-transition');
  16 + if (!el.dataset) el.dataset = {};
  17 +
  18 + el.dataset.oldPaddingTop = el.style.paddingTop;
  19 + el.dataset.oldPaddingBottom = el.style.paddingBottom;
  20 +
  21 + el.style.height = '0';
  22 + el.style.paddingTop = 0;
  23 + el.style.paddingBottom = 0;
  24 + },
  25 +
  26 + enter(el: any) {
  27 + el.dataset.oldOverflow = el.style.overflow;
  28 + if (el.scrollHeight !== 0) {
  29 + el.style.height = el.scrollHeight + 'px';
  30 + el.style.paddingTop = el.dataset.oldPaddingTop;
  31 + el.style.paddingBottom = el.dataset.oldPaddingBottom;
  32 + } else {
  33 + el.style.height = '';
  34 + el.style.paddingTop = el.dataset.oldPaddingTop;
  35 + el.style.paddingBottom = el.dataset.oldPaddingBottom;
  36 + }
  37 +
  38 + el.style.overflow = 'hidden';
  39 + },
  40 +
  41 + afterEnter(el: any) {
  42 + // for safari: remove class then reset height is necessary
  43 + removeClass(el, 'collapse-transition');
  44 + el.style.height = '';
  45 + el.style.overflow = el.dataset.oldOverflow;
  46 + },
  47 +
  48 + beforeLeave(el: any) {
  49 + if (!el.dataset) el.dataset = {};
  50 + el.dataset.oldPaddingTop = el.style.paddingTop;
  51 + el.dataset.oldPaddingBottom = el.style.paddingBottom;
  52 + el.dataset.oldOverflow = el.style.overflow;
  53 +
  54 + el.style.height = el.scrollHeight + 'px';
  55 + el.style.overflow = 'hidden';
  56 + },
  57 +
  58 + leave(el: any) {
  59 + if (el.scrollHeight !== 0) {
  60 + // for safari: add class after set height, or it will jump to zero height suddenly, weired
  61 + addClass(el, 'collapse-transition');
  62 + el.style.height = 0;
  63 + el.style.paddingTop = 0;
  64 + el.style.paddingBottom = 0;
  65 + }
  66 + },
  67 +
  68 + afterLeave(el: any) {
  69 + removeClass(el, 'collapse-transition');
  70 + el.style.height = '';
  71 + el.style.overflow = el.dataset.oldOverflow;
  72 + el.style.paddingTop = el.dataset.oldPaddingTop;
  73 + el.style.paddingBottom = el.dataset.oldPaddingBottom;
  74 + },
  75 + },
  76 + };
  77 + },
  78 + });
  79 +</script>
  80 +<style lang="less" scoped>
  81 + .collapse-transition {
  82 + transition: 0.2s height ease-in-out, 0.2s padding-top ease-in-out,
  83 + 0.2s padding-bottom ease-in-out;
  84 + }
  85 +</style>
... ...