UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

104 lines (98 loc) 2.53 kB
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;