tdesign-vue-next
Version:
TDesign Component for vue-next
106 lines (100 loc) • 3.44 kB
JavaScript
/**
* tdesign v1.15.2
* (c) 2025 tdesign
* @license MIT
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var Vue = require('vue');
var isFunction = require('../../_chunks/dep-3e1aa2e0.js');
require('../../_chunks/dep-79f734cc.js');
require('@babel/runtime/helpers/typeof');
require('../../_chunks/dep-63ff6e12.js');
function useTagScroll(props) {
var tagInputRef = Vue.ref();
var _toRefs = Vue.toRefs(props),
excessTagsDisplayType = _toRefs.excessTagsDisplayType,
readonly = _toRefs.readonly,
disabled = _toRefs.disabled;
var scrollDistance = Vue.ref(0);
var scrollElement = Vue.ref();
var mouseEnterTimer = Vue.ref();
var isScrollable = Vue.ref(false);
var updateScrollElement = function updateScrollElement(element) {
var inputElement = element.children[0];
scrollElement.value = inputElement;
};
var updateScrollDistance = function updateScrollDistance() {
scrollDistance.value = scrollElement.value.scrollWidth - scrollElement.value.clientWidth;
};
var scrollTo = function scrollTo(distance) {
var _scrollElement$value;
if (!isFunction.isFunction((_scrollElement$value = scrollElement.value) === null || _scrollElement$value === void 0 ? void 0 : _scrollElement$value.scroll)) return;
scrollElement.value.scroll({
left: distance,
behavior: "smooth"
});
};
var scrollToRight = function scrollToRight() {
updateScrollDistance();
scrollTo(scrollDistance.value);
setTimeout(function () {
isScrollable.value = true;
}, 200);
};
var scrollToLeft = function scrollToLeft() {
scrollTo(0);
};
var onWheel = function onWheel(_ref) {
var e = _ref.e;
if (readonly.value || disabled.value) return;
if (!scrollElement.value) return;
if (e.deltaX > 0) {
var distance = Math.min(scrollElement.value.scrollLeft + 120, scrollDistance.value);
scrollTo(distance);
} else {
var _distance = Math.max(scrollElement.value.scrollLeft - 120, 0);
scrollTo(_distance);
}
};
var scrollToRightOnEnter = function scrollToRightOnEnter() {
if (excessTagsDisplayType.value !== "scroll") return;
mouseEnterTimer.value = setTimeout(function () {
scrollToRight();
clearTimeout(mouseEnterTimer.value);
}, 100);
};
var scrollToLeftOnLeave = function scrollToLeftOnLeave() {
if (excessTagsDisplayType.value !== "scroll") return;
isScrollable.value = false;
scrollTo(0);
clearTimeout(mouseEnterTimer.value);
};
var init = function init() {
var _tagInputRef$value;
var element = (_tagInputRef$value = tagInputRef.value) === null || _tagInputRef$value === void 0 ? void 0 : _tagInputRef$value.$el;
if (!element) return;
updateScrollElement(element);
};
var clear = function clear() {
clearTimeout(mouseEnterTimer.value);
};
Vue.onMounted(init);
Vue.onUnmounted(clear);
return {
tagInputRef: tagInputRef,
scrollElement: scrollElement,
scrollDistance: scrollDistance,
scrollTo: scrollTo,
scrollToRight: scrollToRight,
scrollToLeft: scrollToLeft,
updateScrollElement: updateScrollElement,
updateScrollDistance: updateScrollDistance,
onWheel: onWheel,
scrollToRightOnEnter: scrollToRightOnEnter,
scrollToLeftOnLeave: scrollToLeftOnLeave,
isScrollable: isScrollable
};
}
exports.useTagScroll = useTagScroll;
//# sourceMappingURL=useTagScroll.js.map