网易云项目 ----轮播图(BetterScroll 2.x 的使用)

用BetterScroll 2.x 和网易云的api接口实现轮播图

在这里插入图片描述

调用网易云api

下载安装网易云音乐的api接口

在这里插入图片描述

git  clone   https://github.com/Binaryify/NeteaseCloudMusicApi.git  /* 下载 */

cd NeteaseCloudMusicApi /* 进入项目的根目录*/

yarn 或者 npm install  /*安装依赖*/

node app.js   /* 运行项目,启动该 */

打开网易云音乐api http://musicapi.leanapp.cn/ 戳这!!!

router.js 和 main.js 的配置

在这里插入图片描述
main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router/router'
import Axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios,Axios);
Vue.config.productionTip = false

new Vue({
  render: h => h(App),
    router,
}).$mount('#app')

router.js

开发中有时候我们虽然设置的路径不一致,但是我们希望跳转到同一个页面,或者说是打开同一个组件。这时候我们就用到了路由的重新定向redirect参数。
就不会跳转网页 网页上会显示 /#/
redirect基本重定向
我们只要在路由配置文件中(/src/router/index.js)把原来的component换成redirect参数就可以了。我们来看一个简单的配置。

import Vue from 'vue'
import VueRouter from 'vue-router'
import banner from '../components/banner'
Vue.use(VueRouter);
const router = new VueRouter({
    linkActiveClass:'active',
    routes:[
        {path:'/',redirect:'/lunbotu'},]
});
export default router

组件banner.vue

BetterScroll 2.x的使用

https://better-scroll.github.io/docs/zh-CN/plugins/slide.html#%E4%BB%8B%E7%BB%8D
戳我!!!

NPM
BetterScroll 托管在 NPM 上,执行如下命令安装:

npm install @better-scroll/core@next --save

// or

yarn add @better-scroll/core@next
安装
npm install @better-scroll/slide@next --save

// or

yarn add @better-scroll/slide@next

附上banner 完整代码 开始讲解 其实别看代码这么长 基本都是文档照搬
找到示例
点击 </>
在这里插入图片描述

<template>
    <div class="slide" ref="slide">
        <ul class="slide-wrapper"  ref="slideWrapper">
            <!--//li 的盒子 嵌套img 图片-->
            <slot></slot>
        </ul>
        <div class="bannerDots" >
            <div
                    v-for="(item,index) in bannersData" :key="index"
                    :class="{dots:true,dotActive:index===currentPageIndex}">

            </div>
        </div>
    </div>
</template>

<script>
    import BScroll from '@better-scroll/core'
    import Slide from '@better-scroll/slide'

    BScroll.use(Slide)
    export default {
        data () {
            return {
                slide:null,
                currentPageIndex:0
            }
        },
        props:['bannersData'],
        methods: {
            init() {
                //必须在slide对象拿来做bscroll  要引用
                //初始化 better-scroll
                this.slide = new BScroll(this.$refs.slide, {
                    scrollX: true,
                    scrollY: false,
                    slide: {
                        loop: true,
                        threshold: 100
                    },
                    useTransition: true,
                    momentum: false,
                    bounce: false,
                    stopPropagation: true,
                    probeType: 2
                })
                //设置slide-item的样式
                this.children=this.$refs.slideWrapper.children;
                console.log(this.children);
                for (let i=0;i<this.children.length;i++){
                    this.children[i].classList.add('slide-item')
                }
                this.autoGoNext();
                this.slide.on('scrollEnd',()=>{
                    //检测如果滚动就触发回调函数
                    // console.log('scrollEnd');
                    this.autoGoNext()
                });
                this.slide.on('beforeScrollStart',()=>{
                    clearTimeout(this.playTimer)
                });
                this.slide.on('touchEnd',()=>{
                    this.autoGoNext();
                });
                this.slide.on('slideWillChange', (page) => {
                    this.currentPageIndex = page.pageX
                })
            },
            //L轮播功能
            nextPage() {
                this.slide.next()
            },
            autoGoNext() {
                clearTimeout(this.playTimer)
                this.playTimer = setTimeout(() => {
                    this.nextPage()
                }, 5000)
            }


        },

    // vue是数据驱动型 指的是东西放到页面上 呈现到页面上是需要时间的
        watch:{
            bannersData:function () {
                setTimeout(()=>{
                    this.init()
                },20)

            }
        }
    }

</script>

<style scoped>

        *{
            margin:0;
            padding: 0;
            list-style: none;
            resize: none;
            box-sizing: border-box;
            -webkit-tap-highlight-color: transparent;

        }
    
    .slide{
        width:100%;
        overflow: hidden;
    }

    .slide-item{
        width: 100%;
        float: left;

    }
    .slide-item img{
        width: 100%;
        display: block;
    }
    .bannerDots{
        position: relative;
        bottom: 18px;
        left: 80%;
        transform: translateX(-50%);
    }
    .dots{
        width: 8px;;
        height: 8px;
        border-radius: 50%;
        background: gray;
        float: left;
        margin-right: 8px;
    }

    .dotActive{
        background: red;
    }
</style>

$refs

ref 有三种用法:

1、ref 加在普通的元素上,用this.ref.name 获取到的是dom元素

2、ref 加在子组件上,用this.ref.name 获取到的是组件实例,可以使用组件的所有方法。

3、如何利用 v-for 和 ref 获取一组数组或者dom 节点

watch


    // vue是数据驱动型 指的是东西放到页面上 呈现到页面上是需要时间的
        watch:{
            bannersData:function () {
                setTimeout(()=>{
                    this.init()
                },20)

Vue.js 有一个方法 watch,它可以用来监测Vue实例上的数据变动。
示范一个无关的案例 但是可以大概了解一下watch的监测。

如果对应一个对象,键是观察表达式,值是对应回调,值也可以是方法名,或者是对象,包含选项。
在这里插入图片描述

<template>
<div>
    <input type="text" v-model="a">+<input type="text" v-model="b">= <input type="text" v-model="c">
     </div>
</template>

<script>
export default {
    data(){
       return{
           a:0,
           b:0,
           c:0
       }
    },
    watch:{
      a:function (newv,oldv) {
          this.c = Number(newv)+Number(this.b)
      }  ,
        b:function (newv,oldv) {
            this.c = Number(newv)+Number(this.a)
        }
    },
}
</script>

<style>

</style>

App.vue

<template>
    <div>
        <banner :bannersData="banners">
            <li v-for="item in banners " :key="item.bannerId ">
                <a href=""><img :src="item.pic" alt=""></a>
            </li>
        </banner>
    </div>
</template>

<script>
    import banner from './components/banner'
    export default {
        data () {
            return {
                bannerURL:'http://localhost:3000/banner?type=1',
                banners:[],//轮播图数据
            }
        },
        created(){
            this.axios.all([this.getBanner()])
                .then(
                    this.axios.spread(  (bannerData)=> {
                        this.banners = bannerData.data.banners;
                        // console.log(this.banners)
                    } ))
        },

        methods: {
            getBanner(){
                return this.axios.get(this.bannerURL)
            }
        },

        components: {
            banner
        },
    }
</script>

<style scoped>
</style>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于Node.js,提供网易云所有API接口数据,包括:登录,获取用户信息 , 歌单,收藏,mv, dj 数量 获取用户歌单 获取用户电台 获取用户关注列表 获取用户粉丝列表 获取用户动态 获取用户播放记录 获取精品歌单 获取歌单详情 搜索 搜索建议 获取歌词 歌曲评论 收藏单曲到歌单 专辑评论 歌单评论 mv 评论 电台节目评论 banner 获取歌曲详情 获取专辑内容 获取歌手单曲 获取歌手 mv 获取歌手专辑 获取歌手描述 获取相似歌手 获取相似歌单 相似 mv 获取相似音乐 获取最近 5 个听了这首歌的用户 获取每日推荐歌单 获取每日推荐歌曲 私人 FM 签到 喜欢音乐 垃圾桶 歌单 ( 网友精选碟 ) 新碟上架 热门歌手 最新 mv 推荐 mv 推荐歌单 推荐新音乐 推荐电台 推荐节目 独家放送 mv 排行 获取 mv 数据 播放 mv/视频 排行榜 歌手榜 云盘 电台 - 推荐 电台 - 分类 电台 - 分类推荐 电台 - 订阅 电台 - 详情 电台 - 节目 给评论点赞 获取动态 热搜列表(简略) 发送私信 发送私信歌单 新建歌单 收藏/取消收藏歌单 歌单分类 收藏的歌手列表 订阅的电台列表 相关歌单推荐 付费精选接口 音乐是否可用检查接口 登录状态 获取视频播放地址 发送/删除评论 热门评论 视频评论 退出登录 所有榜单 所有榜单内容摘要 收藏视频 收藏 MV 视频详情 相关视频 关注用户 新歌速递 喜欢音乐列表(无序) 收藏的 MV 列表 获取最新专辑 听歌打卡 获取视频标签下的视频 已收藏专辑列表 获取动态评论 歌单收藏者列表 云盘歌曲删除 热门话题 电台 - 推荐类型 电台 - 非热门类型 电台 - 今日优选 心动模式/智能播放 转发动态 删除动态 分享歌曲、歌单、mv、电台、电台节目到动态 通知-私信 通知-评论 通知-@我 通知-通知 设置 云盘数据详情 私信内容 我的数字专辑 batch批量请求接口 获取视频标签列表 全部mv 网易出品mv 收藏/取消收藏专辑 专辑动态信息 热搜列表(详细) 更换绑定手机 检测手机号码是否已注册 初始化昵称 更新歌单描述 更新歌单名 更新歌单标签 默认搜索关键词 删除歌单 电台banner 用户电台 热门电台 电台 - 节目详情 电台 - 节目榜 电台 - 新晋电台榜/热门电台榜 类别热门电台 云村热评 电台24小时节目榜 电台24小时主播榜 电台最热主播榜 电台主播新人榜 电台付费精品榜 歌手热门50首歌曲
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值