vue 모듈 모 바 일 구성 요소 의 구현 예제
그 중에서 모든 모듈 은 구성 요소 호출(프로젝트 경험,교육 경험,업무 경험 등)이기 때문에 여기 서도 동적 로드 구성 요소 방식 을 사용 했다.
사고방식:마 우 스 를 모듈 로 옮 겨 서 해당 모듈 의 클릭 이동 단 추 를 표시 하고 A 모듈 이동 단 추 를 클릭 합 니 다.이때 원래 A 모듈 이 있 던 위치 가 여기 녹색 상자 모듈 로 드래그 되 고 마우스 아래 에 A 모듈 이 떠 있 습 니 다.마우스 가 이동 하고 떠 있 는 A 모듈 이 따라 이동 하 며 녹색 상자 도 위아래 로 이동 합 니 다.
부모 구성 요소
1.부모 구성 요소 template 의 코드
<div class="component-box" ref="compBox">
<component
v-for="(item, index) in comRoute"
:is="item"
:key="index"
@getData="getData">
</component>
<div :class="['translate-box', {'move-icon':transType}]"
ref="translateBox" v-if="transType">
<component :is="transCom"></component>
</div>
</div>
2.data 에서 정의 하 는 속성
comList: ['educationExp', 'workExp', 'projectExp'], //
comLen: 0, //
comType: '', //
transType: '', //
coordinate: { //
mouseX: 0,
mouseY: 0,
},
downFlag: false, //
mouseYBefore: 0, // Y 30 Y
mouseYLast: 0, // Y
nowCom: '', // ,
forFlage: false, // forEach
comRoute: [], //
transCom: null, //
compBox: null, //
3,scrollTop 페이지 스크롤 의 상단 거리,부모 구성 요소 에서 전달
props: { scrollTop: Number,}
4、watch 일부 속성
watch: {
comList: {
handler(val) {
this.getCom(val); // ,
},
deep: true,
immediate: true, // handler
},
transType(val) { //
if (val) {
this.transCom = () => import(`./default/${val}`);
}
},
scrollTop: { //
handler() {},
immediate: true,
},
comType(newVal) {
if (newVal) {
this.comList.forEach((item, index) => {
if (item === newVal) {
this.comList[index] = 'moveBox'; // comType moveBox
}
});
this.getCom(this.comList);
}
},
downFlag(newVal) { //
const nowThis = this;
document.onmousemove = function (e) {
if (newVal) { //
nowThis.coordinate.mouseX = e.clientX;
nowThis.coordinate.mouseY = e.clientY;
}
};
document.onmouseup = function () { //
document.onmousemove = null;
if (newVal) {
nowThis.transType = ''; //
nowThis.comList.forEach((item, index) => {
if (item === 'moveBox') { // moveBox
nowThis.comList[index] = nowThis.comType; //
}
});
nowThis.downFlag = false;
nowThis.comType = '';
nowThis.getCom(nowThis.comList);
}
};
},
coordinate: {
handler(newVal) { //
this.$refs.translateBox.style.top = `${newVal.mouseY + this.scrollTop - 40 - this.compBox.y}px`;
this.$refs.translateBox.style.left = `${newVal.mouseX - this.compBox.x - 200}px`;
this.mouseYLast = newVal.mouseY;
},
deep: true,
},
mouseYLast(newVal) { // Y
this.forFlage = false;
if (newVal - this.mouseYBefore > 30) { // 30 , 30,moveBox
this.comList.forEach((item, index) => {
if (item === 'moveBox' && index < this.comLen - 1 && !this.forFlage) {
this.nowCom = this.comList[index + 1];
this.$set(this.comList, index + 1, 'moveBox');
this.$set(this.comList, index, this.nowCom);
this.mouseYBefore = newVal;
this.forFlage = true;
}
});
} else if (newVal - this.mouseYBefore < -30) { //
this.comList.forEach((item, index) => {
if (item === 'moveBox' && index > 0 && !this.forFlage) {
this.nowCom = this.comList[index - 1];
// this.comList[index - 1] = 'moveBox';
// this.comList[index] = this.nowCom;
// this.comList[index] ,vue
this.$set(this.comList, index - 1, 'moveBox');
this.$set(this.comList, index, this.nowCom);
this.mouseYBefore = newVal;
this.forFlage = true;
}
});
}
},
},
그 중에서 forFlage 의 역할 은 foreach 에서 break 를 사용 하여 순환 을 끝 낼 수 없 기 때문에 forFlage 로 moveBox 를 옮 겨 다 니 면 스 트 리밍 을 끝내 도록 하 겠 습 니 다.5、methods
methods: {
getCom(val) {
this.comRoute = [];
val.forEach((item) => {
this.comRoute.push(() => import(`./default/${item}`));
});
},
getData(data, dataY, dataX) { // , ,
this.comType = data;
this.transType = data; // ,
this.downFlag = true;
this.mouseYBefore = dataY;
this.$nextTick(() => {
this.$refs.translateBox.style.top = `${dataY + this.scrollTop - 40 - this.compBox.y}px`;
this.$refs.translateBox.style.left = `${dataX - this.compBox.x - 200}px`;
});
},
},
6、mounted
mounted() {
this.comLen = this.comList.length;
this.compBox = this.$refs.compBox.getBoundingClientRect();
const that = this;
window.onresize = () => (() => {
that.compBox = this.$refs.compBox.getBoundingClientRect();
})();
},
하위 구성 요소1.하위 구성 요소 template 코드
<div class="pad-box hover-box name-box">
<p class="absolute-box">
<i class="el-icon-rank operation-icon move-icon" @mousedown="mouseDown"></i>
<i class="el-icon-circle-plus operation-icon"></i>
<i class="el-icon-s-tools operation-icon"></i>
</p>
</div>
2、script
export default {
name: 'educationExp',
data() {
return {
comType: 'educationExp',
mouseYBefore: 0,
mouseXBefore: 0,
};
},
methods: {
mouseDown(e) {
this.mouseYBefore = e.clientY;
this.mouseXBefore = e.clientX;
this.$emit('getData', this.comType, this.mouseYBefore, this.mouseXBefore);
},
},
};
vue 모듈 모 바 일 구성 요소 의 구현 예제 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 vue 모듈 모 바 일 구성 요소 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.