Commit 74a17e5fce674c2609f3a36ca0e1940fc270deb5
1 parent
d305fdd9
优选库——优选主页,添加3D轮播组件~
Showing
8 changed files
with
211 additions
and
17 deletions
package.json
| @@ -22,6 +22,7 @@ | @@ -22,6 +22,7 @@ | ||
| 22 | "vant": "^2.8.1", | 22 | "vant": "^2.8.1", |
| 23 | "vue": "^2.6.11", | 23 | "vue": "^2.6.11", |
| 24 | "vue-bus": "^1.2.1", | 24 | "vue-bus": "^1.2.1", |
| 25 | + "vue-carousel-3d": "^1.0.1", | ||
| 25 | "vue-clipboard2": "^0.3.1", | 26 | "vue-clipboard2": "^0.3.1", |
| 26 | "vue-head": "^2.1.0", | 27 | "vue-head": "^2.1.0", |
| 27 | "vue-i18n": "^8.15.5", | 28 | "vue-i18n": "^8.15.5", |
src/components/swiper3dCom/swiper3dCom.less
0 → 100644
| 1 | +@charset "UTF-8"; | ||
| 2 | + | ||
| 3 | +&.swiper-3d-com { | ||
| 4 | + position: relative; | ||
| 5 | + .bg-box { | ||
| 6 | + width: 100%; | ||
| 7 | + height: auto; | ||
| 8 | + .bg-img { | ||
| 9 | + display: block; | ||
| 10 | + width: 100%; | ||
| 11 | + height: auto; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + .carousel-3d-box { | ||
| 15 | + position: absolute; | ||
| 16 | + top: 138px; | ||
| 17 | + z-index: 1; | ||
| 18 | + width: 100%; | ||
| 19 | + height: 100%; | ||
| 20 | + /deep/ .carousel-3d-container { | ||
| 21 | + width: 100% !important; | ||
| 22 | + height: auto !important; | ||
| 23 | + .carousel-3d-slider { | ||
| 24 | + width: 310px !important; | ||
| 25 | + .carousel-3d-slide { | ||
| 26 | + background-color: transparent !important; | ||
| 27 | + width: 100% !important; | ||
| 28 | + height: auto !important; | ||
| 29 | + opacity: 0.2 !important; | ||
| 30 | + border: none; | ||
| 31 | + &.current { | ||
| 32 | + opacity: 1 !important; | ||
| 33 | + } | ||
| 34 | + } | ||
| 35 | + } | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | +} | ||
| 0 | \ No newline at end of file | 39 | \ No newline at end of file |
src/components/swiper3dCom/swiper3dCom.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="swiper-3d-com" v-if="items && items.length"> | ||
| 3 | + | ||
| 4 | + <!-- 背景图片 --> | ||
| 5 | + <div class="bg-box" v-if="setOptions.bg"> | ||
| 6 | + <img :src="setOptions.bg + SIGN.BIG" class="bg-img" /> | ||
| 7 | + </div> | ||
| 8 | + | ||
| 9 | + <!-- 3D轮播 --> | ||
| 10 | + <div class="carousel-3d-box"> | ||
| 11 | + <carousel-3d :autoplay="setOptions.autoplay" :autoplayTimeout="setOptions.autoplayTimeout" :autoplayHoverPause="setOptions.autoplayHoverPause" :display="setOptions.display" :width="getWidth()" :height="getHeight()" :inverseScaling="1000" :onMainSlideClick="onMainSlideClick"> | ||
| 12 | + <slide :index="index" v-for="(item, index) in items" :key="index"> | ||
| 13 | + <img :src="item.img" class="img" /> | ||
| 14 | + </slide> | ||
| 15 | + </carousel-3d> | ||
| 16 | + </div> | ||
| 17 | + </div> | ||
| 18 | +</template> | ||
| 19 | + | ||
| 20 | +<script> | ||
| 21 | + | ||
| 22 | + // 引入组件 | ||
| 23 | + import { Carousel3d, Slide } from 'vue-carousel-3d'; | ||
| 24 | + | ||
| 25 | + export default { | ||
| 26 | + data: function () { | ||
| 27 | + return { | ||
| 28 | + setOptions: { | ||
| 29 | + bg: null, // 背景图片 | ||
| 30 | + display: 3, // 展示数量 | ||
| 31 | + autoplay: true, // 自动切换 | ||
| 32 | + autoplayTimeout: 5000, // 自动切换时长 | ||
| 33 | + autoplayHoverPause: true, // 悬停自动暂停 | ||
| 34 | + inverseScaling: 1000 // 反向缩放大小,数字越大缩放比例越大(暂时不使用这个参数,要配合width/height参数共同使用) | ||
| 35 | + } | ||
| 36 | + } | ||
| 37 | + }, | ||
| 38 | + props: ["items", "options"], | ||
| 39 | + components: { | ||
| 40 | + Carousel3d, | ||
| 41 | + Slide | ||
| 42 | + }, | ||
| 43 | + computed: { | ||
| 44 | + | ||
| 45 | + /** | ||
| 46 | + * 计算宽度 | ||
| 47 | + */ | ||
| 48 | + getWidth() { | ||
| 49 | + return () => { | ||
| 50 | + return (document.documentElement.clientWidth || document.body.clientWidth) * (760 / 750); | ||
| 51 | + } | ||
| 52 | + }, | ||
| 53 | + | ||
| 54 | + /** | ||
| 55 | + * 计算高度 | ||
| 56 | + */ | ||
| 57 | + getHeight() { | ||
| 58 | + return () => { | ||
| 59 | + return (document.documentElement.clientWidth || document.body.clientWidth) * (290 / 750); | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + }, | ||
| 63 | + methods: { | ||
| 64 | + | ||
| 65 | + /** | ||
| 66 | + * 合并选项 | ||
| 67 | + * @param {Object} options [配置选项] | ||
| 68 | + */ | ||
| 69 | + mergeOptions(options) { | ||
| 70 | + | ||
| 71 | + if (typeof options === 'object' && options !== null) { | ||
| 72 | + | ||
| 73 | + // 合并默认参数 | ||
| 74 | + Object.assign(this.setOptions, options); | ||
| 75 | + } | ||
| 76 | + }, | ||
| 77 | + | ||
| 78 | + /** | ||
| 79 | + * 活动项目点击事件 | ||
| 80 | + * @param {Object} item [数据对象] | ||
| 81 | + */ | ||
| 82 | + onMainSlideClick(item) { | ||
| 83 | + this.$emit('onMainSlideClick', item); | ||
| 84 | + } | ||
| 85 | + }, | ||
| 86 | + watch: { | ||
| 87 | + | ||
| 88 | + /** | ||
| 89 | + * 监听options参数变化 | ||
| 90 | + */ | ||
| 91 | + options(newVal, oldVal) { | ||
| 92 | + | ||
| 93 | + // 合并选项 | ||
| 94 | + this.mergeOptions(newVal); | ||
| 95 | + } | ||
| 96 | + }, | ||
| 97 | + mounted() { | ||
| 98 | + | ||
| 99 | + this.$nextTick(() => { | ||
| 100 | + | ||
| 101 | + // 合并选项 | ||
| 102 | + this.mergeOptions(this.options); | ||
| 103 | + }); | ||
| 104 | + } | ||
| 105 | + } | ||
| 106 | +</script> | ||
| 107 | + | ||
| 108 | +<!-- Add "scoped" attribute to limit CSS to this component only --> | ||
| 109 | +<style rel="stylesheet/less" lang="less" scoped> | ||
| 110 | + @import './swiper3dCom'; | ||
| 111 | +</style> |
src/pages/optimization2/optimization2.less
| @@ -73,6 +73,9 @@ | @@ -73,6 +73,9 @@ | ||
| 73 | align-items: center; | 73 | align-items: center; |
| 74 | padding: 40px 0 30px 0; | 74 | padding: 40px 0 30px 0; |
| 75 | } | 75 | } |
| 76 | + &.hot-box { | ||
| 77 | + | ||
| 78 | + } | ||
| 76 | &.goods-list { | 79 | &.goods-list { |
| 77 | background-color: transparent; | 80 | background-color: transparent; |
| 78 | .title-box { | 81 | .title-box { |
src/pages/optimization2/optimization2.vue
| @@ -80,17 +80,16 @@ | @@ -80,17 +80,16 @@ | ||
| 80 | </div> | 80 | </div> |
| 81 | </div> | 81 | </div> |
| 82 | 82 | ||
| 83 | - | ||
| 84 | - | ||
| 85 | <!-- 热销排行 --> | 83 | <!-- 热销排行 --> |
| 86 | - <div class="section"> | 84 | + <div class="section hot-box"> |
| 87 | 85 | ||
| 88 | - <!-- 临时,热销排行占位图片 --> | ||
| 89 | - <img src="static/img/hot_img.jpg" style="display: block;width: 100%;" /> | 86 | + <!-- 3D轮播 --> |
| 87 | + <swiper-3d-com @onMainSlideClick="toHotSaleList" | ||
| 88 | + :items="swiper3dItems" | ||
| 89 | + :options="swiper3dOptions"> | ||
| 90 | + </swiper-3d-com> | ||
| 90 | </div> | 91 | </div> |
| 91 | 92 | ||
| 92 | - | ||
| 93 | - | ||
| 94 | <!-- 积分商城 --> | 93 | <!-- 积分商城 --> |
| 95 | <div class="section shop-list"> | 94 | <div class="section shop-list"> |
| 96 | 95 | ||
| @@ -155,6 +154,7 @@ | @@ -155,6 +154,7 @@ | ||
| 155 | import countDownCom from "@/components/countDownCom/countDownCom"; | 154 | import countDownCom from "@/components/countDownCom/countDownCom"; |
| 156 | import goodsItem2 from "@/components/goodsItem_2/goodsItem_2"; | 155 | import goodsItem2 from "@/components/goodsItem_2/goodsItem_2"; |
| 157 | import iconsCom from "@/components/iconsCom/iconsCom"; | 156 | import iconsCom from "@/components/iconsCom/iconsCom"; |
| 157 | + import swiper3dCom from "@/components/swiper3dCom/swiper3dCom"; | ||
| 158 | import moreCom from "@/components/moreCom/moreCom"; | 158 | import moreCom from "@/components/moreCom/moreCom"; |
| 159 | import textTitleBox from "@/components/textTitleBox/textTitleBox"; | 159 | import textTitleBox from "@/components/textTitleBox/textTitleBox"; |
| 160 | import columnListBox from "@/components/columnListBox/columnListBox"; | 160 | import columnListBox from "@/components/columnListBox/columnListBox"; |
| @@ -164,16 +164,15 @@ | @@ -164,16 +164,15 @@ | ||
| 164 | name: 'optimization', | 164 | name: 'optimization', |
| 165 | data () { | 165 | data () { |
| 166 | return { | 166 | return { |
| 167 | - title: "", // 标题 | ||
| 168 | - backs: null, // 后退按钮组 | ||
| 169 | - navs: null, // 导航 | ||
| 170 | - goodsLists: null, // 折扣专区数据 | ||
| 171 | - shopLists: null, // 品质优选 | ||
| 172 | - points: null, // 用户积分 | ||
| 173 | - likeLists: null, // 猜你喜欢列表 | ||
| 174 | - | ||
| 175 | - | ||
| 176 | - | 167 | + title: "", // 标题 |
| 168 | + backs: null, // 后退按钮组 | ||
| 169 | + navs: null, // 导航 | ||
| 170 | + goodsLists: null, // 折扣专区数据 | ||
| 171 | + shopLists: null, // 品质优选 | ||
| 172 | + swiper3dItems: null, // 3D轮播数据数组 | ||
| 173 | + swiper3dOptions: null, // 3D轮播配置选项 | ||
| 174 | + points: null, // 用户积分 | ||
| 175 | + likeLists: null // 猜你喜欢列表 | ||
| 177 | } | 176 | } |
| 178 | }, | 177 | }, |
| 179 | components: { | 178 | components: { |
| @@ -183,6 +182,7 @@ | @@ -183,6 +182,7 @@ | ||
| 183 | countDownCom, | 182 | countDownCom, |
| 184 | goodsItem2, | 183 | goodsItem2, |
| 185 | iconsCom, | 184 | iconsCom, |
| 185 | + swiper3dCom, | ||
| 186 | moreCom, | 186 | moreCom, |
| 187 | textTitleBox, | 187 | textTitleBox, |
| 188 | columnListBox, | 188 | columnListBox, |
| @@ -333,6 +333,24 @@ | @@ -333,6 +333,24 @@ | ||
| 333 | 333 | ||
| 334 | 334 | ||
| 335 | 335 | ||
| 336 | + // 临时,3D轮播参数设置 | ||
| 337 | + this.$set(this, 'swiper3dItems', [ | ||
| 338 | + { | ||
| 339 | + img: 'static/img/hot_img_01.png' | ||
| 340 | + }, | ||
| 341 | + { | ||
| 342 | + img: 'static/img/hot_img_01.png' | ||
| 343 | + }, | ||
| 344 | + { | ||
| 345 | + img: 'static/img/hot_img_01.png' | ||
| 346 | + } | ||
| 347 | + ]); | ||
| 348 | + this.$set(this, 'swiper3dOptions', { | ||
| 349 | + bg: 'static/img/hot_img_bg.png' | ||
| 350 | + }); | ||
| 351 | + | ||
| 352 | + | ||
| 353 | + | ||
| 336 | // 临时,用户积分数据设置 | 354 | // 临时,用户积分数据设置 |
| 337 | this.$set(this, 'points', { | 355 | this.$set(this, 'points', { |
| 338 | key: '我的积分', | 356 | key: '我的积分', |
| @@ -574,6 +592,29 @@ | @@ -574,6 +592,29 @@ | ||
| 574 | }, | 592 | }, |
| 575 | 593 | ||
| 576 | /** | 594 | /** |
| 595 | + * 跳转热销排行列表 | ||
| 596 | + * @param {Object} item [通用跳转对象] | ||
| 597 | + */ | ||
| 598 | + toHotSaleList(item) { | ||
| 599 | + | ||
| 600 | + | ||
| 601 | + console.log('toHotSaleList', item); | ||
| 602 | + | ||
| 603 | + | ||
| 604 | + // 跳转封装 | ||
| 605 | + if (typeof this.$parent.navBarJump === 'function') { | ||
| 606 | + | ||
| 607 | + // 设置跳转参数 | ||
| 608 | + let params = { | ||
| 609 | + | ||
| 610 | + }; | ||
| 611 | + | ||
| 612 | + // 页面跳转 | ||
| 613 | + this.$parent.navBarJump(params); | ||
| 614 | + } | ||
| 615 | + }, | ||
| 616 | + | ||
| 617 | + /** | ||
| 577 | * 查看更多积分 | 618 | * 查看更多积分 |
| 578 | * @param {Object} item [数据对象] | 619 | * @param {Object} item [数据对象] |
| 579 | */ | 620 | */ |
static/img/hot_img.jpg deleted
100644 → 0
37.9 KB
static/img/hot_img_01.png
0 → 100644
79.7 KB
static/img/hot_img_bg.png
0 → 100644
105 KB