ivue-material-plus
Version:
A high quality UI components Library with Vue.js
61 lines (58 loc) • 1.72 kB
JavaScript
import { getCurrentInstance } from 'vue';
var tabsTouch = (data, container, wrapper, activeIndex) => {
const { proxy } = getCurrentInstance();
const onTouchStart = (e) => {
data.startX = data.scrollOffset + e.touchstartX;
container.value.style.transition = "none";
container.value.style.willChange = "transform";
};
const onTouchMove = (e) => {
data.scrollOffset = data.startX - e.touchmoveX;
};
const onTouchEnd = () => {
const maxScrollOffset = container.value.clientWidth - wrapper.value.clientWidth;
container.value.style.transition = "";
container.value.style.willChange = "";
if (data.scrollOffset < 0 || !data.isOverflowing) {
data.scrollOffset = 0;
} else if (data.scrollOffset >= maxScrollOffset) {
data.scrollOffset = maxScrollOffset;
}
};
const newOffset = (direction) => {
const clientWidth = wrapper.value.clientWidth;
if (direction === "prev") {
return Math.max(data.scrollOffset - clientWidth, 0);
} else {
return Math.min(
data.scrollOffset + clientWidth,
container.value.clientWidth - clientWidth
);
}
};
const handleSwipeItem = (direction) => {
if (direction === "next") {
const index = activeIndex.value + 1;
const tab = data.tabs[index];
if (tab) {
proxy.tabNavClick(tab);
}
}
if (direction === "prev") {
const index = activeIndex.value - 1;
const tab = data.tabs[index];
if (tab) {
proxy.tabNavClick(tab);
}
}
};
return {
onTouchStart,
onTouchMove,
onTouchEnd,
newOffset,
handleSwipeItem
};
};
export { tabsTouch as default };
//# sourceMappingURL=tabs-touch.mjs.map