vuescroll
Version:
A beautiful scrollbar based on Vue.js for PC and mobile.
53 lines (48 loc) • 1.34 kB
JavaScript
import GCF, { validateOptions } from '../shared/global-config';
import { deepMerge, defineReactive } from '../util';
/**
* hack the lifeCycle
*
* to merge the global data into user-define data
*/
function hackPropsData() {
const vm = this;
if (vm.$options.name === 'vueScroll') {
const _gfc = deepMerge(vm.$vuescrollConfig, {});
const ops = deepMerge(GCF, _gfc);
vm.$options.propsData.ops = vm.$options.propsData.ops || {};
Object.keys(vm.$options.propsData.ops).forEach(key => {
{
defineReactive(vm.mergedOptions, key, vm.$options.propsData.ops);
}
});
// from ops to mergedOptions
deepMerge(ops, vm.mergedOptions);
const prefix = 'padding-';
defineReactive(vm.mergedOptions.scrollContent, 'paddPos', () => {
return prefix + vm.mergedOptions.rail.vRail.pos;
});
defineReactive(vm.mergedOptions.scrollContent, 'paddValue', () => {
return vm.mergedOptions.rail.vRail.width;
});
}
}
export default {
data() {
return {
shouldStopRender: false,
mergedOptions: {
vuescroll: {},
scrollPanel: {},
scrollContent: {},
rail: {},
bar: {}
}
};
},
created() {
hackPropsData.call(this);
this._isVuescrollRoot = true;
this.renderError = validateOptions(this.mergedOptions);
}
};