This repository has been archived on 2024-07-27. You can view files and clone it, but cannot push or open issues or pull requests.
keksAccountGUI/node_modulesOLD/vuetify/lib/mixins/scrollable/index.js
2019-08-11 20:48:02 +02:00

97 lines
No EOL
2.1 KiB
JavaScript

// Directives
import { Scroll } from '../../directives'; // Utilities
import { consoleWarn } from '../../util/console'; // Types
import Vue from 'vue';
/**
* Scrollable
*
* Used for monitoring scrolling and
* invoking functions based upon
* scrolling thresholds being
* met.
*/
/* @vue/component */
export default Vue.extend({
name: 'scrollable',
directives: {
Scroll
},
props: {
scrollTarget: String,
scrollThreshold: [String, Number]
},
data: () => ({
currentScroll: 0,
currentThreshold: 0,
isActive: false,
isScrollingUp: false,
previousScroll: 0,
savedScroll: 0,
target: null
}),
computed: {
/**
* A computed property that returns
* whether scrolling features are
* enabled or disabled
*/
canScroll() {
return typeof window !== 'undefined';
},
/**
* The threshold that must be met before
* thresholdMet function is invoked
*/
computedScrollThreshold() {
return this.scrollThreshold ? Number(this.scrollThreshold) : 300;
}
},
watch: {
isScrollingUp() {
this.savedScroll = this.savedScroll || this.currentScroll;
},
isActive() {
this.savedScroll = 0;
}
},
mounted() {
if (this.scrollTarget) {
this.target = document.querySelector(this.scrollTarget);
if (!this.target) {
consoleWarn(`Unable to locate element with identifier ${this.scrollTarget}`, this);
}
}
},
methods: {
onScroll() {
if (!this.canScroll) return;
this.previousScroll = this.currentScroll;
this.currentScroll = this.target ? this.target.scrollTop : window.pageYOffset;
this.isScrollingUp = this.currentScroll < this.previousScroll;
this.currentThreshold = Math.abs(this.currentScroll - this.computedScrollThreshold);
this.$nextTick(() => {
if (Math.abs(this.currentScroll - this.savedScroll) > this.computedScrollThreshold) this.thresholdMet();
});
},
/**
* The method invoked when
* scrolling in any direction
* has exceeded the threshold
*/
thresholdMet() {}
}
});
//# sourceMappingURL=index.js.map