vue 로 간단 한 책 을 모방 한 윤 방 도 를 작성 하 는 예제 코드
2.해결 방향
Vue 의 이념 은 데이터 로 보 기 를 구동 하 는 것 이기 때문에 요 소 를 바 꾸 는 margin-top 을 통 해 스크롤 효 과 를 실현 하 는 것 을 거부 합 니 다.css 스타일 을 작성 하고 그림 마다 class 를 바 꾸 면 라운드 효 과 를 얻 을 수 있 습 니 다.애니메이션 효 과 는 transition 에 맡 깁 니 다.윤 방 도 를 두 개(mainSlide 와 extraSlide)로 볼 수 있 습 니 다.각 그림 의 위 치 는 그림 과 같 습 니 다.
3.코드 구현
각 슬라이드 스타일:
$width: 800px; //
$height: 300px; //
$bWidth: 500px; //
$sWidth: $width - $bWidth; //
$sHeight: $height / 2; //
#slider-wrapper{
width: $width;
height: $height;
margin: 0 auto;
cursor: pointer;
background: #ddd;
border-radius: 5px;
box-shadow: 0 1px 6px rgba(0,0,0,0.117647), 0 1px 4px rgba(0,0,0,0.117647);
display: flex;
overflow: hidden;
div{
display: inline-block;
}
}
.main-slide{
width: $bWidth;
height: $height;
float: left;
transition: all .4s ease;
}
.extra-slide{
width: $sWidth;
position: relative;
.extra-slide-item{
position: absolute;
width: $sWidth;
height: $sHeight;
left: 0;
transition: .4s ease-out;
}
.extra-slide-top{
top: -$sHeight;
}
.extra-slide-middle-first{
top: 0;
z-index: 2
}
.extra-slide-middle-second{
top: $sHeight;
z-index: 2
}
.extra-slide-bottom{
top: $height
}
.extra-slide-hide{
display: none!important;
}
}
템 플 릿 은 두 개의 라운드 맵 을 포함 합 니 다:
<div id="slider-wrapper" @mouseover="stop" @mouseout="start">
<!-- 1,mainSlide -->
<div class="main-slide" :style="`background: url(${slideConfig[nowIndex].src})`"></div>
<!-- 2,extraSlide -->
<div class="extra-slide">
<div class="extra-slide-item" :class="slideClass(i)" v-for="(v, i) in slideConfig" :key="i" :style="`background: url(${v.src}); background-size: cover`"></div>
</div>
</div>
scripts 부분 에서 nowIndex 를 설정 하고 nowIndex 를 정기 적 으로 변경 합 니 다.모든 그림 의 class 는 이 nowIndex 에 따라 변 합 니 다.여 기 는 es6 의 map 형식 을 사 용 했 습 니 다.자세 한 내용 은 클릭:https://www.jb51.net/article/111734.htm
export default {
name: 'slider',
data: function() {
return {
slideInterval: null,
nowIndex: 0,
slideLength: this.slideConfig.length
}
},
props: {
slideConfig: {
type: Array
}
},
methods: {
// index
resetIndex(i) {
return i > this.slideLength - 1 ? i - this.slideLength : i
},
slideClass(i) {
let nowIndex = this.nowIndex
// Map key , Map if else
let map = new Map([
[this.resetIndex(nowIndex), 'extra-slide-top'],
[this.resetIndex(nowIndex + 1), 'extra-slide-middle-first'],
[this.resetIndex(nowIndex + 2), 'extra-slide-middle-second'],
[this.resetIndex(nowIndex + 3), 'extra-slide-bottom']
])
// class nowIndex
return map.get(i) ? map.get(i) : 'extra-slide-hide'
},
start() {
// nowIndex
this.slideInterval = setInterval(() => {
this.nowIndex = this.nowIndex > this.slideLength - 2 ? 0 : this.nowIndex + 1
console.log(this.nowIndex)
}, 2000)
},
stop() {
clearInterval(this.slideInterval)
this.slideInterval = null
}
},
mounted() {
this.start()
},
destroyed() {
this.stop()
}
}
slideConfig,구성 요소 의 props:
const prefix = '/src/assets/'
const slideConfig = [{
src: prefix + 's1.jpg',
title: ' 1',
desc: ' 1'
}, {
src: prefix + 's2.jpg',
title: ' 2',
desc: ' 2'
}, {
src: prefix + 's3.jpg',
title: ' 3',
desc: ' 3'
}, {
src: prefix + 's4.jpg',
title: ' 4',
desc: ' 4'
}, {
src: prefix + 's5.jpg',
title: ' 5',
desc: ' 5'
}, {
src: prefix + 's6.jpg',
title: ' 6',
desc: ' 6'
}]
export default slideConfig
사용:
<slider :slideConfig="slideConfig" />
2018/3/12 16:55:slideConfig 가 Props 로 수정 되 었 습 니 다.slider.vue 를 추출 하면 바로 사용 할 수 있 습 니 다.gitHub 전송 문:https://github.com/bougieL/jianshuslider
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.