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

news/2024/7/10 2:06:15 标签: vue, javascript

这里写目录标题

  • 用BetterScroll 2.x 和网易云的api接口实现轮播图
    • 调用网易云api
      • 下载安装网易云音乐的api接口
      • router.js 和 main.js 的配置
    • 组件banner.vue
      • BetterScroll 2.x的使用
      • $refs
      • watch
    • App.vue

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

在这里插入图片描述

调用网易云api

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

在这里插入图片描述

javascript">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

javascript">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参数就可以了。我们来看一个简单的配置。

javascript">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

vue_63">组件banner.vue

BetterScroll 2.x的使用

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

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

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

// or

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

// or

yarn add @better-scroll/slide@next

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

javascript"><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

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

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

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

javascript"><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>

vue_292">App.vue

javascript"><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>

http://www.niftyadmin.cn/n/883347.html

相关文章

qt creator 打开qss文件 语法高亮

qt 默认只有css文件高亮&#xff0c;你可以把qss文件重命名为css&#xff0c;或者 再下边这里增加*.css;.CSSL;.qss Deepin 系列教程 Deepin 使用教程&#xff1a;前言

音乐播放器的设计与实现 功能要求:设计一款基于HTML5音频技术的音乐播放器,要求实现音乐的播放、暂停、音量大小调节、上一首和下一首切换,运行效果如图所示

本地资源在谷歌浏览器上是无法快进的。这个是重点!!!有很多解决方法&#xff0c;我直接用火狐就ok了 https://www.gaitubao.com/# 改图宝链接 用于修改歌曲头像 大小标准显示才正常 我用的大小为300&#xff0c;300 我用的图标全都来自iconfont Iconfont-阿里巴巴矢量图标库 贴…

基于HTML5视频技术的在线视频播放页面,包含视频播放窗口和课程目录列表。其中视频播放窗口带有相关控件,可以由用户单击切换全屏效果,以及随时暂停和拖拽到指定时间继续播放。点击目录直接跳转当当前画面。

演示不要用谷歌&#xff0c;谷歌不支持本地拖拽进度条 我用的是火狐 主要就是label for 来替代按钮的样式 代码很简单 但是也很实用 学会label for 以后按钮越来越好看了 跳转时间通过currentTime来设置 <!doctype html> <html lang"en"> <head>…

qt 计算两个点的距离、求三点的曲率半径和曲率、求中心线曲率最大的系列点

有个需求是寻找中心线上曲率最大的一系列点&#xff0c;这里记录下 // 求dot距离double distance(const QList<double> a, const QList<double> b) { //求两点间距离double dis;//两点间距离double x, y, z;x a[0] - b[0];y a[1] - b[1];z a[2] - b[2];dis …

运动轨迹绘制页面的设计与实现:仿照运动APP的轨迹记录功能将HTML5地理定位技术用于移动设备,实现地图显示与用户打车从起点到终点的运动轨迹绘制效果。

随着人们对健康意识的提高&#xff0c;各类运动软件也逐渐流行。由于手机方便携带&#xff0c;又自带GPS定位功能&#xff0c;因此APP成为用户的首选。例如咕咚、益动等。这些软件都具有类似的一个功能模块&#xff0c;就是在电子地图上跟踪记录用户跑步或骑行的运动轨迹。 实现…

qt 排序

有一组 double 需要排序&#xff0c;每个double有一个序号&#xff08;不连续&#xff09; 比如&#xff1a; key &#xff1a;5 &#xff0c;value&#xff1a;10.0 key &#xff1a;9 &#xff0c;value&#xff1a;11.0 key &#xff1a;15 &#xff0c;value&#xff1a;9.…

基于Web存储技术的网页主题切换设置

功能要求&#xff1a;使用Web存储中的localStorage技术可以把用户对用网页主题样式设置的内容永久存储下来。本例将实现一个网页设置页面&#xff0c;用户可以自定义页面的主题颜色与字体风格并将其存储在localStorage中&#xff0c;当重新加载该页面时会显示上一次保存的样式要…

网站建设、管理

网站建设、管理 1 Linux 快速建站 之前写过一篇win下建站的博客快速搭建自己个人博客网站 自从换了工作差不多有四五个月了&#xff0c;也没有管过自己的个人网站&#xff0c;一直就挂在哪里。突然心血来潮想整理下&#xff0c;登录发现&#xff0c;win竟然不会用了。再加上自…