当前位置:   article > 正文

vue2/3项目中使用Vue Carousel 3D实现 Carousel 3D 轮播_vue-carousel-3d

vue-carousel-3d

项目需求大概是这个样子,这种并不能通过围成一周再旋转父级实现,因此图方便选择了组件

轮播

 

 vue2,可以直接使用 Playground - Vue Carousel 3D - 3D Carousel for Vue.js

 进行改造成自己需要的样子。文档为英文,中文可参考这位

Vue 3D轮播插件vue-carousel-3d_memory_zzz的博客-CSDN博客

以上API过少,可以使用 ref 绑定,通过onSlideChange打印出所有挂载的属性和函数

 

 

 其中,goNext() 和 goPrev()为左右移位,goFar(index)和 goSlide(index)可以跳到对应的位置,只是表现形式不同(个人浅显理解)。以上就是vue2使用Vue Carousel 3D的大概方法,在此简单概述。

安装并在main.js引入后的完整代码

  1. <template>
  2. <div >
  3. <carousel-3d ref="carousel" :perspective="30" :inverseScaling="500" :space="400" :loop="false" @before-slide-change="onSlideChange">
  4. <slide v-for="(item,index) in Lists" :key="index" :index='index'>
  5. <div class="carouselTitle">{{item.title}}</div>
  6. <div class="carouselContent">{{item.text}}</div>
  7. </slide>
  8. </carousel-3d>
  9. <div class="enums" >
  10. <div class="enums-list" @click="goSlideIndex(index)" height="20px" v-for="(item,index) in Lists" :key="index">
  11. {{ item.title }}
  12. </div>
  13. </div>
  14. </div>
  15. </template>
  16. <script>
  17. import { Carousel3d, Slide } from "vue-carousel-3d";
  18. // import Carousel3d from 'vue-carousel-3d';
  19. export default {
  20. components: {
  21. Carousel3d,
  22. Slide,
  23. },
  24. data(){
  25. return{
  26. Lists:[
  27. {
  28. title: '1',
  29. text:"xxxxxx ",
  30. },
  31. {
  32. title: '2',
  33. text:"xxxxxx ",
  34. },
  35. {
  36. title: '3',
  37. text:"xxxxxx ",
  38. },
  39. {
  40. title: '4',
  41. text:"xxxxxx ",
  42. },
  43. {
  44. title: '5',
  45. text:"xxxxxx ",
  46. },
  47. {
  48. title: '6',
  49. text:"xxxxxx ",
  50. },
  51. {
  52. title: '7',
  53. text:"xxxxxx ",
  54. },
  55. {
  56. title: '8',
  57. text:"xxxxxx ",
  58. },
  59. ]
  60. }
  61. },
  62. methods:{
  63. onSlideChange(temp){
  64. console.log(this.$refs.carousel,'xxx');
  65. this.carouselIndex = temp;
  66. },
  67. goSlideIndex(index){
  68. // this.$refs.carousel.goNext(index)
  69. if(index>this.Lists.length-1 || 0>this.Lists.length-1){
  70. return;
  71. }
  72. // this.$refs.carousel.goSlide(index);
  73. this.$refs.carousel.goFar(index);
  74. },
  75. }
  76. };
  77. </script>
  78. <style lang="less" scoped>
  79. /deep/.left-1 {
  80. color: red;
  81. transform: rotateY(-40deg) translateX(-400px) translateZ(100px) !important;
  82. }
  83. /deep/.left-2 {
  84. color: red;
  85. transform: rotateY(-40deg) translateX(-800px) translateZ(100px) !important;
  86. }
  87. /deep/.right-1 {
  88. color: red;
  89. transform: rotateY(40deg) translateX(400px) translateZ(100px) !important;
  90. }
  91. /deep/.right-2 {
  92. color: red;
  93. transform: rotateY(40deg) translateX(800px) translateZ(100px) !important;
  94. }
  95. .enums{
  96. width: 300px;
  97. height: 30px;
  98. margin: 120px auto;
  99. display: flex;
  100. justify-content: center;
  101. // border: 1px solid black;
  102. }
  103. .enums-list{
  104. width: 30px;
  105. height: 100%;
  106. line-height: 30px;
  107. border: 1px solid gray;
  108. text-align: center;
  109. }
  110. </style>

以下重点说一下vue3中的使用。

费了不少力气然后查到有Vue3 Carousel 3D 这个东西。

https://www.npmjs.com/package/vue3-carousel-3d

于是在自己的私人项目里测试了下,

npm install vue3-carousel-3d
# or
yarn add vue3-carousel-3d

官网推荐是这样的

 我稍微改动了下 ,在main.ts 中 放入这三行代码,

import Carousel3d from 'vue3-carousel-3d';

import "vue3-carousel-3d/dist/index.css"

app.use(Carousel3d)

然后在轮播页我注释掉了这些

然后vue3基本可以实现了。有部分人vite的项目可能会遇到这样的报错

 可以通过

在 vite.confg.js 文件中添加如下配置

  1. resolve: {
  2. dedupe: [
  3. 'vue'
  4. ],
  5. }

重新启动项目后就可以了,注意有的没出现也有可能没给宽高。

vue3内完整代码如下:

  1. <template>
  2. <div>
  3. <div style="width: 1200px; height: 200px; margin-top: 130px">
  4. <carousel-3d
  5. ref="carousel"
  6. @before-slide-change="onSlideChange"
  7. :autoplayTimeout="3000"
  8. :perspective="35"
  9. :display="5"
  10. :animationSpeed="1000"
  11. :width="300"
  12. :height="270"
  13. controlsVisible
  14. :controlsHeight="60"
  15. >
  16. <slide v-for="(item, i) in lists" :index="i" :key="i">
  17. <div class="carouselTitle">{{ item.title }}</div>
  18. </slide>
  19. </carousel-3d>
  20. </div>
  21. <div class="enums">
  22. <div
  23. class="enums-list"
  24. @click="goSlideIndex(index)"
  25. height="20px"
  26. v-for="(item, index) in lists"
  27. :key="index"
  28. >
  29. {{ item.title }}
  30. </div>
  31. </div>
  32. </div>
  33. </template>
  34. <script>
  35. // import { Carousel3d, Slide } from 'vue-carousel-3d'
  36. export default {
  37. // components: {
  38. //     Carousel3d,
  39. //     Slide
  40. //   },
  41. data() {
  42. return {
  43. lists: [
  44. {
  45. title: '1',
  46. },
  47. {
  48. title: '2',
  49. },
  50. {
  51. title: '3',
  52. },
  53. {
  54. title: '4',
  55. },
  56. {
  57. title: '5',
  58. },
  59. {
  60. title: '6',
  61. },
  62. ],
  63. };
  64. },
  65. methods: {
  66. onSlideChange(temp) {
  67. console.log(this.$refs.carousel, 'xxx');
  68. this.carouselIndex = temp;
  69. },
  70. goSlideIndex(index) {
  71. // this.$refs.carousel.goNext(index)
  72. if (index > this.lists.length - 1 || 0 > this.lists.length - 1) {
  73. return;
  74. }
  75. // this.$refs.carousel.goSlide(index);
  76. this.$refs.carousel.goFar(index);
  77. // console.log(this.$refs.carousel.goFar(index),'dadad');
  78. },
  79. },
  80. };
  81. </script>
  82. <style lang="less" scoped>
  83. :deep(.left-1) {
  84. color: red;
  85. transform: rotateY(-40deg) translateX(-400px) translateZ(100px) !important;
  86. }
  87. :deep(.left-2) {
  88. color: red;
  89. transform: rotateY(-40deg) translateX(-800px) translateZ(100px) !important;
  90. }
  91. :deep(.right-1) {
  92. color: red;
  93. transform: rotateY(40deg) translateX(400px) translateZ(100px) !important;
  94. }
  95. :deep(.right-2) {
  96. color: red;
  97. transform: rotateY(40deg) translateX(800px) translateZ(100px) !important;
  98. }
  99. .el-carousel__item h3 {
  100. color: #475669;
  101. font-size: 14px;
  102. opacity: 0.75;
  103. line-height: 200px;
  104. margin: 0;
  105. }
  106. .el-carousel__item:nth-child(2n) {
  107. background-color: #99a9bf;
  108. }
  109. .el-carousel__item:nth-child(2n + 1) {
  110. background-color: #d3dce6;
  111. }
  112. .enums {
  113. width: 300px;
  114. height: 30px;
  115. margin: 120px auto;
  116. display: flex;
  117. justify-content: center;
  118. // border: 1px solid black;
  119. }
  120. .enums-list {
  121. width: 30px;
  122. height: 100%;
  123. line-height: 30px;
  124. border: 1px solid gray;
  125. text-align: center;
  126. }
  127. </style>

 以上为测试代码,比较简陋,供大家参考一下

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/250934
推荐阅读
相关标签
  

闽ICP备14008679号