linkmore-design
Version:
🌈 🚀lm组件库。🚀
104 lines (98 loc) • 2.53 kB
JavaScript
import { useCallback, useEffect } from 'react';
var useCoreOptions = function useCoreOptions(_ref) {
var state = _ref.state,
dispatch = _ref.dispatch,
props = _ref.props,
bodyRef = _ref.bodyRef;
// 获取是否为视频格式
var getIsVideo = useCallback(function (url) {
var fileExtension = url.replace(/.*\./, '').toLowerCase();
return ['mp4', 'm2v', 'mkv', 'ogm', 'webm'].includes(fileExtension);
}, []);
var setTransform = useCallback(function (type) {
var scale = state.transform.scale * 100;
var 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: rotateZ,
scale: scale / 100
}
});
}, [state.transform]);
// 切换轮播前的回调
var beforeChange = useCallback(function (from, currentIndex) {
dispatch({
type: 'changeCurrent',
current: {
currentIndex: currentIndex
}
});
}, []);
// 切换轮播后的回调
var afterChange = useCallback(function (currentIndex) {
dispatch({
type: 'changeCurrent',
current: {
currentIndex: currentIndex
}
});
}, []);
// 转到指定的轮播图, 直接跳转, 不展示动画
var slickGoTo = useCallback(function (currentIndex) {
bodyRef.current.goTo(currentIndex, true);
}, []);
// 转到下一张轮播图
var slickNext = useCallback(function () {
bodyRef.current.next();
}, []);
// 转到上一张轮播图
var slickPrev = useCallback(function () {
bodyRef.current.prev();
}, []);
// 初始化图片索引
useEffect(function () {
slickGoTo(props.initialIndex);
dispatch({
type: 'changeCurrent',
current: {
currentIndex: props.initialIndex
}
});
}, [slickGoTo]);
var CoreMethods = {
getIsVideo: getIsVideo,
setTransform: setTransform,
beforeChange: beforeChange,
afterChange: afterChange
};
var RefMethods = {
getState: function getState() {
return state;
},
slickGoTo: slickGoTo,
slickNext: slickNext,
slickPrev: slickPrev
};
return {
CoreMethods: CoreMethods,
RefMethods: RefMethods
};
};
export default useCoreOptions;