109 lines
2.7 KiB
JavaScript
109 lines
2.7 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = void 0;
|
||
|
|
||
|
var _directives = require("../../directives");
|
||
|
|
||
|
var _console = require("../../util/console");
|
||
|
|
||
|
var _vue = _interopRequireDefault(require("vue"));
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
// Directives
|
||
|
// Utilities
|
||
|
// Types
|
||
|
|
||
|
/**
|
||
|
* Scrollable
|
||
|
*
|
||
|
* Used for monitoring scrolling and
|
||
|
* invoking functions based upon
|
||
|
* scrolling thresholds being
|
||
|
* met.
|
||
|
*/
|
||
|
|
||
|
/* @vue/component */
|
||
|
var _default = _vue.default.extend({
|
||
|
name: 'scrollable',
|
||
|
directives: {
|
||
|
Scroll: _directives.Scroll
|
||
|
},
|
||
|
props: {
|
||
|
scrollTarget: String,
|
||
|
scrollThreshold: [String, Number]
|
||
|
},
|
||
|
data: function data() {
|
||
|
return {
|
||
|
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: function canScroll() {
|
||
|
return typeof window !== 'undefined';
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* The threshold that must be met before
|
||
|
* thresholdMet function is invoked
|
||
|
*/
|
||
|
computedScrollThreshold: function computedScrollThreshold() {
|
||
|
return this.scrollThreshold ? Number(this.scrollThreshold) : 300;
|
||
|
}
|
||
|
},
|
||
|
watch: {
|
||
|
isScrollingUp: function isScrollingUp() {
|
||
|
this.savedScroll = this.savedScroll || this.currentScroll;
|
||
|
},
|
||
|
isActive: function isActive() {
|
||
|
this.savedScroll = 0;
|
||
|
}
|
||
|
},
|
||
|
mounted: function mounted() {
|
||
|
if (this.scrollTarget) {
|
||
|
this.target = document.querySelector(this.scrollTarget);
|
||
|
|
||
|
if (!this.target) {
|
||
|
(0, _console.consoleWarn)("Unable to locate element with identifier ".concat(this.scrollTarget), this);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
onScroll: function onScroll() {
|
||
|
var _this = this;
|
||
|
|
||
|
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(function () {
|
||
|
if (Math.abs(_this.currentScroll - _this.savedScroll) > _this.computedScrollThreshold) _this.thresholdMet();
|
||
|
});
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* The method invoked when
|
||
|
* scrolling in any direction
|
||
|
* has exceeded the threshold
|
||
|
*/
|
||
|
thresholdMet: function thresholdMet() {}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
exports.default = _default;
|
||
|
//# sourceMappingURL=index.js.map
|