vue_music:封装scroll.vue组件
在项目中经常用到滚动,结合Better-scroll封装了sroll.vue组件
参考链接:https://ustbhuangyi.github.io...
http://www.imooc.com/article/...**better-scroll 只处理容器(wrapper)的第一个子元素(content)的滚动,其它的元素都会被忽略**。
1.html部分
这个很简单,有一个插槽slot**better-scroll 只处理容器(wrapper)的第一个子元素(content)的滚动,其它的元素都会被忽略。**
<template>
<div ref="wrapper">
<slot></slot>
</div>
</template>
2.功能
- 滚动特性props:是否截流滚动、是否派发事件、是否有数据传入
- 初始化Better-scroll
export default {
props: {
probeType: {
//有时候我们需要知道滚动的位置。
//当 probeType 为 1 的时候,会非实时(屏幕滑动超过一定时间后:截流)派发scroll 事件;
//当 probeType 为 2 的时候,会在屏幕滑动的过程中实时(不截流)的派发 scroll 事件;
//当 probeType 为 3 的时候,不仅在屏幕滑动的过程中,而且在 momentum(回弹) 滚动动画运行过程中实时派发 scroll 事件。
//如果没有设置该值,其默认值为 0,即不派发 scroll 事件
type: Number,
default: 1
},
click: {
//click是否派发click事件,通常判断浏览器派发的click还是betterscroll派发的click,
//可以用event._constructed判断,为true,则是betterscroll派发的
type: Boolean,
defalut: true
},
data: {
//滚动的界面是否有了数据(这些数据多数是异步获取的)
//根据这个当有数据的时候refresh,在watch中有相关逻辑
type: Array,
default: null
},
listenScroll: {
//是否派发滚动位置
type: Boolean,
default: false
},
//实现上拉刷新
pullup: {
type: Boolean,
default: false
},
//实现下拉刷新
pulldown: {
type: Boolean,
default: false
},
//开始滚动的时候派发一个事件
beforeScroll: {
type: Boolean,
default: false
}
},
data() {
return {
}
},
mounted() {
setTimeout(() => {
this._initScroll() //初始化
}, 20)
},
methods: {
_initScroll() {
if (!this.$refs.wrapper) {
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) => {
//pos.y
//往上滑动负数,往下滑动正数
me.$emit('scroll', pos)
})
}
//上拉刷新,滚动到底部派发一个事件
if (this.pullup) {
this.scroll.on('scrollEnd', () => {
if(this.scroll.y <= (this.scroll.maxScrollY + 50)) {
this.$emit('scrllToEnd')
}
})
}
//是否派发顶部下拉事件,用于下拉刷新
if (this.pulldown) {
this.scroll.on('touchend', (pos) => {
//下拉动作
if (pos.y > 50) {
this.$emit('pulldown')
}
})
}
//开始滚动的时候派发一个事件
//比如,搜索下拉框,滚动下拉框的时候,派发开始滚动事件,从而收起键盘
if (this.beforeScroll) {
this.scroll.on('beforeScrollStart', () => {
this.$emit('beforeScroll')
})
}
},
enable() {
this.scroll && this.scroll.enable()
},
disable() {
this.scroll && this.scroll.disable()
},
refresh() {
this.scroll && this.scroll.refresh()
},
scrollTo() {
this.scroll && this.scroll.scrollTo.apply(this.scroll, arguments)
},
scrollToElement() {
this.scroll && this.scroll.scrollToElement.apply(this.scroll, arguments)
}
},
watch: {
data() {
setTimeout(() => {
this.refresh()
}, 20)
}
}
}
3.使用
在recommend.vue中使用

注:样式
//控制高度才能滚动
.recommend {
position: fixed;
width: 100%;
top: 88px;
bottom: 0;
}
.recommend-content {
height: 100%;
overflow: hidden;
}
原文地址:https://segmentfault.com/a/1190000016979411
vue_music:封装scroll.vue组件的更多相关文章
- html5音频audio对象封装成vue组件的方式调用以及setTimeout如何在vue2生效 (vue2正在熟悉中,ajax还是用jQuery来写舒服些,里面含有一些php写法可略过) 此网页应用在PC不考虑手机端
// vue2 组件封装如下: <template> <div> <div><!--vue element 组件的引用 Switch 开关 不懂请自行百度(重 ...
- 一篇文章带你使用Typescript封装一个Vue组件
一.搭建项目以及初始化配置 vue create ts_vue_btn 这里使用了vue CLI3自定义选择的服务,我选择了ts.stylus等工具.然后创建完项目之后,进入项目.使用快捷命令code ...
- 【vue系列之三】从一个vue-pdf-shower,说说vue组件和npm包
前言 从去年年初开始,自己便下决心要写一个vue系列的博客,但时至今日,才写系列的第三篇博客,想来甚是惭愧. 但是慢归慢,每一篇都要保证质量,以及要写出自己的心路历程,防止自己工作中填的坑再让读者走一 ...
- vue2.0 如何自定义组件(vue组件的封装)
一.前言 之前的博客聊过 vue2.0和react的技术选型:聊过vue的axios封装和vuex使用.今天简单聊聊 vue 组件的封装. vue 的ui框架现在是很多的,但是鉴于移动设备的复杂性,兼 ...
- 从零开始教你封装自己的vue组件
组件(component)是vue.js最强大的功能之一,它可以实现功能的复用,以及对其他逻辑的解耦.但经过一段时间的使用,我发现自己并没有在业务中发挥出组件的最大价值.相信很多刚开始使用vue的朋友 ...
- 如何封装使用api形式调用的vue组件
在实际开发中一般有两种封装vue组件的方法:一种就是常用的的通过props父组件传值给子组件的方法: 子组件 父组件: 还有一种就是通过调用api的形式,下面例子是本人在实际项目中封装的一个自定义图标 ...
- 手把手教你封装 Vue 组件,并使用 npm 发布
Vue 开发插件 开发之前先看看官网的 开发规范 我们开发的之后期望的结果是支持 import.require 或者直接使用 script 标签的形式引入,就像这样: // 这里注意一下包的名字前缀是 ...
- vue组件封装及父子组件传值,事件处理
vue开发中,把有统一功能的部分提取出来,作为一个独立的组件,在需要使用的时候引入,可以有效减少代码冗余.难点在于如果封装,使用,如何传参,派发事件等,我会采取倒叙的方式进行说明.(本文总结于Vue2 ...
- 一个 VUE 组件:实现子元素 scroll 父元素容器不跟随滚动(兼容PC、移动端)
介绍 我们经常遇到一种情况.当滑动滚动条区域时,子元素滚动条到底部或顶部时就会触发父级滚动条,父级滚动条同理会继续向上触发,直至body容器.这是浏览器默认的滚动行为. 但是很多情况,我们想要子元素滚 ...
随机推荐
- Uvalive-4494-(数位dp)
题意:求a->b中的二进制出现过多少个1,很显然的数位dp,对于某一位来说,如果这位是0,那么dp[i]=dp[i-1] 如果这一位是1 那么dp[i]=dp[i-1]+1<<(p ...
- Http请求数据解释
请求的数据里面包含三个部分内容 : 请求行 . 请求头 .请求体 请求行 POST /examples/servlets/servlet/RequestParamExample HTTP/1.1 PO ...
- NET Core Web发布包
给ASP.NET Core Web发布包做减法 https://www.cnblogs.com/sheng-jie/p/9122582.html 1.引言 紧接上篇:ASP.NET Core Web ...
- HDU 1176 免费馅饼 矩阵取数, dp + 滚动数组
http://acm.hdu.edu.cn/showproblem.php?pid=1176 首先可以处理出整张地图的状态. book[T][POS]表示第T秒,在第pos个地方有多少个馅饼. dp[ ...
- (转)nginx应用总结(2)--突破高并发的性能优化
原文:http://www.cnblogs.com/kevingrace/p/6094007.html 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题. ...
- [干货分享]AXURE整套高保真UI框架和元件组(白色风格)
写在前面 强烈建议开始之前阅读以下第一篇高保真UI框架的前面部分,以了解设计思想,这篇文章不再重复介绍: AXURE-整套可复用的高保真元件和框架之暗黑风格 本次共享模板的UI规范 注:由于篇幅问 ...
- Servlet 示例
引入jar包: servlet-api.jar ParameterServlet.java package com.mousewheel.springmvc; import java.io.IOExc ...
- 【Design Patterns】监听器模式
监听器模式 监听器模式其实是观察者模式中的一种,两者都有关于回调的设计. 与观察者模式不同的是,观察者模式中存在的角色为观察者(Observer)和被观察者(Observable) 而监听器模式中存在 ...
- 数据结构-List接口-LinkedList类-Set接口-HashSet类-Collection总结
一.数据结构:4种--<需补充> 1.堆栈结构: 特点:LIFO(后进先出);栈的入口/出口都在顶端位置;压栈就是存元素/弹栈就是取元素; 代表类:Stack; 其 ...
- jquery解析xml,获取xml标签名
先给一个简单的XML,结构如下 <?xml version="1.0" encoding="uft-8" ?> <msg> <ro ...