vue全屏轮播

自己造的一个Vue轮播图,支持全屏、无限滚动,功能有待完善

敬上代码,抛砖引玉

<template>
    <div class="swiper-wrap" ref="swiperWrap" :style=‘`height: ${config.height}px;`‘>
        <div class="handle-direction">
            <span class="prve" @click="prve">&lt;</span>
            <span class="next" @click="next">&gt;</span>
        </div>
        <div class="showView" :style=‘`width: ${config.width}px; height: ${config.height}px;`‘>
            <ul ref="list" class="list" :style=‘`left: -${left}px; transition: none`‘>
                <li v-for="(item, i) in swiperList" :style=‘`width: ${config.width}px; height: ${config.height}px;`‘ :key="i">{{item}}</li>
            </ul>
        </div>
    </div>
</template>
 <script>
export default {
    data () {
        return {
            config: {
                height: 667,
                width: 1920,
                current: 1,
                transitionTime: 1,
                delay: 0
            },
            list: [1, 2, 3, 4]
        }
    },
    computed: {
        left () {
            return this.config.width * this.config.current
        },
        swiperList () {
            let swiperList = [this.list[this.list.length-1], ...this.list, this.list[0]]
            return swiperList
        }
    },
    mounted () {
        const $this = this
        this.resetWidth()
        window.addEventListener(‘resize‘, () => {
            $this.resetWidth()
        })
    },
    methods: {
        resetWidth () {
            const width = this.$refs.swiperWrap.clientWidth
            this.config.width = width
            this.config.height = width / 1920 * 667
        },
        prve () {
            if (new Date().valueOf() - this.config.delay <= this.config.transitionTime * 1000) {
                return
            }
            this.config.delay = new Date().valueOf()
            this.animation(false)
        },
        next () {
            if (new Date().valueOf() - this.config.delay <= this.config.transitionTime * 1000) {
                return
            }
            this.config.delay = new Date().valueOf()
            this.animation(true)
        },
        animation (isNext) {
            const $this = this
            const length = this.list.length
            let timer = null
            let $ul = this.$refs.list
            $ul.style.transition = `left ${this.config.transitionTime}s`
            isNext ? this.config.current ++ : this.config.current --
            clearTimeout(timer)
            if (this.config.current > length) {
                timer = setTimeout(() => {
                    $ul.style.transition = ‘none‘
                    $this.config.current = 1
                    clearTimeout(timer)
                }, 1050);
                timer = setTimeout(() => {
                    $ul.style.transition = `left ${this.config.transitionTime}s`
                    clearTimeout(timer)
                }, 1100);
            }
            if (this.config.current < 1) {
                timer = setTimeout(() => {
                    $ul.style.transition = ‘none‘
                    $this.config.current = length
                    clearTimeout(timer)
                }, 1050);
                timer = setTimeout(() => {
                    $ul.style.transition = `left ${this.config.transitionTime}s`
                    clearTimeout(timer)
                }, 1100);
            }
        }
    }
}
</script>
<style lang="stylus" scoped>
.swiper-wrap
    position relative
   &:hover
        .handle-direction
            transition opacity 0.3s
            opacity 1
.handle-direction
    opacity 0
    span
        display inline-block
        cursor pointer
        border-radius 3px
        width 20px
        height 20px
        line-height 20px
        background rgba(150, 150, 150, 0.2)
        z-index 2
        position absolute
        top 50%
        margin-top -10px
    .prve
        left 20px
    .next
        right 20px
.showView, .list
    position absolute
    top 0
    left 0
.showView
    overflow hidden
.list
    width 100000%
    text-align left
    li
        text-align center
        display inline-block
        &:nth-child(1)
            background #eee
        &:nth-child(2)
            background #bbb
        &:nth-child(3)
            background #ccc
        &:nth-child(4)
            background #ddd
        &:nth-child(5)
            background #eee
        &:nth-child(6)
            background #bbb
</style>

原文地址:https://www.cnblogs.com/zhou195/p/9734780.html

时间: 2024-10-11 16:39:35

vue全屏轮播的相关文章

淘宝店铺装修如何实现全屏轮播

淘宝店装移植有一个神秘的模块,那就是—全屏轮播,这个神奇的模块,能提高店铺的档次,给与顾客视觉冲击,提升顾客印象但是由于淘宝常规用户不支持CSS(用来定义网页样貌的能力),所以我们无法用简单的div+CSS来做出属于自己的全屏轮播强大的装修师们几经研究,终于摆脱了CSS的束绷,结合淘宝的轮播组件,单靠DIV代码就实现了全屏轮播(有缺点) 那么.不要CSS,我们怎么实现全屏轮播呢? 首先我要告诉大家全屏轮播的核心CSS属性—position:absolute 第一节:核心属性 position :

淘宝店如何加入全屏轮播图片

淘宝店如何加入全屏轮播图片? | 浏览:5779 | 更新:2014-06-11 11:31 | 标签: 淘宝 1 2 3 4 5 分步阅读 百度经验:jingyan.baidu.com 开淘宝店的朋友,看到很多店铺有各式各样的轮播大图,很高端大气,您是否也想拥有一款属于自己的轮播图呢?今天我就交给大家如何制作全屏轮播图. 百度经验:jingyan.baidu.com 工具/原料 电脑/网络 百度经验:jingyan.baidu.com 方法/步骤 1 登录淘宝店. 登录到您的淘宝店,点击“卖家

关于最近在做的一个js全屏轮播插件

最近去面试了,对方要求我在一个星期内用原生的js代码写一个全屏轮播的插件,第一想法就是跟照片轮播很相似,只是照片轮播是有定义一个宽高度大小已经确定了的容器用来存储所有照片,然后将照片全部左浮动,利用margin-left的值不断变化,来改变显示哪张照片,当达到最后一张的时候,将第一张照片appendChild到最后一张照片的后面,如果有左右移动的话,当到达第一张照片时,还要继续左移动的话,就将最后一张照片利用insertBefore,将最后一张照片放在第一张照片的前面,这两个方法都只是改变子元素

淘宝店铺首页全屏轮播图制作

淘宝店铺首页全屏轮播图制作 | 浏览:1081 | 更新:2014-09-27 12:03 | 标签: 淘宝 很多朋友都想要做全屏轮播图,接下来我来说说我的经验 工具/原料 美图秀秀 方法/步骤 1.首先要制作或者搜寻图片宽度1920高度610的高画质图片 2.上传到淘宝图片空间,并复制其连接 3.将复制的连接替换到如下图以“jpg”结尾的那个地方.(有3个地方,可用3张图替换) 4.复制代码,进入淘宝店铺装修页面,新建“自定义内容区” 5.将自定义内容区置于顶部,编辑,输入代码界面,黏贴代码,

全屏banner及全屏轮播

一.全屏banner 1.设置网页图片全屏banner <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> * { margin: 0; padding: 0; } .pic { width: 100%; height: 600px; backgroun

加载并全屏轮播加载的其他网站的页面

加载并全屏轮播加载的其他网站的页面 一.  设计思路 1.使用iframe标签加载其他网站页面 2.通过js替换iframe的加载链接 3.通过js的定时器实现轮播 4.通过js实现全屏 二.代码小解 1.加载页面 <iframe src="https://www.baidu.com" width='100%' height='100%' frameborder='0' name="_blank" id="_blank"></i

升级版的全屏轮播图

具备的功能: 1.左右自动轮播 2.鼠标悬停在图片上时,停止轮播,移除时,开始轮播 3,点击导航圆点,移到响应位置图片,同时导航圆点有0.3秒的显示特效 4.鼠标移到屏幕左右时,出现线性渐变特效,点击,会左右移到图片 最终结果图: 完整代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title>

实现全屏轮播,并且轮播div中的文字盒子一直自动垂直居中

效果如下: 直接上代码了: 说明:轮播图基于swiper.js,自行下载.css在最后 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.

javascript无缝全屏轮播

虽然平时能利用插件来实现,但是总是觉得,如果连个无缝轮播都写不出来,还玩个毛线: 其实现在还真的是玩毛线,因为代码都是别人的,不过嘛,很快就变成是我的啦! 代码还没封装成插件,其实我也还没弄清楚. 下面有很多注释的,如果路过的你认为有错误,请指出来啊,使劲拍. html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-C