VUE移动端音乐APP学习【四】:scroll组件及loading组件开发
scroll组件
制作scroll组件,然后嵌套一个 DOM 节点,使得该节点就能够滚动。该组件中需要引入 BetterScroll 插件。scroll.vue:
<template>
<div ref="wrapper">
<slot></slot>
</div>
</template> <script>
import BScroll from 'better-scroll'; export default {
name: 'scroll',
props: {
probeType: {
type: Number,
default: 1,
},
click: {
type: Boolean,
default: true,
},
listenScroll: {
type: Boolean,
default: false,
},
data: {
type: Array,
default: null,
},
},
mounted() {
setTimeout(() => {
this._initScroll();
}, 20);
},
methods: {
_initScroll() {
if (!this.$refs.wrapper) {
// eslint-disable-next-line no-useless-return
return;
}
this.scroll = new BScroll(this.$refs.wrapper, {
probeType: this.probeType,
click: this.click,
});
if (this.listenScroll) {
let me = this;
this.scroll.on('scroll', (pos) => {
me.$emit('scroll', pos);
});
}
},
disable() {
this.scroll && this.scroll.disable();
},
enable() {
this.scroll && this.scroll.enable();
},
refresh() {
this.scroll && this.scroll.refresh();
},
},
watch: {
data() {
setTimeout(() => {
this.refresh();
}, this.refreshDelay);
},
},
};
</script>在
recommend组件中引入scroll组件:<scroll ref="scroll" class="recommend-content" :data="discList">
<div>
<div class="slider-wrapper" v-if="recommends.length">
...
</div>
</scroll> import Scroll from '../../base/scroll/scroll'; components: {
Slider,
Scroll,
},注意:在
discList数据渲染之前,scroll组件所包裹的 DOM 节点是没有高度的,页面是无法滚动的,所以需要绑定数据,当discList数据渲染后,scroll组件监听并调用refresh()方法才能使页面滚动。由于轮播图和推荐歌单是两个不同接口返回的数据并且异步请求返回数据的时间点并不一致,scroll组件所监听到的数据就会不完整,所计算的DOM高度就偏小,会导致页面无法滚动或滚动不完整。
解决方法:
在图片中添加loadImage事件,当图片加载时就重新调用scroll组件的refresh()方法,重新计算 DOM 的高度,轮播图的图片有多张,每张图片加载后就会重新调用refresh()方法<a :href="item.jumpurl">
<img class="needsclick" @load="loadImage" :src="item.picurl" >
</a> loadImage() {
if (!this.checkLoaded) {
this.$refs.scroll.refresh();
this.checkLoaded = true;
} },
图片懒加载
对于图片过多的页面,为了加速页面加载速度,需要将页面内未出现的可视区域内的图片先不加载,等到滚动到可视区的时候再去加载,也就是图片懒加载。
图片懒加载需要用到 vue-lazyload 插件
// main.js import VueLazyLoad from 'vue-lazyload' Vue.use(VueLazyLoad, {
loading: require('common/image/default.png')
}) // recommend.vue <img width="60" height="60" v-lazy="item.picUrl">效果图:
Loading组件
loading.vue:
<template>
<div class="loading">
<img src="./loading.gif" alt="" width="24" height="24">
<p class="desc">{{title}}</p>
</div>
</template> <script>
export default {
name: 'loading',
props: {
title: {
type: String,
default: '正在载入……',
},
},
};
</script> <style lang="scss" scoped>
.loading {
width: 100%;
text-align: center; .desc {
line-height: 20px;
font-size: $font-size-small;
color: $color-text-l;
}
}
</style>在recommend.vue中使用loading组件:
<div class="loading-container" v-show="!discList.length">
<loading></loading>
</div> import Loading from '../../base/loading/loading'; components: {
Slider,
Scroll,
Loading,
},效果图:
VUE移动端音乐APP学习【四】:scroll组件及loading组件开发的更多相关文章
- 获取qq音乐json数据---某课网音乐app学习
移动端qq音乐地址:https://m.y.qq.com/ .抓取QQ音乐数据 请求首页时,有如下链接,回调了jsonp https://c.y.qq.com/splcloud/fcgi-bin/p. ...
- 【音乐App】—— Vue-music 项目学习笔记:项目准备
前言: 学习慕课网Vue高级实战课程后,在实践中总结一些这个项目带给自己的收获,希望可以再次巩固关于Vue开发的知识.这一篇主要梳理:项目概况.项目准备.页面骨架搭建.项目github地址:https ...
- 如何用vue打造一个移动端音乐播放器
写在前面 没错,这就是慕课网上的那个vue音乐播放器,后台是某音乐播放器的线上接口扒取,虽然这类项目写的人很多,但不得不说这还是个少有的适合vue提升的好项目,做这个项目除了想写一个比较大并且功能复杂 ...
- vue移动音乐app开发学习(三):轮播图组件的开发
本系列文章是为了记录学习中的知识点,便于后期自己观看.如果有需要的同学请登录慕课网,找到Vue 2.0 高级实战-开发移动端音乐WebApp进行观看,传送门. 完成后的页面状态以及项目结构如下: 一: ...
- vue移动音乐app开发学习(二):页面骨架的开发
本系列文章是为了记录学习中的知识点,便于后期自己观看.如果有需要的同学请登录慕课网,找到Vue 2.0 高级实战-开发移动端音乐WebApp进行观看,传送门. 完成后的页面状态以及项目结构如下: 一: ...
- vue移动音乐app开发学习(一):环境搭建
本系列文章是为了记录学习中的知识点,便于后期自己观看.如果有需要的同学请登录慕课网,找到Vue 2.0 高级实战-开发移动端音乐WebApp进行观看,传送门. 一:使用vue-cli脚手架搭建: 1: ...
- day 84 Vue学习四之过滤器、钩子函数、路由、全家桶等
本节目录 一 vue过滤器 二 生命周期的钩子函数 三 vue的全家桶 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 Vue的过滤器 1 moment.js 在这里我们先介绍一个 ...
- 【音乐App】—— Vue-music 项目学习笔记:搜索页面开发
前言:以下内容均为学习慕课网高级实战课程的实践爬坑笔记. 项目github地址:https://github.com/66Web/ljq_vue_music,欢迎Star. 搜索歌手歌曲 搜索历史保存 ...
- 【音乐App】—— Vue-music 项目学习笔记:播放器内置组件开发(二)
前言:以下内容均为学习慕课网高级实战课程的实践爬坑笔记. 项目github地址:https://github.com/66Web/ljq_vue_music,欢迎Star. 播放模式切换 歌词滚动显示 ...
随机推荐
- PAT L2-004. 这是二叉搜索树吗?【前序遍历转化为后序遍历】
一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的键值: 其左右子树都是二叉搜索树. 所谓二叉搜索 ...
- sdutoj2887
#include <stdio.h> #include <math.h> int main(){ int px,tx;double alpha; int T;scanf(&qu ...
- Linux 驱动框架---驱动中的并发
并发指多个执行单元被同时.并行的执行,而并发执行的单元对共享资源的访问就容易导致竟态.并发产生的情况分为抢占和并行(多核)和硬抢占(中断).Linux为解决这一问题增加了一系列的接口来解决并发导致的竟 ...
- μC/OS-III---I笔记9---任务等待多个内核对象和任务内建信号量与消息队列
在一个任务等待多个内核对象在之前,信号量和消息队列的发布过程中都有等待多个内核对象判断的函数,所谓任务等待多个内核对象顾名思义就是一任务同时等待多个内核对象而被挂起,在USOC-III中一个任务等待多 ...
- Github App version released icons
# Github App version released icons http://shields.io/ Build Travis: https://img.shields.io/travis/U ...
- npm & cmd & bash & bin
npm & cmd & bash & bin bin node_modules & nested npm publish & all src files npm ...
- TweenMax & GSAP & SVG Animation
TweenMax & GSAP & SVG Animation svg animation https://greensock.com/tweenmax GSAP https://ww ...
- Chrome 80 & SameSite & cookie
Chrome 80 & SameSite & cookie chrome://settings/help https://developers.google.com/web/updat ...
- requestAnimationFrame & canvas
requestAnimationFrame & canvas https://codepen.io/xgqfrms/pen/jOEPjLJ See the Pen requestAnimati ...
- Masterboxan INC是你靠近财富的最佳选择
Masterboxan INC万事达资产管理有限公司(公司编号:20151264097)是一家国际性资产管理公司,主要提供外汇.证券.投资管理和财富管理等金融服务,其在投资方面一直倡导组合型投资构建稳 ...

