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. 播放模式切换 歌词滚动显示 ...
随机推荐
- c# App.xaml
随着wpf自动创建的,是项目的起始点..Net先再App里找,找到了window然后开启window,项目真正的起始点是在App里. 这两个 (App 的xaml和cs文件)和MainWindow 的 ...
- 脚本化CSS(通过JS来间接操作CSS)
(一)通过.style.形式,获取的是行间样式,可读可写 1.行间样式语法 1 <div style="width:100px;border:5px solid red;height: ...
- HDU 6155 Subsequence Count(矩阵 + DP + 线段树)题解
题意:01串,操作1:把l r区间的0变1,1变0:操作2:求出l r区间的子序列种数 思路:设DP[i][j]为到i为止以j结尾的种数,假设j为0,那么dp[i][0] = dp[i - 1][1] ...
- 正则表达式 test 踩坑指南
正则表达式 test 踩坑指南 test 只能使用一次,第二次返回的是错误结果! reg = /edg|edge/g; /edg|edge/g reg.test(`edg`) true reg.tes ...
- Subresource Integrity,SRI,Cross-Origin Resource Sharing (CORS),子资源的完整性检查,Subresource Integrity checking,CORS,Ajax
SRI https://code.jquery.com/ SRI是一种新的W3C规范,它允许Web开发人员,以确保托管在第三方服务器上的资源是没有被篡改的.SRI的使用,建议作为最佳实践,每当库从第三 ...
- CORS All In One
CORS All In One 跨域资源共享 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS CORS 请求类型 简单请求 预检请求 Ac ...
- 中文域名 & 原理剖析
中文域名 & 原理剖析 https://zh.wikipedia.org/wiki/中文域名 原理 利用浏览器的对字符编码的转换算法,实现 unicode 字符显示! 国际化域名: 就是一个普 ...
- linux bash which
linux bash which https://linuxize.com/post/linux-which-command/ Linux which command is used to ident ...
- css 使用paint创建自定义css
See also: https://houdini.how/ https://github.com/una/extra.css#readme
- 大胆预计SPC算力空投收益,月收益22.8%
此前,NGK官方公告表示,NGK算力持有者获得SPC的数量是根据200万枚SPC除以全网算力总量决定的. 举个例子,假设全网算力总量为500万,那么每个算力持有者如果持有一个算力,则可获得200万÷5 ...

