当前位置:   article > 正文

使用vue实现轮播图的时候,使用v-for发现获取不到图片?两种解决办法!_vue 轮播图 v-for

vue 轮播图 v-for

先将有问题的代码贴出来:

  1. <template>
  2. <div class="videomenu">
  3. <div class="left">
  4. <!-- 轮播图 -->
  5. <a href=""><img v-for="(item,index) in imgs" :key="index" :src="item" v-show="index==options"></a>
  6. <!-- 轮播图下方的按钮 -->
  7. <ul class="list">
  8. <li v-for="(src,index) in imgs" :key="index" :class="index==options?'selected':''" @click="gotoPage(index)">{{index+1}}</li>
  9. </ul>
  10. </div>
  11. <div class="right">
  12. <ul class="rightul">
  13. <li class="rightulitem" v-for="(item,index) in list" :key="index"><a href="" class="righta"></a></li>
  14. </ul>
  15. </div>
  16. </div>
  17. </template>

 

  1. <script>
  2. export default {
  3. name:'VideoMenu',
  4. data(){
  5. return{
  6. list:[1,2,3,4,5,6,7,8],
  7. imgs:['../../images/blue.png','../../images/green.png','../../images/gray.png','../../images/brown.png','../../images/yellow.png'],
  8. options:0,
  9. timer:null
  10. }
  11. },
  12. methods:{
  13. setTime(){
  14. setInterval(this.changeImages,3000)
  15. },
  16. changeImages(){
  17. this.options++;
  18. if(this.options == this.imgs.length){
  19. this.options = 0;
  20. }
  21. },
  22. gotoPage(index){
  23. this.options = index;
  24. },
  25. onmousemove(){
  26. clearInterval(this.timer);
  27. }
  28. },
  29. created(){
  30. this.setTime();
  31. }
  32. }
  33. </script>
  1. <style scoped>
  2. *{
  3. padding: 0;
  4. margin: 0;
  5. }
  6. a{
  7. text-decoration: none;
  8. }
  9. .videomenu{
  10. position: relative;
  11. }
  12. ul{
  13. list-style: none;
  14. }
  15. .list{
  16. position: absolute;
  17. bottom: 10px;
  18. right: 5px;
  19. }
  20. .list li{
  21. height: 20px;
  22. width: 20px;
  23. border:1px solid #969591;
  24. border-radius: 50%;
  25. background-color: #969591;
  26. float: left;
  27. margin-left: 5px;
  28. text-align: center;
  29. color: white;
  30. cursor: pointer;
  31. }
  32. .list .selected{
  33. background:#8F9E9E;
  34. color:black;
  35. }
  36. .right{
  37. position: absolute;
  38. top:0;
  39. left: 720px;
  40. }
  41. .rightul {
  42. display: flex;
  43. flex-wrap: wrap;
  44. }
  45. .righta{
  46. display: inline-block;
  47. width: 206px;
  48. height: 115px;
  49. }
  50. .rightulitem{
  51. width: 206px;
  52. height: 115px;
  53. background-color: cornflowerblue;
  54. margin-right: 10px;
  55. margin-bottom: 10px;
  56. font-size: 20px;
  57. }
  58. .left{
  59. width: 559px;
  60. height: 242px;
  61. /* background-color: brown; */
  62. margin-left: 150px;
  63. margin-right: 15px;
  64. position: relative;
  65. }
  66. </style>

我使用的是单文件组件,所以将上述vue的三个部分都贴了出来,目前的画面效果如下:

下面的数字是可以实现轮播的,但是图片就是获取不到。通过询问公司同事才明白(我只是个实习生),原来是由于webpack在打包的时候,生成一个dist文件夹,然后webpack会将这些图片的路径自动随机的加上一串哈希值,比如:动态.f94db46f.png ,中间的那串就是哈希值了,而且每次编译的时候都是不一样的,所以不要妄想在标签中写死图片打包后的路径了。

解决办法1:   使用require

template标签和style标签没有变化,变化的只是script标签中的部分内容:

  1. <script>
  2. var img1 = require('../../images/blue.png')
  3. var img2 = require('../../images/green.png')
  4. var img3 = require('../../images/gray.png')
  5. var img4 = require('../../images/brown.png')
  6. var img5 = require('../../images/yellow.png')
  7. export default {
  8. name:'VideoMenu',
  9. data(){
  10. return{
  11. list:[1,2,3,4,5,6,7,8],
  12. imgs:[img1,img2,img3,img4,img5],
  13. options:0,
  14. timer:null
  15. }
  16. },

然后在页面就可以正常显示出图片的内容了,如下:

解决办法2:使用import

  1. <script>
  2. import img1 from '../../images/blue.png'
  3. import img2 from '../../images/green.png'
  4. import img3 from '../../images/gray.png'
  5. import img4 from '../../images/brown.png'
  6. import img5 from '../../images/yellow.png'
  7. export default {
  8. name:'VideoMenu',
  9. data(){
  10. return{
  11. list:[1,2,3,4,5,6,7,8],
  12. imgs:[img1,img2,img3,img4,img5],
  13. options:0,
  14. timer:null
  15. }
  16. },

和require几乎是一样的,至此两种方法介绍完毕,大家要是还有什么补充,欢迎评论区留言!

 

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

闽ICP备14008679号