我用vue写了一个简单的支持左右滑动的图片轮播组件,请大家指点

CodeAstral
• 阅读 6583

最近在尝试重构公司网站,需要用到轮播图,因为网站比较简单,不想因为第三方插件,就自己写了一个轮播组件,引入腾讯的手势操作库就可以滑动了
main.js

import AlloyFinger from 'alloyfinger'
import AlloyFingerVue from 'alloyfinger/vue/alloy_finger.vue'
Vue.use(AlloyFingerVue, { AlloyFinger }) 
...

Swiper.vue

<template>
  <div class="swiper">
    <div class="swiper-wrapper"> 
      <transition-group tag="ul" :name="swipeAction" class="swiper-list"
        v-finger:swipe="swipe"> 
          <li class="swiper-item" v-for="(img,index) in imageList" 
            v-show="index===currentIndex"
            @mouseenter="stop" 
            @mouseleave="start" 
            :key="index"
          >
            <img :src="img.url" alt="首页轮播图" class="swiper-img">
          </li>
        <!-- </transition> -->
      </transition-group> <!-- </ul>  -->
      <div class="swiper-dot-wrapper">
        <span class="swiper-dot" v-for="(item,index) in imageList.length" 
          @mouseover="change(index)"
          :class="{active: index===currentIndex}"
        >
        </span>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: 'Swiper',
  props: {
    imageList: {
      type: Array,
    },
  },
  data() {
    return {
      currentIndex: 0,
      timer: '',
      swipeAction: 'swipe-left',
    }
  },
  created() {
    this.$nextTick(() => {
      this.start()
    })
  },
  methods: {
    start() {
      this.timer = setInterval(() => {
        this.next()
      }, 5000)
    },
    stop() {
      clearInterval(this.timer)
      this.timer = null
    },
    next() {
      this.currentIndex += 1
      if (this.currentIndex > this.imageList.length - 1) {
        this.currentIndex = 0
        // this.swipeAction = 'swipe-left'
      }
    },
    change(index) {
      this.currentIndex = index
    },
    prev() {
      this.currentIndex -= 1
      if (this.currentIndex < 0) {
        this.currentIndex = this.imageList.length - 1
        // this.swipeAction = 'swipe-right'
      }
    },
    swipe(evt) {
      // console.log('swipe' + evt.direction)
      // console.log('onSwipe')
      if (evt.direction === 'Left') {
        this.next()
        this.swipeAction = 'swipe-left'
      } else {
        this.prev()
        this.swipeAction = 'swipe-right'
      }
    },
  },
}

</script>
<style lang="stylus">
.swiper 
  width: 100%
  font-size: 0
  overflow: hidden
  .swiper-wrapper
    position: relative
    background-color: #ccc
    .swiper-list
      position: relative
      width: 100%
      height: 0
      padding-top: 56.25% /*黑魔法*/
      .swiper-item 
        position: absolute
        display: inline-block
        left:0
        top: 0
        width: 100%
        height: 100%
        .swiper-img 
          position: absolute
          top: 0
          bottom: 0
          width: 100%
          height: 100%
        &.swipe-left-enter-active, &.swipe-left-leave-active,
        &.swipe-right-enter-active, &.swipe-right-leave-active
          transition: all .5s ease
        &.swipe-left-enter
          transform: translateX(100%)
        &.swipe-left-leave-to
          transform: translateX(-100%)
        &.swipe-right-enter
          transform: translateX(-100%)
        &.swipe-right-leave-to
          transform: translateX(100%)
    .swiper-dot-wrapper
      position: absolute
      right: 20px
      bottom: 20px
      .swiper-dot
        display: inline-block
        margin-left: 20px
        width: 10px
        height: 10px
        border-radius: 50%
        background-color: #fff
        &.active
          background-color: rgb(240, 20, 20)
</style>

参考:https://segmentfault.com/a/11...

点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
4年前
Django+Vue开发生鲜电商平台之11.首页、商品数量、缓存和限速功能开发
青,取之于蓝而青于蓝;冰,水为之而寒于水。——《荀子·劝学》Github和Gitee代码同步更新:;。一、首页功能完善首页待完善的功能包括轮播图、新品尝鲜、系列商品等。1.轮播图实现轮播图包括3张图片,链接对应3个商品,先在apps/goods/serializers.py中定义序列化如下:pythonclassBanner
昔不亏 昔不亏
4年前
「Vue — 插件」轮播图vue-awesome-swiper
1:安装cnpminstallvueawesomeswiper@3savedevcnpminstallswiper@32:在main.js中jsimportVueAwesomeSwiperfrom'vueawesomeswiper'import'swiper/dist/css/swiper.css'Vue.use(Vu
红橙Darren 红橙Darren
4年前
RecyclerView更全解析之 - 为它优雅的添加头部和底部
1.概述上一期的,解决了几个坑。那么这一期我们来动态为RecyclerView去加载头部和底部,为上一期的RecyclerView列表数据添加广告轮播图,至于广告轮播大家可以看一下这一期,这里我就不多讲了,直接拿过来用。    视频讲解:相关文章:                        
Stella981 Stella981
3年前
Javascript使用三大家族和事件来DIY动画效果相关笔记(四)
1.图片轮播基础之缓速轮播◆使用封装的缓慢速动画来DIY滑动轮播图,也就是鼠标移动到123456这些数字上后,图片以缓慢速滑动的方式进行切换。<!DOCTYPEhtml<htmllang"en"<head<metacharset"UTF8"<title使用封装的缓速
Stella981 Stella981
3年前
JavaScript 练手小案例:基于SVG的图片切换效果
最近太忙了,自动来到rjxy后,不晓得怎么回事,忙的都没时间更博了。昨天还有个同学跟我说,你好久没更新博客了。。甚为惭愧~~正好12月来了,今天开一篇。最近上课讲到了SVG,不晓得同学们理解到没。\_!!!图片轮播见的太多,今天就用SVG写了一个图片轮播,效果如下。!(https://imgblog.csdnimg.
Stella981 Stella981
3年前
RN开发快速切换底部导航时react
目前reactnative平台最好用的轮播图组件:reactnativeswiper(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fleecade%2Freactnativeswiper%2F)最近在项目迭代开发测试中发现一个问题,就是在快速切换
Wesley13 Wesley13
3年前
JS实现小图放大轮播效果
JS实现小图放大轮播页面效果入下(图片为优行商旅页面照片):!(https://oscimg.oschina.net/oscnet/fea423c49d5f7430375068501d3f032d631.png) 实现效果:图片自动轮播,鼠标移入停止,移出继续轮播点击下方小图可以实现切换步骤一:建立HTML布局,具体
Wesley13 Wesley13
3年前
FancyMoves,一款精美的图片轮播插件,可用键盘左右键进行轮播
   本次给各位介绍的是一个名叫FancyMoves的JQuery图片轮播插件。您可以使用鼠标点击,甚至是使用键盘左右键来进行图片的切换操作。   特性介绍:   1.轻松的改变幻灯变的宽度。   2.轻易改变下一张展示图片的数量。   3.最后一张图片会循环回到第一张图片里。   4.嵌入了Fancy
程序员一鸣 程序员一鸣
2个月前
HarmonyOs开发:轮播图Banner组件封装与使用
轮播图在每个项目中都很常见,鸿蒙中在容器组件中也提供了Swiper组件,用于子组件滑动轮播显示,和前端的使用起来也是异曲同工,我们先看下基本的用法。
布局王 布局王
1个月前
Uniapp开发鸿蒙购物项目实战教程:实现首页轮播图
过去几天的文章中我们讲过了如何创建跨平台项目,如何进行基础的布局、如何实现自定义导航栏等等,通过这一系列的文章教程,我们最终要实现一个购物app,今天我们要做购物应用首页的轮播图部分。对于轮播图uniapp提供了相应的组件swiper,并且是支持鸿蒙应用的
布局王 布局王
2个月前
Uniapp开发鸿蒙购物项目教程之样式选择器
大家下午好,今天依然为大家带来鸿蒙跨平台开发教程的分享,我们本系列的教程最终要做一个购物应用,通过这个项目为大家分享uniapp开发鸿蒙应用从配置开发环境到应用打包上架的完成过程。昨天的文章实现了应用首页的轮播图,其中涉及到为轮播图设置样式,放一小段代码带