只有一张图片的时候也可以滚动怎么解决?

只有一张图片的时候也可以滚动怎么解决?

是不是因为开了无缝滚动的原因,HTML 结构里面也是生成了三张图片。Swiper 文档上说使用了 loop 模式后,watchOverflow 会无效。

http://img1.sycdn.imooc.com//climg/5e171d5f09801bc706240308.jpg

http://img1.sycdn.imooc.com//climg/5e171d6009ccf19f06700618.jpg


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

5回答
好帮手慕星星 2020-01-11 14:20:59

同学你好,这是插件本身的设置,没有问题。在后面课程中老师有完善这部分:

http://img1.sycdn.imooc.com//climg/5e19693009a7d87617230936.jpg

判断幻灯片长度,如果小于等于1,将loop设置为false,可以继续往下面看哦。

祝学习愉快!

提问者 夜雨倾河 2020-01-11 11:19:01
// home/slider.vue

<template>
<div class="slider-wrapper">
<mine-slider
:direction="direction"
:loop="loop"
:interval="interval"
:pagination="pagination"
v-if="sliders.length"
>
<swiper-slide v-for="(item, index) in sliders" :key="index">
<a :href="item.linkUrl" class="slider-link">
<img :src="item.picUrl" alt="" class="slider-img">
</a>
</swiper-slide>
</mine-slider>
</div>
</template>
<script>
import MineSlider from '@/base/slider';
import {swiperSlide} from 'vue-awesome-swiper';
import {sliderOptions} from './config.js'; // 引入轮播图配置文件
import {getHomeSlider} from '@/api/home.js';
export default {
name: 'home-slider',
data() {
return {
direction: sliderOptions.direction,
loop: sliderOptions.loop,
interval: sliderOptions.interval,
pagination: sliderOptions.pagination,
sliders: [
// {
//     'linkUrl': 'https://www.imooc.com',
//     'picUrl': require('./1.jpg') // 在 js 中,本地图片要通过 require() 来引入
// },
// {
//     'linkUrl': 'https://www.imooc.com',
//     'picUrl': require('./2.jpg')
// },
// {
//     'linkUrl': 'https://www.imooc.com',
//     'picUrl': require('./3.jpg')
// },{
//     'linkUrl': 'https://www.imooc.com',
//     'picUrl': require('./4.jpg')
// }
]
}
},
created() {
this.getSlider();
},
methods: {
getSlider() {
getHomeSlider().then(data => {
this.sliders = data;
});
}
},
components: {
MineSlider,
swiperSlide
}
}
</script>

<style lang="scss" scoped>
.slider-wrapper{
height: 183px;
}
.slider-link{
display: block;
}
.slider-link,
.slider-img{
width: 100%;
height: 100%;
}
</style>


提问者 夜雨倾河 2020-01-11 11:16:17
// base/slider/index.vue

<template>
<swiper :options="swiperOption">
<slot></slot>
<div class="swiper-pagination" v-if="pagination" slot="pagination"></div>
</swiper>
</template>
<script>
// 引入第三方轮播图组件插件
import {swiper} from 'vue-awesome-swiper';

export default {
name: 'MineSlider',
components: {
swiper,
},
data() {
return {
swiperOption: {
watchOverflow: true, // 当只有一张图片时,轮播图失效
direction: this.direction,
autoplay: this.interval ? {
delay: this.interval,
disableOnInteraction: false // 当产生交互时,是否停止自动轮播 flase 表示不停止
} : false,
slidesPerView: 1, // 设置容器能够同时显示的图片数量
loop: this.loop,  // loop 为 true 时,小圆点显示并且会滚动,反之没有小圆点 不滚动
pagination: {
el: this.pagination ? '.swiper-pagination' : null
},
}
}
},
props: {
direction: {
type: String,
default: 'horizontal',
// 返回 true,表示传入的值是数组中的其中一个,验证通过
validator(value) {
return [
'horizontal', // 水平滑动
'vertical' // 垂直滑动
].indexOf(value) > -1
}
},
// 是否开启自动轮播
interval: {
type: Number,
default: 3000,
validator(value) {
return value > 0;
}
},
// 无缝滚动
loop: {
type: Boolean,
default: true,
},
// 分页器
pagination: {
type: Boolean,
default: true,
}
}
}
</script>

<style lang="scss" scoped>
.swiper-container{
width: 100%;
height: 100%;
}
</style>


提问者 夜雨倾河 2020-01-11 11:12:36
// home.js

import axios from 'axios'; // 引入 axios 用于发送请求,获取数据
import {SUCC_CODE} from './config.js';

// 获取轮播图数据 --ajax
export const getHomeSlider = () => {
return axios.get('http://www.imooc.com/api/home/slider',{timeout: 10}).then(res => {
if(res.data.code === SUCC_CODE) {
return res.data.slider;
}
throw new Error('没有成功获取到数据');
}).catch(err => { // 捕获错误
if(err) {
console.log(err);
}
return [
{
linkUrl: 'https://www.imooc.com',
picUrl: require('@/assets/img/404.png')
}
]
})
}


好帮手慕星星 2020-01-10 10:19:40

同学你好,如果轮播数据没有加载出来,小圆点是不应该显示的:

http://img1.sycdn.imooc.com//climg/5e17de3a097f413403930189.jpg

并且swiper容器中只有这一张报错图片

http://img1.sycdn.imooc.com//climg/5e17de7a09b04d2510290185.jpg

可以下载源码,将自己写代码替换掉源码测试,对比一下,是不是哪里写的有问题:

http://img1.sycdn.imooc.com//climg/5e17deb8096adcf503980236.jpg

如果找不到问题,建议将home.js,base/slider/index.vue,home/slide.vue文件代码粘贴上来,不要截图,便于定位问题所在。

祝学习愉快!

  • 提问者 夜雨倾河 #1
    如果把不打开无缝滚动,小圆点确实是没有显示,HTML 结构也是只有一张图片。 代码发在上面了,麻烦您帮我看下吧。
    2020-01-11 11:22:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师