아코디언
6707 단어 JavaScriptVue.js
시작
아코디언이 jQuery라면slideToggle
훌륭해요. 이걸로 하면 좋겠지만 Vue.js 같은 데서 어떻게 해야 할지 고민할 수도 있어요.
Vue라서 다행이다.js에 vue-slide-up-down
라는 라이브러리가 있기 때문에 이걸로 하면 좋을 것 같지만 자제라면 어떻게 해야 할지 정리하고 싶어요.
(나도 처음엔 혼자 한 줄 몰랐어...)
구현 방법
열기 프로세스
전제로 아코디언의 높이를 0px
, 또는 overflow: hidden
로 설정한다.이거 안 하면 안에 있는 게 보여요.
이 상태에서 애니메이션을 열려면 다음 절차를 따르십시오.
열기 프로세스
전제로 아코디언의 높이를
0px
, 또는 overflow: hidden
로 설정한다.이거 안 하면 안에 있는 게 보여요.이 상태에서 애니메이션을 열려면 다음 절차를 따르십시오.
프로세스 닫기
닫을 때 다음 단계를 수행하십시오.한 박자를 넣으면 Vue다.js의transition과 같은 생각은 active에서 초기 값을 설정하고 to에서 목표 값을 설정하는 방법입니다.
총결산
요약하자면, 아래와 같은 코드다.
구성 요소화되어 있기 때문에 스위치의 시기는watch로 감시합니다.
const Accordion = Vue.extend({
props: {
isOpen: Boolean,
},
data() {
return {
heightStyle: this.$props.isOpen ? '' : '0px',
isOverflow: !this.$props.isOpen,
};
},
watch: {
// 開閉フラグの監視
'$props.isOpen'(isOpen) {
this.$data.isOverflow = true;
// 現在の高さを設定
this.$data.heightStyle = `${this.$refs.elAccordion.clientHeight}px`;
// ワンテンポおいてから目標の高さを設定するが、$nextTickだとうまくいかないのでsetTimeoutに変更
window.setTimeout(() => {
this.$data.heightStyle = isOpen ? `${this.$refs.elContent.clientHeight}px` : '0px';
}, 10);
},
},
methods: {
// アニメーション終了時
onTransitionEnd() {
// 開いたときは高さとoverflowの設定を解除する
if (this.$props.isOpen) {
this.$data.heightStyle = '';
this.$data.isOverflow = false;
}
},
},
template: `
<div
ref="elAccordion"
class="accordion"
:style="{
height: $data.heightStyle,
overflow: $data.isOverflow ? 'hidden' : '',
}"
@transitionend="onTransitionEnd"
>
<div
ref="elContent"
>
<slot></slot>
</div>
</div>
`,
});
끝날 때
이상은 아코디언을 만들 때의 방법이다.
마지막으로 샘플 코드를 넣고 상세한 설치는 여기를 참고하세요.
See the Pen 아코디언 by wintyo ( @wintyo )
on CodePen .
Reference
이 문제에 관하여(아코디언), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wintyo/items/c3cf36f14a42f5029387
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(아코디언), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wintyo/items/c3cf36f14a42f5029387텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)