linkmore-design
Version:
🌈 🚀lm组件库。🚀
110 lines (103 loc) • 2.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
const useCoreOptions = ({
state,
dispatch,
props,
bodyRef
}) => {
// 获取是否为视频格式
const getIsVideo = (0, _react.useCallback)(url => {
const fileExtension = url.replace(/.*\./, '').toLowerCase();
return ['mp4', 'm2v', 'mkv', 'ogm', 'webm'].includes(fileExtension);
}, []);
const setTransform = (0, _react.useCallback)(type => {
let scale = state.transform.scale * 100;
let rotateZ = state.transform.rotateZ;
switch (type) {
case 'zoomIn':
scale += 25;
break;
case 'zoomOut':
scale < 30 ? scale : scale -= 25;
break;
case 'rotateLeft':
rotateZ -= 90;
break;
case 'rotateRight':
rotateZ += 90;
break;
default:
break;
}
dispatch({
type: 'changeTransform',
transform: {
rotateZ,
scale: scale / 100
}
});
}, [state.transform]);
// 切换轮播前的回调
const beforeChange = (0, _react.useCallback)((from, currentIndex) => {
dispatch({
type: 'changeCurrent',
current: {
currentIndex
}
});
}, []);
// 切换轮播后的回调
const afterChange = (0, _react.useCallback)(currentIndex => {
dispatch({
type: 'changeCurrent',
current: {
currentIndex
}
});
}, []);
// 转到指定的轮播图, 直接跳转, 不展示动画
const slickGoTo = (0, _react.useCallback)(currentIndex => {
bodyRef.current.goTo(currentIndex, true);
}, []);
// 转到下一张轮播图
const slickNext = (0, _react.useCallback)(() => {
bodyRef.current.next();
}, []);
// 转到上一张轮播图
const slickPrev = (0, _react.useCallback)(() => {
bodyRef.current.prev();
}, []);
// 初始化图片索引
(0, _react.useEffect)(() => {
slickGoTo(props.initialIndex);
dispatch({
type: 'changeCurrent',
current: {
currentIndex: props.initialIndex
}
});
}, [slickGoTo]);
const CoreMethods = {
getIsVideo,
setTransform,
beforeChange,
afterChange
};
const RefMethods = {
getState: () => state,
slickGoTo,
slickNext,
slickPrev
};
return {
CoreMethods,
RefMethods
};
};
var _default = useCoreOptions;
exports.default = _default;