UNPKG

virtual360-react

Version:

Virtual360 is an amazing pure React component which stitches together set of images into a smooth 360-degree image. This component is perfect for developers who want to provide ultimate and immersive user experience.

130 lines (106 loc) 4.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _react = require("react"); var _react2 = _interopRequireDefault(_react); var _Helper = require("./Utils/Helper"); var _Image = require("./Image/Image"); var _Image2 = _interopRequireDefault(_Image); var _StyledImage = require("./StyledImage360"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function Virtual360(_ref) { var sensitivity = _ref.sensitivity, imageSrc = _ref.imageSrc, numOfImagesPerColumn = _ref.numOfImagesPerColumn, defaultImagePosition = _ref.defaultImagePosition, width = _ref.width, height = _ref.height, border = _ref.border, reverseRotation = _ref.reverseRotation; var _useState = (0, _react.useState)([]), _useState2 = _slicedToArray(_useState, 2), images = _useState2[0], setImages = _useState2[1]; (0, _react.useEffect)(function () { document.addEventListener("mouseup", handleMouseUp, true); (0, _Helper.preLoadImages)(imageSrc, numOfImagesPerColumn).then(function (resultArray) { var image = []; for (var index = 0; index < resultArray.length; index++) { if (resultArray[index]) { image.push(resultArray[index]); } } setImages(image); }).catch(function (err) { // TODO: Handle Error }); }, [imageSrc, numOfImagesPerColumn]); var _useState3 = (0, _react.useState)(false), _useState4 = _slicedToArray(_useState3, 2), dragging = _useState4[0], setDragging = _useState4[1]; var _useState5 = (0, _react.useState)(defaultImagePosition || 1), _useState6 = _slicedToArray(_useState5, 2), imageIndex = _useState6[0], setImageIndex = _useState6[1]; var _useState7 = (0, _react.useState)(0), _useState8 = _slicedToArray(_useState7, 2), dragStartIndex = _useState8[0], setDragStartIndex = _useState8[1]; var _useState9 = (0, _react.useState)(0), _useState10 = _slicedToArray(_useState9, 2), dragStart = _useState10[0], setDragStart = _useState10[1]; var handleMouseDown = function handleMouseDown(event) { event.persist(); setDragging(true); setDragStart((0, _Helper.getTouchOrMouseScreenPosition)(event)); setDragStartIndex(imageIndex); }; var handleMouseUp = function handleMouseUp() { setDragging(false); }; var updateImageIndex = function updateImageIndex(currentPosition) { var numImages = images.length > 0 && images.length; var pixelsPerImage = (sensitivity || 1) * (360 / numImages); var dx = void 0; if (reverseRotation) { dx = (currentPosition - dragStart) / pixelsPerImage; } else { dx = (dragStart - currentPosition) / pixelsPerImage; } var index = Math.floor(dx) % numImages; if (index < 0) { index = numImages + index - 1; } index = (index + dragStartIndex) % numImages; if (index !== imageIndex) { setImageIndex(index + 1); } }; var handleMouseMove = function handleMouseMove(event) { if (dragging) { updateImageIndex((0, _Helper.getTouchOrMouseScreenPosition)(event)); } }; return images.length > 0 ? _react2.default.createElement( _StyledImage.StyledImage360, { onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onTouchStart: handleMouseDown, onTouchMove: handleMouseMove, onTouchEnd: handleMouseUp, height: height, width: width, border: border }, _react2.default.createElement(_Image2.default, { imagesArray: images, imageIndex: imageIndex <= images.length ? imageIndex : 1 }) ) : null; } exports.default = Virtual360;