用Vue来实现音乐播放器(八):自动轮播图啊

slider.vue组件的模板部分

<template>
  <div class="slider" ref="slider">
    <div class="slider-group" ref="sliderGroup">
    //要注意slot插槽里面的数据要先渲染出来
      <slot>
      </slot>
    </div>
    <div class="dots">
      <span class="dot" :class="{active: currentPageIndex === index }" v-for="(item, index) in dots" :key="index"></span>
    </div>
  </div>
</template>
<script>
  import {addClass} from ‘../../common/js/dom.js‘
  import BScroll from ‘better-scroll‘
  export default{
    data() {
      return {
        dots:[],
        currentPageIndex: 0
      }
    },
      props: {
        loop: {
            type: Boolean,
            default: true
        },
        autoPlay: {
            type: Boolean,
            default: true
        },
        interval: {
            type: Number,
            default: 1000
        },
        showDot: {
            type: Boolean,
            default: true
        },
        click: {
            type: Boolean,
            default: true
        },
        threshold: {
            type: Number,
            default: 0.3
        },
        speed: {
            type: Number,
            default: 400
        }
    },
    mounted() {
      this._setSliderWidth()
      setTimeout(() => {
        // 在初始化slider前初始化dot
        this._initDots()
        this._initSlider()
        if (this.autoPlay) {
          this._play()
        }
      }, 20)
      // 监听窗口大小改变时间
      window.addEventListener(‘resize‘, () => {
        if (!this.slider) {
          return
        }
        this._setSliderWidth(true)
        this.slider.refresh()
      })
    },
    methods:{
      _setSliderWidth(isResize) {
        this.children = this.$refs.sliderGroup.children
        let width = 0
        // slider 可见宽度
        let sliderWidth = this.$refs.slider.clientWidth
        for (let i = 0; i < this.children.length; i++) {
          let child = this.children[i]
          // 设置每个子元素的样式及高度
          addClass(child, ‘slider-item‘)
          child.style.width = sliderWidth + ‘px‘
          // 计算总宽度
          width += sliderWidth
        }
        // 循环播放首尾各加一个,因此总宽度还要加两倍的宽度
        if (this.loop && !isResize) {
          width += 2 * sliderWidth
        }
        this.$refs.sliderGroup.style.width = width + ‘px‘
      },
      _initSlider() {
        this.slider = new BScroll(this.$refs.slider, {
            scrollX: true,
            scrollY: false,
            momentum: false,
            snap: {
            loop: this.loop,
            threshold: this.threshold,
            speed: this.speed
            },
            bounce: false,
            stopPropagation: true,
            click: this.click
        });

      this.slider.on("scrollEnd", this._onScrollEnd);
            this.slider.on("touchEnd", () => {
                if (this.autoPlay) {
                    this._play();
                }
            });
        this.slider.on("beforeScrollStart", () => {
            if (this.autoPlay) {
                clearTimeout(this.timer);
            }
            });
        },
        _onScrollEnd() {
            let pageIndex = this.slider.getCurrentPage().pageX;
            this.currentPageIndex = pageIndex; // 第一轮1(第一张图) 2 3 4 0(最后一张图索引为0 因为放在了最前面)  1 2 3 4 0
            if (this.autoPlay) {
                this._play();
            }
        },
        _initDots() {
            this.dots = new Array(this.children.length);
        },
        _play() {
            clearTimeout(this.timer);
            this.timer = setTimeout(() => {
                this.slider.next();
            }, this.interval);
        }
    },
    watch: {
        loop() {
            this.update();
        },
        autoPlay() {
            this.update();
        },
        speed() {
            this.update();
        },
        threshold() {
            this.update();
        }
    }
  }
</script>

原文地址:https://www.cnblogs.com/catbrother/p/9180876.html

时间: 2024-11-03 01:28:10

用Vue来实现音乐播放器(八):自动轮播图啊的相关文章

用Vue来实现音乐播放器(三十八):歌词滚动列表的问题

1.频繁切换歌曲时,歌词会跳来跳去 原因: // 歌词跳跃是因为内部有一个currentLyric对像内部有一些功能来完成歌词的跳跃 //每个currentLyric能实现歌曲的播放跳到相应的位置 是因为它内部有个计时器 //每次currentSong改变的时候都会重新new一个新的lyric-parser出来, //但是我们之前的对象并没有做清理操作 也就是说我们之前对象还是有计时器在里面 //所以歌词会来回闪动 解决办法: 在切换歌曲之前 即getLyric()之前 重新去getLyric(

Android开发本地及网络Mp3音乐播放器(八)状态存取与界面滑动

实现功能: 退出应用时,保存歌曲位置(也就是当前是第几首歌曲) 退出应用时,保存播放模式(也就是用户设置的是顺序播放/随机播放/单曲循环) 进入应用时,读取歌曲位置 进入应用时,读取播放模式 实现PlayActivity(独立音乐播放界面)的专辑图片layout滑动,滑动后展示歌词layout (目前源码,只实现了专辑图片layout与歌词layout,歌词layout的信息填充后续会进行补充) 截止到目前的源码下载: http://download.csdn.net/detail/iwangh

VUE项目实现音乐播放器(四)------- 设计播放进度条 + 播放控制按钮

2020.3.31 9:18 好的,早上好各位,今天我们来进行一个很炫酷的页面开发——播放器控制页面( src\components\Play.vue ),如下图: 我们可以看到,该页面有很多元素组成,歌曲的封面.左上角的页面隐藏按钮,中间的播放进度条.歌词栏.下方的播放控制按钮.右下角的显示播放列表按钮,这些元素完美的结合在一起,整个页面有没有一种很高大上的感觉!好了,让我们来亲自动手实现它吧! 1. 歌曲封面&隐藏按钮 首先通过 getters 获取到歌曲的封面: computed: { i

用Vue来实现音乐播放器(九):歌单数据接口分析

z这里如果我们和之前获取轮播图的数据一样来获取表单的数据  发现根本获取不到 原因是qq音乐在请求头里面加了authority和refer等 但是如果我们通过jsonp实现跨域来请求数据的话  是根本不能够修改请求头的  所以我们就考虑用axios  但是axios又不能进行跨域  那么我们要怎么拿到qq音乐的服务器的数据呢??其实是有办法解决的:我们可以进行后端接口代理  那么什么是后端代理呢?? 如果要使用axios直接进行跨域访问是不可以的,这是就需要配置代理了,为什么要配置代理呢? 原因

用Vue来实现音乐播放器(十四):歌手数据接口抓取

第一步:在api文件夹下创建一个singer.js文件 返回一个getSingerList()方法  使他能够在singer.vue中调用 import jsonp from '../common/js/jsonp.js' import {commonParams,options} from './config.js' export function getSingerList() { const url = 'https://c.y.qq.com/v8/fcg-bin/v8.fcg' cons

用Vue来实现音乐播放器(十六):滚动列表的实现

滚动列表是一个基础组件  他是基于scroll组件实现的 在base文件夹下面创建一个list-view文件夹 里面有list-view.vue组件   <template> <!-- 当父组件传递给子组件的数据发生变化的时候 scroll可以监听到此时高度会发生变化 --> <!-- 子组件这里的:data和props里面的data相对于 --> <!-- 父传子的时候 data是对应的props里面的值 --> <scroll class=&quo

用Vue来实现音乐播放器(二十):Vuex初始化及歌手数据的配置

state:所有组件的所有状态和数据  放入同一个内存空间去管理 我们把它称为state Vue Components:state里面的数据可以方便的映射到组件上 然后渲染组件 Actions:当组件的数据发生变化的时候 它可以通过Dispatch一个Actions 然后Actions可以做一些异步操作 比如与后端的一些交互  然后它可以取commit一个mutations 注意:我们也可以在组件中直接commit一个mutations Mutations:是唯一可以修改State的途径  其他

用Vue来实现音乐播放器(四十):歌单详情页布局以及Vuex实现路由数据通讯

1.歌单详情页是推荐页面的二级路由页面 将推荐页面歌单的数据传到歌曲详情页面  利用vuex 1.首先在state下定义一个歌单对象 disc{} 2.在mutaions-types中  定义一个别名 3.在mutations里面创建更改函数 4.在getters里面将该状态与组件映射 4.在recommed推荐主页引入mapMutations 5.在methods中去拓展mapMutations ...mapMutations({自定义函数名:' mutations-types中的别名 ' 

vue音乐播放器

利用vue写一个简单的音乐播放器,包括功能有歌曲搜索.歌曲播放.歌曲封面.歌曲评论.播放动画.mv播放六个功能. <template> <div class="wrap"> <!-- 播放器主体区域 --> <div class="play_wrap" id="palyer"> <div class="search_bar"> <img src="./