|
|
@@ -7,13 +7,14 @@
|
|
|
>
|
|
|
<swiper-slide
|
|
|
class="swiper-slide"
|
|
|
- v-for="(item, index) in cards"
|
|
|
+ v-for="(item, index) in data"
|
|
|
:key="index"
|
|
|
>
|
|
|
- <div @click="$router.push({name:'List',query:{id:item.id}})">
|
|
|
- <img class="logo" :src="`${$cdn}/images/hb.png`" />
|
|
|
- <!-- <img class="logo" :src="`${$cdn}/images/hb${item.img}.png`" /> -->
|
|
|
- <!-- <div class="maskss" ></div> -->
|
|
|
+ <div>
|
|
|
+ <img class="real" :src="item.img" alt="" v-if="item.type == 'img'" />
|
|
|
+ <div v-else class="video">
|
|
|
+ <video controls autoplay :src="item.img"></video>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</swiper-slide>
|
|
|
<div class="swiper-pagination" slot="pagination"></div>
|
|
|
@@ -34,152 +35,21 @@ export default {
|
|
|
computed: {
|
|
|
swiper() {
|
|
|
return this.$refs.listSwiper.$swiper;
|
|
|
- },
|
|
|
- swiperOption() {
|
|
|
- let that = this
|
|
|
- let getIndex = (range,length,current)=>{
|
|
|
- let next =(current + range) > length ? (current + range) - length : (current + range)
|
|
|
- let prev =(current - range) < 0 ? (current - range) + length : (current - range)
|
|
|
-
|
|
|
- return {
|
|
|
- prev,
|
|
|
- next
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- let setClass = (range,length,current,that,cls)=>{
|
|
|
- let {prev,next} = getIndex(range,length,current)
|
|
|
- let p = that.slides.eq(prev)
|
|
|
- let n = that.slides.eq(next)
|
|
|
- let cur = that.slides.eq(current)
|
|
|
-
|
|
|
- p.find('.maskss').removeClass('mask mask1 mask2')
|
|
|
- n.find('.maskss').removeClass('mask mask1 mask2')
|
|
|
- cur.find('.maskss').removeClass('mask mask1 mask2')
|
|
|
-
|
|
|
- p.find('.maskss').addClass(cls);
|
|
|
- n.find('.maskss').addClass(cls);
|
|
|
- };
|
|
|
- return {
|
|
|
- watchSlidesProgress: true,
|
|
|
- slidesPerView: "auto",
|
|
|
- centeredSlides: true,
|
|
|
- initialSlide :3,
|
|
|
- // loop: true,
|
|
|
- // loopedSlides: 9,
|
|
|
- on: {
|
|
|
- click:function () {
|
|
|
- if (this.clickedIndex>=0) {
|
|
|
- this.slideTo(this.clickedIndex, 500,()=>{
|
|
|
- this.lazy.load();
|
|
|
- })
|
|
|
- }
|
|
|
- },
|
|
|
- transitionEnd:function () {
|
|
|
- let length = this.slides.length
|
|
|
- that.activeIdx = this.activeIndex
|
|
|
- for (let i = 0; i < length; i++) {
|
|
|
- var slide = this.slides.eq(i);
|
|
|
- let classNames =slide[0].className
|
|
|
- if (classNames.indexOf('active')>-1) {
|
|
|
- setClass (1,length,i,this,'mask')
|
|
|
- setClass (2,length,i,this,'mask1')
|
|
|
- setClass (3,length,i,this,'mask2')
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- progress: function() {
|
|
|
- for (let i = 0; i < this.slides.length; i++) {
|
|
|
- var slide = this.slides.eq(i);
|
|
|
- var slideProgress = this.slides[i].progress;
|
|
|
- var modify = 1;
|
|
|
- if (Math.abs(slideProgress) > 1) {
|
|
|
- modify = (Math.abs(slideProgress) - 1) * 0.3 + 1;
|
|
|
- }
|
|
|
- let translate = slideProgress * modify * 140 + "px";
|
|
|
- let scale = 1 - Math.abs(slideProgress) / 5;
|
|
|
- let zIndex = 999 - Math.abs(Math.round(10 * slideProgress));
|
|
|
-
|
|
|
- // let opacity = 1 - Math.min(Math.abs(slideProgress / 2), 1);
|
|
|
-
|
|
|
- slide.transform(
|
|
|
- "translateX(" + translate + ") scale(" + scale + ")"
|
|
|
- );
|
|
|
- slide.css({
|
|
|
- "zIndex": zIndex,
|
|
|
- "opacity": 1,
|
|
|
- "pointer-events": 'auto',
|
|
|
- });
|
|
|
-
|
|
|
- if (Math.abs(slideProgress) > 3) {
|
|
|
- slide.css({
|
|
|
- // "opacity":0,
|
|
|
- "pointer-events":"none"
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- setTransition: function(transition) {
|
|
|
- for (var i = 0; i < this.slides.length; i++) {
|
|
|
- var slide = this.slides.eq(i);
|
|
|
- slide.transition(transition);
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- };
|
|
|
- },
|
|
|
+ }
|
|
|
},
|
|
|
- props:['list'],
|
|
|
+ props:['data'],
|
|
|
data() {
|
|
|
- let cards = [{
|
|
|
- img:1,
|
|
|
- id:8,
|
|
|
- name:'廊道构件'
|
|
|
- },{
|
|
|
- img:2,
|
|
|
- id:3,
|
|
|
- name:'雕饰构件'
|
|
|
- },{
|
|
|
- img:3,
|
|
|
- id:4,
|
|
|
- name:'栏柱构件'
|
|
|
- },{
|
|
|
- img:4,
|
|
|
- id:9,
|
|
|
- name:'精品馆藏'
|
|
|
- },{
|
|
|
- img:5,
|
|
|
- id:5,
|
|
|
- name:'楼梯构件'
|
|
|
- },{
|
|
|
- img:6,
|
|
|
- id:7,
|
|
|
- name:'墙饰面'
|
|
|
- },{
|
|
|
- img:7,
|
|
|
- id:6,
|
|
|
- name:'墙面构件'
|
|
|
- }]
|
|
|
return {
|
|
|
activeDate: "",
|
|
|
showNext: 0,
|
|
|
showPre: 0,
|
|
|
- activeIdx:'',
|
|
|
- cards
|
|
|
+ activeIdx:''
|
|
|
};
|
|
|
},
|
|
|
- methods: {
|
|
|
- goto(url) {
|
|
|
- window.open(url, "_blank");
|
|
|
- },
|
|
|
- },
|
|
|
components: {
|
|
|
Swiper,
|
|
|
SwiperSlide,
|
|
|
},
|
|
|
- directives: {
|
|
|
- swiper: directive,
|
|
|
- },
|
|
|
mounted() {
|
|
|
},
|
|
|
};
|
|
|
@@ -189,66 +59,33 @@ export default {
|
|
|
position: relative;
|
|
|
width: 100%;
|
|
|
margin: 0 auto;
|
|
|
+ padding: 0;
|
|
|
+ background: #000;
|
|
|
}
|
|
|
|
|
|
.swiper-wrapper {
|
|
|
- margin-top: 10px;
|
|
|
- padding: 20px 0;
|
|
|
+ padding: 0;
|
|
|
+ margin: 0;
|
|
|
}
|
|
|
|
|
|
.swiper-slide {
|
|
|
- width: 400px;
|
|
|
cursor: pointer;
|
|
|
font-size: 0;
|
|
|
position: relative;
|
|
|
-}
|
|
|
-
|
|
|
-.swiper-slide img {
|
|
|
- width: 100%;
|
|
|
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.6);
|
|
|
-}
|
|
|
-.swiper-slide .maskss{
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- position: absolute;
|
|
|
- left: 0;
|
|
|
- top: 0;
|
|
|
- overflow: hidden;
|
|
|
-}
|
|
|
-.swiper-slide .mask{
|
|
|
- background: #804D28;
|
|
|
- opacity: 0.5;
|
|
|
-}
|
|
|
-
|
|
|
-.swiper-slide .mask1{
|
|
|
- background: #6e4029;
|
|
|
- opacity: 0.65;
|
|
|
-}
|
|
|
-
|
|
|
-.swiper-slide .mask2{
|
|
|
- background: #4b2b13;
|
|
|
- opacity: 0.65;
|
|
|
-}
|
|
|
-.page{
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- margin-top: 10px;
|
|
|
- >li{
|
|
|
- margin: 0 15px;
|
|
|
- >span{
|
|
|
- width: 60px;
|
|
|
- height: 8px;
|
|
|
- background-color: #CCCCCC;
|
|
|
- display: inline-block;
|
|
|
- }
|
|
|
- .active{
|
|
|
- background: #4b2b13;
|
|
|
- }
|
|
|
+ img{
|
|
|
+ width: 100%;
|
|
|
}
|
|
|
-}
|
|
|
-@media screen and (max-width: 1600px) {
|
|
|
- .swiper-slide {
|
|
|
- width: 350px;
|
|
|
+ .video{
|
|
|
+ min-height: 70vh;
|
|
|
+ width: 100%;
|
|
|
+ >video{
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 0;
|
|
|
+ transform: translateY(-50%);
|
|
|
+ width: 100%;
|
|
|
}
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
</style>
|