New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

react-photo-view

Package Overview
Dependencies
Maintainers
1
Versions
61
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-photo-view - npm Package Compare versions

Comparing version 0.1.8 to 0.2.0

es/components/BannerWrap.d.ts

2

es/components/Spinner.d.ts

@@ -1,2 +0,2 @@

declare const _default: import("../../node_modules/styled-components").StyledComponentClass<{
declare const _default: import("../../../../../../../Users/liumy/Documents/workspace/react-photo-view/node_modules/styled-components").StyledComponentClass<{
className?: string | undefined;

@@ -3,0 +3,0 @@ }, any, Pick<{

import React from 'react';
export declare type onShowType = (dataKey?: string) => void;
export declare type addItemType = (dataKey?: string, src?: string) => void;
export declare type removeItemType = (dataKey?: string) => void;
export declare type onShowType = (key?: string) => void;
export declare type addItemType = (key?: string, src?: string, intro?: React.ReactNode) => void;
export declare type removeItemType = (key?: string) => void;
declare const _default: React.Context<{

@@ -6,0 +6,0 @@ onShow(): void;

import React from 'react';
export interface IPhotoConsumer {
src: string;
intro?: React.ReactNode;
children?: React.ReactElement<any>;

@@ -5,0 +6,0 @@ }

@@ -26,3 +26,3 @@ import _extends from 'babel-runtime/helpers/extends';

_this.dataKey = uniqueId();
_this.key = uniqueId();
_this.handleShow = function (e) {

@@ -33,3 +33,3 @@ var _this$props = _this.props,

onShow(_this.dataKey);
onShow(_this.key);
if (children) {

@@ -50,6 +50,7 @@ var onClick = children.props.onClick;

var _props = this.props,
addItem = _props.addItem,
src = _props.src,
addItem = _props.addItem;
intro = _props.intro;
addItem(this.dataKey, src);
addItem(this.key, src, intro);
}

@@ -61,3 +62,3 @@ }, {

removeItem(this.dataKey);
removeItem(this.key);
}

@@ -83,4 +84,5 @@ }, {

var src = _a.src,
intro = _a.intro,
children = _a.children,
restProps = __rest(_a, ["src", "children"]);
restProps = __rest(_a, ["src", "intro", "children"]);

@@ -93,3 +95,3 @@ return React.createElement(

PhotoViewItem,
_extends({}, value, restProps, { src: src }),
_extends({}, value, restProps, { src: src, intro: intro }),
children

@@ -96,0 +98,0 @@ );

import React from 'react';
import { onShowType, addItemType, removeItemType } from './photo-context';
import { dataType } from './types';
interface IPhotoProvider {
import { dataType, IPhotoProviderBase } from './types';
interface IPhotoProvider extends IPhotoProviderBase {
children: React.ReactNode;
className?: string;
maskClassName?: string;
viewClassName?: string;
imageClassName?: string;
loadingElement?: JSX.Element;
brokenElement?: JSX.Element;
}
declare type PhotoProviderState = {
data: dataType[];
images: dataType[];
visible: boolean;

@@ -23,5 +17,5 @@ index: number;

constructor(props: any);
handleAddItem: (dataKey: string, src: string) => void;
handleRemoveItem: (dataKey: string) => void;
handleShow: (dataKey: string) => void;
handleAddItem: (key: string, src: string, intro: React.ReactNode) => void;
handleRemoveItem: (key: string) => void;
handleShow: (key: string) => void;
handleClose: () => void;

@@ -28,0 +22,0 @@ handleIndexChange: (index: number) => void;

@@ -0,1 +1,2 @@

import _extends from 'babel-runtime/helpers/extends';
import _classCallCheck from 'babel-runtime/helpers/classCallCheck';

@@ -5,2 +6,10 @@ import _createClass from 'babel-runtime/helpers/createClass';

import _inherits from 'babel-runtime/helpers/inherits';
var __rest = this && this.__rest || function (s, e) {
var t = {};
for (var p in s) {
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
}if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0) t[p[i]] = s[p[i]];
}return t;
};
import React from 'react';

@@ -18,8 +27,9 @@ import PhotoContext from './photo-context';

_this.handleAddItem = function (dataKey, src) {
_this.handleAddItem = function (key, src, intro) {
_this.setState(function (prev) {
return {
data: prev.data.concat({
dataKey: dataKey,
src: src
images: prev.images.concat({
key: key,
src: src,
intro: intro
})

@@ -29,13 +39,13 @@ };

};
_this.handleRemoveItem = function (dataKey) {
_this.handleRemoveItem = function (key) {
_this.setState(function (_ref) {
var data = _ref.data,
var images = _ref.images,
index = _ref.index;
var nextData = data.filter(function (item) {
return item.dataKey !== dataKey;
var nextImages = images.filter(function (item) {
return item.key !== key;
});
var nextEndIndex = nextData.length - 1;
var nextEndIndex = nextImages.length - 1;
return {
data: nextData,
images: nextImages,
index: Math.min(nextEndIndex, index)

@@ -45,9 +55,9 @@ };

};
_this.handleShow = function (dataKey) {
var data = _this.state.data;
_this.handleShow = function (key) {
var images = _this.state.images;
_this.setState({
visible: true,
index: data.findIndex(function (item) {
return item.dataKey === dataKey;
index: images.findIndex(function (item) {
return item.key === key;
})

@@ -67,3 +77,3 @@ });

_this.state = {
data: [],
images: [],
visible: false,

@@ -81,12 +91,6 @@ index: 0,

value: function render() {
var _props = this.props,
className = _props.className,
maskClassName = _props.maskClassName,
viewClassName = _props.viewClassName,
imageClassName = _props.imageClassName,
loadingElement = _props.loadingElement,
brokenElement = _props.brokenElement,
children = _props.children;
var _state = this.state,
data = _state.data,
var _a = this.props,
children = _a.children,
restProps = __rest(_a, ["children"]);var _state = this.state,
images = _state.images,
visible = _state.visible,

@@ -99,3 +103,3 @@ index = _state.index;

children,
React.createElement(PhotoSlider, { images: data, visible: visible, index: index, onIndexChange: this.handleIndexChange, onClose: this.handleClose, className: className, maskClassName: maskClassName, viewClassName: viewClassName, imageClassName: imageClassName, loadingElement: loadingElement, brokenElement: brokenElement })
React.createElement(PhotoSlider, _extends({ images: images, visible: visible, index: index, onIndexChange: this.handleIndexChange, onClose: this.handleClose }, restProps))
);

@@ -102,0 +106,0 @@ }

import React from 'react';
import { dataType, TouchTypeEnum } from './types';
interface IPhotoSliderProps {
images: (string | dataType)[];
import { dataType, IPhotoProviderBase } from './types';
interface IPhotoSliderProps extends IPhotoProviderBase {
images: dataType[];
index?: number;

@@ -9,10 +9,2 @@ visible: boolean;

onIndexChange?: Function;
maskClosable?: boolean;
overlay?: React.ReactNode;
className?: string;
maskClassName?: string;
viewClassName?: string;
imageClassName?: string;
loadingElement?: JSX.Element;
brokenElement?: JSX.Element;
}

@@ -31,2 +23,7 @@ declare type PhotoSliderState = {

static displayName: string;
static defaultProps: {
maskClosable: boolean;
bannerVisible: boolean;
introVisible: boolean;
};
static getDerivedStateFromProps(nextProps: any, prevState: any): {

@@ -40,8 +37,9 @@ photoIndex: any;

handlePhotoClick: () => void;
handlePhotoMaskClick: () => void;
handleResize: () => void;
handleReachVerticalMove: (clientX: any, clientY: any) => void;
handleReachHorizontalMove: (clientX: any) => void;
handleReachUp: (clientX: number, clientY: number, touchType: TouchTypeEnum) => void;
handleReachUp: (clientX: number, clientY: number) => void;
render(): JSX.Element | null;
}
export {};

@@ -9,4 +9,4 @@ import _classCallCheck from 'babel-runtime/helpers/classCallCheck';

import Backdrop from './components/Backdrop';
import { Close, Counter, TopBar } from './components/TopWrap';
import { TouchTypeEnum } from './types';
import { Close, Counter, BannerWrap, BannerRight } from './components/BannerWrap';
import FooterWrap from './components/FooterWrap';
import { defaultOpacity, horizontalOffset, maxMoveOffset } from './variables';

@@ -29,2 +29,14 @@

};
_this.handlePhotoMaskClick = function () {
var _this$props = _this.props,
maskClosable = _this$props.maskClosable,
onClose = _this$props.onClose;
if (maskClosable) {
onClose();
_this.setState({
overlayVisible: true
});
}
};
_this.handleResize = function () {

@@ -90,12 +102,10 @@ var _window = window,

};
_this.handleReachUp = function (clientX, clientY, touchType) {
_this.handleReachUp = function (clientX, clientY) {
var _window3 = window,
innerWidth = _window3.innerWidth,
innerHeight = _window3.innerHeight;
var _this$props = _this.props,
images = _this$props.images,
onIndexChange = _this$props.onIndexChange,
onClose = _this$props.onClose,
_this$props$maskClosa = _this$props.maskClosable,
maskClosable = _this$props$maskClosa === undefined ? true : _this$props$maskClosa;
var _this$props2 = _this.props,
images = _this$props2.images,
onIndexChange = _this$props2.onIndexChange,
onClose = _this$props2.onClose;
var _this$state = _this.state,

@@ -116,9 +126,5 @@ _this$state$lastClien = _this$state.lastClientX,

var isChangeVisible = false;
// mask 点击事件
if (lastClientX === clientX && lastClientY === clientY && maskClosable && touchType === TouchTypeEnum.Mask) {
if (Math.abs(offsetClientY) > innerHeight * 0.14) {
isChangeVisible = true;
onClose();
} else if (Math.abs(offsetClientY) > innerHeight * 0.14) {
isChangeVisible = true;
onClose();
// 下一张

@@ -194,2 +200,4 @@ } else if (offsetClientX < -maxMoveOffset && photoIndex < images.length - 1) {

onClose = _props.onClose,
bannerVisible = _props.bannerVisible,
introVisible = _props.introVisible,
loadingElement = _props.loadingElement,

@@ -207,2 +215,5 @@ brokenElement = _props.brokenElement;

var transform = 'translate3d(' + translateX + 'px, 0px, 0)';
// Overlay
var overlayIntro = imageLength ? images[photoIndex].intro : undefined;
var overlayStyle = { opacity: +overlayVisible };
if (visible) {

@@ -216,5 +227,5 @@ var _window4 = window,

React.createElement(Backdrop, { className: maskClassName, style: { background: 'rgba(0, 0, 0, ' + backdropOpacity + ')' } }),
React.createElement(
TopBar,
{ style: { opacity: +overlayVisible } },
bannerVisible ? React.createElement(
BannerWrap,
{ style: overlayStyle },
React.createElement(

@@ -227,10 +238,13 @@ Counter,

),
React.createElement(Close, { onClick: onClose })
),
React.createElement(
BannerRight,
null,
React.createElement(Close, { onClick: onClose })
)
) : undefined,
images.slice( // 加载相邻三张
Math.max(photoIndex - 1, 0), Math.min(photoIndex + 2, imageLength + 1)).map(function (item, index) {
var isStrItem = typeof item === 'string';
// 截取之前的索引位置
var realIndex = photoIndex === 0 ? photoIndex + index : photoIndex - 1 + index;
return React.createElement(PhotoView, { key: isStrItem ? item + realIndex : item.dataKey, src: isStrItem ? item : item.src, onReachTopMove: _this2.handleReachVerticalMove, onReachBottomMove: _this2.handleReachVerticalMove, onReachRightMove: realIndex < imageLength - 1 ? _this2.handleReachHorizontalMove : undefined, onReachLeftMove: realIndex > 0 ? _this2.handleReachHorizontalMove : undefined, onReachUp: _this2.handleReachUp, onPhotoClick: _this2.handlePhotoClick, photoScale: photoIndex === realIndex ? photoScale : 1, wrapClassName: viewClassName, className: imageClassName, style: {
return React.createElement(PhotoView, { key: item.key || realIndex, src: item.src, onReachTopMove: _this2.handleReachVerticalMove, onReachBottomMove: _this2.handleReachVerticalMove, onReachRightMove: realIndex < imageLength - 1 ? _this2.handleReachHorizontalMove : undefined, onReachLeftMove: realIndex > 0 ? _this2.handleReachHorizontalMove : undefined, onReachUp: _this2.handleReachUp, onPhotoClick: _this2.handlePhotoClick, onMaskClick: _this2.handlePhotoMaskClick, photoScale: photoIndex === realIndex ? photoScale : 1, wrapClassName: viewClassName, className: imageClassName, style: {
left: (innerWidth + horizontalOffset) * realIndex + 'px',

@@ -242,2 +256,7 @@ WebkitTransform: transform,

}),
introVisible && overlayIntro ? React.createElement(
FooterWrap,
{ style: overlayStyle },
overlayIntro
) : undefined,
overlay

@@ -266,2 +285,7 @@ );

PhotoSlider.displayName = 'PhotoSlider';
PhotoSlider.displayName = 'PhotoSlider';
PhotoSlider.defaultProps = {
maskClosable: true,
bannerVisible: true,
introVisible: true
};
import React from 'react';
import { ReachFunction, ReachTypeEnum } from './types';
import { ReachFunction, PhotoClickFunction, ReachTypeEnum } from './types';
interface IPhotoViewProps {

@@ -11,3 +11,4 @@ src: string;

brokenElement?: JSX.Element;
onPhotoClick?: (clientX: number, clientY: number) => void;
onPhotoClick?: PhotoClickFunction;
onMaskClick?: PhotoClickFunction;
onReachTopMove?: ReachFunction;

@@ -17,3 +18,3 @@ onReachRightMove?: ReachFunction;

onReachLeftMove?: ReachFunction;
onReachUp?: (clientX: number, clientY: number, TouchTypeEnum: any) => void;
onReachUp?: (clientX: number, clientY: number) => void;
onPhotoResize?: () => void;

@@ -52,3 +53,2 @@ }

private photoRef;
private readonly onPhotoClick;
constructor(props: any);

@@ -59,3 +59,3 @@ componentDidMount(): void;

handleMove: (newClientX: number, newClientY: number, touchLength?: number) => void;
debouncePhotoClick: (newClientX: number, newClientY: number) => void;
photoClick: (newClientX: number, newClientY: number) => void;
handlePhotoClick: (e: any) => void;

@@ -67,2 +67,3 @@ handleDoubleClick: (e: any) => void;

handleMaskTouchStart: (e: any) => void;
handleMaskClick: (e: any) => void;
handleTouchStart: (e: any) => void;

@@ -69,0 +70,0 @@ handleMouseDown: (e: any) => void;

@@ -13,2 +13,3 @@ import _extends from 'babel-runtime/helpers/extends';

import isMobile from './utils/isMobile';
import getCurrentFromEvent from './utils/getCurrentFromEvent';
import getMultipleTouchPosition from './utils/getMultipleTouchPosition';

@@ -19,3 +20,3 @@ import getPositionOnMoveOrScale from './utils/getPositionOnMoveOrScale';

import { maxScale, minReachOffset, minScale, scaleBuffer } from './variables';
import { ReachTypeEnum, TouchTypeEnum } from './types';
import { ReachTypeEnum } from './types';
var initialState = {

@@ -124,3 +125,3 @@ // 图片 X 偏移量

};
_this.debouncePhotoClick = function (newClientX, newClientY) {
_this.photoClick = function (newClientX, newClientY) {
var onPhotoClick = _this.props.onPhotoClick;

@@ -131,3 +132,3 @@ var _this$state3 = _this.state,

if (onPhotoClick && clientX === newClientX && clientY === newClientY) {
if (onPhotoClick && Math.abs(clientX - newClientX) < 5 && Math.abs(clientY - newClientY) < 5) {
onPhotoClick(newClientX, newClientY);

@@ -137,8 +138,12 @@ }

_this.handlePhotoClick = function (e) {
_this.onPhotoClick(e.clientX, e.clientY);
var _getCurrentFromEvent = getCurrentFromEvent(e),
clientX = _getCurrentFromEvent.clientX,
clientY = _getCurrentFromEvent.clientY;
_this.photoClick(clientX, clientY);
};
_this.handleDoubleClick = function (e) {
e.preventDefault();
// 取消 click 事件
_this.onPhotoClick.cancel();
// @ts-ignore 取消 click 事件
_this.photoClick.cancel();
var clientX = e.clientX,

@@ -202,4 +207,3 @@ clientY = e.clientY;

lastX: prevState.x,
lastY: prevState.y,
touchedTime: Date.now()
lastY: prevState.y
};

@@ -218,2 +222,13 @@ });

};
_this.handleMaskClick = function (e) {
var evt = getCurrentFromEvent(e);
var onMaskClick = _this.props.onMaskClick;
var _this$state4 = _this.state,
clientX = _this$state4.clientX,
clientY = _this$state4.clientY;
if (onMaskClick && Math.abs(clientX - evt.clientX) < 5 && Math.abs(clientY - evt.clientY) < 5) {
onMaskClick(clientX, clientY);
}
};
_this.handleTouchStart = function (e) {

@@ -261,5 +276,5 @@ if (e.touches.length >= 2) {

_this.handleUp = function (newClientX, newClientY) {
var _this$state4 = _this.state,
touched = _this$state4.touched,
maskTouched = _this$state4.maskTouched;
var _this$state5 = _this.state,
touched = _this$state5.touched,
maskTouched = _this$state5.maskTouched;

@@ -284,3 +299,3 @@ if (touched || maskTouched) {

if (onReachUp) {
onReachUp(newClientX, newClientY, maskTouched ? TouchTypeEnum.Mask : TouchTypeEnum.Image);
onReachUp(newClientX, newClientY);
}

@@ -359,3 +374,4 @@ var hasMove = clientX !== newClientX || clientY !== newClientY;

};
_this.onPhotoClick = debounce(_this.debouncePhotoClick, 400);
// 加入延迟触发,避免与双击混淆
_this.photoClick = debounce(_this.photoClick, 300);
_this.handleMove = throttle(_this.handleMove, 8);

@@ -409,3 +425,3 @@ return _this;

{ className: wrapClassName, style: style },
React.createElement(PhotoMask, { onMouseDown: isMobile ? undefined : this.handleMaskMouseDown, onTouchStart: isMobile ? this.handleMaskTouchStart : undefined }),
React.createElement(PhotoMask, { onMouseDown: isMobile ? undefined : this.handleMaskMouseDown, onTouchStart: isMobile ? this.handleMaskTouchStart : undefined, onClick: this.handleMaskClick }),
React.createElement(Photo, { className: className, src: src, ref: this.handlePhotoRef, onClick: this.handlePhotoClick, onDoubleClick: this.handleDoubleClick, onMouseDown: isMobile ? undefined : this.handleMouseDown, onTouchStart: isMobile ? this.handleTouchStart : undefined, onWheel: this.handleWheel, onPhotoResize: this.handleResize, style: {

@@ -412,0 +428,0 @@ WebkitTransform: transform,

/**
* 图片 item 类型
*/
import React from 'react';
export declare type dataType = {
dataKey: string;
key?: string;
src: string;
intro?: React.ReactNode;
};
export interface IPhotoProviderBase {
maskClosable?: boolean;
bannerVisible?: boolean;
introVisible?: boolean;
overlay?: React.ReactNode;
className?: string;
maskClassName?: string;
viewClassName?: string;
imageClassName?: string;
loadingElement?: JSX.Element;
brokenElement?: JSX.Element;
}
export declare type ReachFunction = (clientX: number, clientY: number) => void;
export declare type PhotoClickFunction = (clientX: number, clientY: number) => void;
/**

@@ -26,8 +41,1 @@ * 边缘超出状态

}
/**
* 触摸类型
*/
export declare enum TouchTypeEnum {
Image = 1,
Mask = 2
}

@@ -19,10 +19,2 @@ /**

ReachTypeEnum[ReachTypeEnum["YReach"] = 2] = "YReach";
})(ReachTypeEnum || (ReachTypeEnum = {}));
/**
* 触摸类型
*/
export var TouchTypeEnum;
(function (TouchTypeEnum) {
TouchTypeEnum[TouchTypeEnum["Image"] = 1] = "Image";
TouchTypeEnum[TouchTypeEnum["Mask"] = 2] = "Mask";
})(TouchTypeEnum || (TouchTypeEnum = {}));
})(ReachTypeEnum || (ReachTypeEnum = {}));

@@ -1,2 +0,2 @@

declare const _default: import("../../node_modules/styled-components").StyledComponentClass<{
declare const _default: import("../../../../../../../Users/liumy/Documents/workspace/react-photo-view/node_modules/styled-components").StyledComponentClass<{
className?: string | undefined;

@@ -3,0 +3,0 @@ }, any, Pick<{

import React from 'react';
export declare type onShowType = (dataKey?: string) => void;
export declare type addItemType = (dataKey?: string, src?: string) => void;
export declare type removeItemType = (dataKey?: string) => void;
export declare type onShowType = (key?: string) => void;
export declare type addItemType = (key?: string, src?: string, intro?: React.ReactNode) => void;
export declare type removeItemType = (key?: string) => void;
declare const _default: React.Context<{

@@ -6,0 +6,0 @@ onShow(): void;

import React from 'react';
export interface IPhotoConsumer {
src: string;
intro?: React.ReactNode;
children?: React.ReactElement<any>;

@@ -5,0 +6,0 @@ }

@@ -58,3 +58,3 @@ 'use strict';

_this.dataKey = (0, _lodash2['default'])();
_this.key = (0, _lodash2['default'])();
_this.handleShow = function (e) {

@@ -65,3 +65,3 @@ var _this$props = _this.props,

onShow(_this.dataKey);
onShow(_this.key);
if (children) {

@@ -82,6 +82,7 @@ var onClick = children.props.onClick;

var _props = this.props,
addItem = _props.addItem,
src = _props.src,
addItem = _props.addItem;
intro = _props.intro;
addItem(this.dataKey, src);
addItem(this.key, src, intro);
}

@@ -93,3 +94,3 @@ }, {

removeItem(this.dataKey);
removeItem(this.key);
}

@@ -114,4 +115,5 @@ }, {

var src = _a.src,
intro = _a.intro,
children = _a.children,
restProps = __rest(_a, ["src", "children"]);
restProps = __rest(_a, ["src", "intro", "children"]);

@@ -124,3 +126,3 @@ return _react2['default'].createElement(

PhotoViewItem,
(0, _extends3['default'])({}, value, restProps, { src: src }),
(0, _extends3['default'])({}, value, restProps, { src: src, intro: intro }),
children

@@ -127,0 +129,0 @@ );

import React from 'react';
import { onShowType, addItemType, removeItemType } from './photo-context';
import { dataType } from './types';
interface IPhotoProvider {
import { dataType, IPhotoProviderBase } from './types';
interface IPhotoProvider extends IPhotoProviderBase {
children: React.ReactNode;
className?: string;
maskClassName?: string;
viewClassName?: string;
imageClassName?: string;
loadingElement?: JSX.Element;
brokenElement?: JSX.Element;
}
declare type PhotoProviderState = {
data: dataType[];
images: dataType[];
visible: boolean;

@@ -23,5 +17,5 @@ index: number;

constructor(props: any);
handleAddItem: (dataKey: string, src: string) => void;
handleRemoveItem: (dataKey: string) => void;
handleShow: (dataKey: string) => void;
handleAddItem: (key: string, src: string, intro: React.ReactNode) => void;
handleRemoveItem: (key: string) => void;
handleShow: (key: string) => void;
handleClose: () => void;

@@ -28,0 +22,0 @@ handleIndexChange: (index: number) => void;

@@ -7,2 +7,6 @@ 'use strict';

var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');

@@ -38,2 +42,11 @@

var __rest = undefined && undefined.__rest || function (s, e) {
var t = {};
for (var p in s) {
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
}if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0) t[p[i]] = s[p[i]];
}return t;
};
var PhotoProvider = function (_React$Component) {

@@ -47,8 +60,9 @@ (0, _inherits3['default'])(PhotoProvider, _React$Component);

_this.handleAddItem = function (dataKey, src) {
_this.handleAddItem = function (key, src, intro) {
_this.setState(function (prev) {
return {
data: prev.data.concat({
dataKey: dataKey,
src: src
images: prev.images.concat({
key: key,
src: src,
intro: intro
})

@@ -58,13 +72,13 @@ };

};
_this.handleRemoveItem = function (dataKey) {
_this.handleRemoveItem = function (key) {
_this.setState(function (_ref) {
var data = _ref.data,
var images = _ref.images,
index = _ref.index;
var nextData = data.filter(function (item) {
return item.dataKey !== dataKey;
var nextImages = images.filter(function (item) {
return item.key !== key;
});
var nextEndIndex = nextData.length - 1;
var nextEndIndex = nextImages.length - 1;
return {
data: nextData,
images: nextImages,
index: Math.min(nextEndIndex, index)

@@ -74,9 +88,9 @@ };

};
_this.handleShow = function (dataKey) {
var data = _this.state.data;
_this.handleShow = function (key) {
var images = _this.state.images;
_this.setState({
visible: true,
index: data.findIndex(function (item) {
return item.dataKey === dataKey;
index: images.findIndex(function (item) {
return item.key === key;
})

@@ -96,3 +110,3 @@ });

_this.state = {
data: [],
images: [],
visible: false,

@@ -110,12 +124,6 @@ index: 0,

value: function render() {
var _props = this.props,
className = _props.className,
maskClassName = _props.maskClassName,
viewClassName = _props.viewClassName,
imageClassName = _props.imageClassName,
loadingElement = _props.loadingElement,
brokenElement = _props.brokenElement,
children = _props.children;
var _state = this.state,
data = _state.data,
var _a = this.props,
children = _a.children,
restProps = __rest(_a, ["children"]);var _state = this.state,
images = _state.images,
visible = _state.visible,

@@ -128,3 +136,3 @@ index = _state.index;

children,
_react2['default'].createElement(_PhotoSlider2['default'], { images: data, visible: visible, index: index, onIndexChange: this.handleIndexChange, onClose: this.handleClose, className: className, maskClassName: maskClassName, viewClassName: viewClassName, imageClassName: imageClassName, loadingElement: loadingElement, brokenElement: brokenElement })
_react2['default'].createElement(_PhotoSlider2['default'], (0, _extends3['default'])({ images: images, visible: visible, index: index, onIndexChange: this.handleIndexChange, onClose: this.handleClose }, restProps))
);

@@ -131,0 +139,0 @@ }

import React from 'react';
import { dataType, TouchTypeEnum } from './types';
interface IPhotoSliderProps {
images: (string | dataType)[];
import { dataType, IPhotoProviderBase } from './types';
interface IPhotoSliderProps extends IPhotoProviderBase {
images: dataType[];
index?: number;

@@ -9,10 +9,2 @@ visible: boolean;

onIndexChange?: Function;
maskClosable?: boolean;
overlay?: React.ReactNode;
className?: string;
maskClassName?: string;
viewClassName?: string;
imageClassName?: string;
loadingElement?: JSX.Element;
brokenElement?: JSX.Element;
}

@@ -31,2 +23,7 @@ declare type PhotoSliderState = {

static displayName: string;
static defaultProps: {
maskClosable: boolean;
bannerVisible: boolean;
introVisible: boolean;
};
static getDerivedStateFromProps(nextProps: any, prevState: any): {

@@ -40,8 +37,9 @@ photoIndex: any;

handlePhotoClick: () => void;
handlePhotoMaskClick: () => void;
handleResize: () => void;
handleReachVerticalMove: (clientX: any, clientY: any) => void;
handleReachHorizontalMove: (clientX: any) => void;
handleReachUp: (clientX: number, clientY: number, touchType: TouchTypeEnum) => void;
handleReachUp: (clientX: number, clientY: number) => void;
render(): JSX.Element | null;
}
export {};

@@ -39,6 +39,8 @@ 'use strict';

var _TopWrap = require('./components/TopWrap');
var _BannerWrap = require('./components/BannerWrap');
var _types = require('./types');
var _FooterWrap = require('./components/FooterWrap');
var _FooterWrap2 = _interopRequireDefault(_FooterWrap);
var _variables = require('./variables');

@@ -63,2 +65,14 @@

};
_this.handlePhotoMaskClick = function () {
var _this$props = _this.props,
maskClosable = _this$props.maskClosable,
onClose = _this$props.onClose;
if (maskClosable) {
onClose();
_this.setState({
overlayVisible: true
});
}
};
_this.handleResize = function () {

@@ -124,12 +138,10 @@ var _window = window,

};
_this.handleReachUp = function (clientX, clientY, touchType) {
_this.handleReachUp = function (clientX, clientY) {
var _window3 = window,
innerWidth = _window3.innerWidth,
innerHeight = _window3.innerHeight;
var _this$props = _this.props,
images = _this$props.images,
onIndexChange = _this$props.onIndexChange,
onClose = _this$props.onClose,
_this$props$maskClosa = _this$props.maskClosable,
maskClosable = _this$props$maskClosa === undefined ? true : _this$props$maskClosa;
var _this$props2 = _this.props,
images = _this$props2.images,
onIndexChange = _this$props2.onIndexChange,
onClose = _this$props2.onClose;
var _this$state = _this.state,

@@ -150,9 +162,5 @@ _this$state$lastClien = _this$state.lastClientX,

var isChangeVisible = false;
// mask 点击事件
if (lastClientX === clientX && lastClientY === clientY && maskClosable && touchType === _types.TouchTypeEnum.Mask) {
if (Math.abs(offsetClientY) > innerHeight * 0.14) {
isChangeVisible = true;
onClose();
} else if (Math.abs(offsetClientY) > innerHeight * 0.14) {
isChangeVisible = true;
onClose();
// 下一张

@@ -228,2 +236,4 @@ } else if (offsetClientX < -_variables.maxMoveOffset && photoIndex < images.length - 1) {

onClose = _props.onClose,
bannerVisible = _props.bannerVisible,
introVisible = _props.introVisible,
loadingElement = _props.loadingElement,

@@ -241,2 +251,5 @@ brokenElement = _props.brokenElement;

var transform = 'translate3d(' + translateX + 'px, 0px, 0)';
// Overlay
var overlayIntro = imageLength ? images[photoIndex].intro : undefined;
var overlayStyle = { opacity: +overlayVisible };
if (visible) {

@@ -250,7 +263,7 @@ var _window4 = window,

_react2['default'].createElement(_Backdrop2['default'], { className: maskClassName, style: { background: 'rgba(0, 0, 0, ' + backdropOpacity + ')' } }),
_react2['default'].createElement(
_TopWrap.TopBar,
{ style: { opacity: +overlayVisible } },
bannerVisible ? _react2['default'].createElement(
_BannerWrap.BannerWrap,
{ style: overlayStyle },
_react2['default'].createElement(
_TopWrap.Counter,
_BannerWrap.Counter,
null,

@@ -261,10 +274,13 @@ photoIndex + 1,

),
_react2['default'].createElement(_TopWrap.Close, { onClick: onClose })
),
_react2['default'].createElement(
_BannerWrap.BannerRight,
null,
_react2['default'].createElement(_BannerWrap.Close, { onClick: onClose })
)
) : undefined,
images.slice( // 加载相邻三张
Math.max(photoIndex - 1, 0), Math.min(photoIndex + 2, imageLength + 1)).map(function (item, index) {
var isStrItem = typeof item === 'string';
// 截取之前的索引位置
var realIndex = photoIndex === 0 ? photoIndex + index : photoIndex - 1 + index;
return _react2['default'].createElement(_PhotoView2['default'], { key: isStrItem ? item + realIndex : item.dataKey, src: isStrItem ? item : item.src, onReachTopMove: _this2.handleReachVerticalMove, onReachBottomMove: _this2.handleReachVerticalMove, onReachRightMove: realIndex < imageLength - 1 ? _this2.handleReachHorizontalMove : undefined, onReachLeftMove: realIndex > 0 ? _this2.handleReachHorizontalMove : undefined, onReachUp: _this2.handleReachUp, onPhotoClick: _this2.handlePhotoClick, photoScale: photoIndex === realIndex ? photoScale : 1, wrapClassName: viewClassName, className: imageClassName, style: {
return _react2['default'].createElement(_PhotoView2['default'], { key: item.key || realIndex, src: item.src, onReachTopMove: _this2.handleReachVerticalMove, onReachBottomMove: _this2.handleReachVerticalMove, onReachRightMove: realIndex < imageLength - 1 ? _this2.handleReachHorizontalMove : undefined, onReachLeftMove: realIndex > 0 ? _this2.handleReachHorizontalMove : undefined, onReachUp: _this2.handleReachUp, onPhotoClick: _this2.handlePhotoClick, onMaskClick: _this2.handlePhotoMaskClick, photoScale: photoIndex === realIndex ? photoScale : 1, wrapClassName: viewClassName, className: imageClassName, style: {
left: (innerWidth + _variables.horizontalOffset) * realIndex + 'px',

@@ -276,2 +292,7 @@ WebkitTransform: transform,

}),
introVisible && overlayIntro ? _react2['default'].createElement(
_FooterWrap2['default'],
{ style: overlayStyle },
overlayIntro
) : undefined,
overlay

@@ -300,2 +321,7 @@ );

PhotoSlider.displayName = 'PhotoSlider';
PhotoSlider.defaultProps = {
maskClosable: true,
bannerVisible: true,
introVisible: true
};
module.exports = exports['default'];
import React from 'react';
import { ReachFunction, ReachTypeEnum } from './types';
import { ReachFunction, PhotoClickFunction, ReachTypeEnum } from './types';
interface IPhotoViewProps {

@@ -11,3 +11,4 @@ src: string;

brokenElement?: JSX.Element;
onPhotoClick?: (clientX: number, clientY: number) => void;
onPhotoClick?: PhotoClickFunction;
onMaskClick?: PhotoClickFunction;
onReachTopMove?: ReachFunction;

@@ -17,3 +18,3 @@ onReachRightMove?: ReachFunction;

onReachLeftMove?: ReachFunction;
onReachUp?: (clientX: number, clientY: number, TouchTypeEnum: any) => void;
onReachUp?: (clientX: number, clientY: number) => void;
onPhotoResize?: () => void;

@@ -52,3 +53,2 @@ }

private photoRef;
private readonly onPhotoClick;
constructor(props: any);

@@ -59,3 +59,3 @@ componentDidMount(): void;

handleMove: (newClientX: number, newClientY: number, touchLength?: number) => void;
debouncePhotoClick: (newClientX: number, newClientY: number) => void;
photoClick: (newClientX: number, newClientY: number) => void;
handlePhotoClick: (e: any) => void;

@@ -67,2 +67,3 @@ handleDoubleClick: (e: any) => void;

handleMaskTouchStart: (e: any) => void;
handleMaskClick: (e: any) => void;
handleTouchStart: (e: any) => void;

@@ -69,0 +70,0 @@ handleMouseDown: (e: any) => void;

@@ -55,2 +55,6 @@ 'use strict';

var _getCurrentFromEvent2 = require('./utils/getCurrentFromEvent');
var _getCurrentFromEvent3 = _interopRequireDefault(_getCurrentFromEvent2);
var _getMultipleTouchPosition = require('./utils/getMultipleTouchPosition');

@@ -179,3 +183,3 @@

};
_this.debouncePhotoClick = function (newClientX, newClientY) {
_this.photoClick = function (newClientX, newClientY) {
var onPhotoClick = _this.props.onPhotoClick;

@@ -186,3 +190,3 @@ var _this$state3 = _this.state,

if (onPhotoClick && clientX === newClientX && clientY === newClientY) {
if (onPhotoClick && Math.abs(clientX - newClientX) < 5 && Math.abs(clientY - newClientY) < 5) {
onPhotoClick(newClientX, newClientY);

@@ -192,8 +196,12 @@ }

_this.handlePhotoClick = function (e) {
_this.onPhotoClick(e.clientX, e.clientY);
var _getCurrentFromEvent = (0, _getCurrentFromEvent3['default'])(e),
clientX = _getCurrentFromEvent.clientX,
clientY = _getCurrentFromEvent.clientY;
_this.photoClick(clientX, clientY);
};
_this.handleDoubleClick = function (e) {
e.preventDefault();
// 取消 click 事件
_this.onPhotoClick.cancel();
// @ts-ignore 取消 click 事件
_this.photoClick.cancel();
var clientX = e.clientX,

@@ -257,4 +265,3 @@ clientY = e.clientY;

lastX: prevState.x,
lastY: prevState.y,
touchedTime: Date.now()
lastY: prevState.y
};

@@ -273,2 +280,13 @@ });

};
_this.handleMaskClick = function (e) {
var evt = (0, _getCurrentFromEvent3['default'])(e);
var onMaskClick = _this.props.onMaskClick;
var _this$state4 = _this.state,
clientX = _this$state4.clientX,
clientY = _this$state4.clientY;
if (onMaskClick && Math.abs(clientX - evt.clientX) < 5 && Math.abs(clientY - evt.clientY) < 5) {
onMaskClick(clientX, clientY);
}
};
_this.handleTouchStart = function (e) {

@@ -316,5 +334,5 @@ if (e.touches.length >= 2) {

_this.handleUp = function (newClientX, newClientY) {
var _this$state4 = _this.state,
touched = _this$state4.touched,
maskTouched = _this$state4.maskTouched;
var _this$state5 = _this.state,
touched = _this$state5.touched,
maskTouched = _this$state5.maskTouched;

@@ -339,3 +357,3 @@ if (touched || maskTouched) {

if (onReachUp) {
onReachUp(newClientX, newClientY, maskTouched ? _types.TouchTypeEnum.Mask : _types.TouchTypeEnum.Image);
onReachUp(newClientX, newClientY);
}

@@ -414,3 +432,4 @@ var hasMove = clientX !== newClientX || clientY !== newClientY;

};
_this.onPhotoClick = (0, _lodash2['default'])(_this.debouncePhotoClick, 400);
// 加入延迟触发,避免与双击混淆
_this.photoClick = (0, _lodash2['default'])(_this.photoClick, 300);
_this.handleMove = (0, _throttle2['default'])(_this.handleMove, 8);

@@ -464,3 +483,3 @@ return _this;

{ className: wrapClassName, style: style },
_react2['default'].createElement(_PhotoMask2['default'], { onMouseDown: _isMobile2['default'] ? undefined : this.handleMaskMouseDown, onTouchStart: _isMobile2['default'] ? this.handleMaskTouchStart : undefined }),
_react2['default'].createElement(_PhotoMask2['default'], { onMouseDown: _isMobile2['default'] ? undefined : this.handleMaskMouseDown, onTouchStart: _isMobile2['default'] ? this.handleMaskTouchStart : undefined, onClick: this.handleMaskClick }),
_react2['default'].createElement(_Photo2['default'], { className: className, src: src, ref: this.handlePhotoRef, onClick: this.handlePhotoClick, onDoubleClick: this.handleDoubleClick, onMouseDown: _isMobile2['default'] ? undefined : this.handleMouseDown, onTouchStart: _isMobile2['default'] ? this.handleTouchStart : undefined, onWheel: this.handleWheel, onPhotoResize: this.handleResize, style: {

@@ -467,0 +486,0 @@ WebkitTransform: transform,

/**
* 图片 item 类型
*/
import React from 'react';
export declare type dataType = {
dataKey: string;
key?: string;
src: string;
intro?: React.ReactNode;
};
export interface IPhotoProviderBase {
maskClosable?: boolean;
bannerVisible?: boolean;
introVisible?: boolean;
overlay?: React.ReactNode;
className?: string;
maskClassName?: string;
viewClassName?: string;
imageClassName?: string;
loadingElement?: JSX.Element;
brokenElement?: JSX.Element;
}
export declare type ReachFunction = (clientX: number, clientY: number) => void;
export declare type PhotoClickFunction = (clientX: number, clientY: number) => void;
/**

@@ -26,8 +41,1 @@ * 边缘超出状态

}
/**
* 触摸类型
*/
export declare enum TouchTypeEnum {
Image = 1,
Mask = 2
}

@@ -24,10 +24,2 @@ "use strict";

ReachTypeEnum[ReachTypeEnum["YReach"] = 2] = "YReach";
})(ReachTypeEnum || (exports.ReachTypeEnum = ReachTypeEnum = {}));
/**
* 触摸类型
*/
var TouchTypeEnum = exports.TouchTypeEnum = undefined;
(function (TouchTypeEnum) {
TouchTypeEnum[TouchTypeEnum["Image"] = 1] = "Image";
TouchTypeEnum[TouchTypeEnum["Mask"] = 2] = "Mask";
})(TouchTypeEnum || (exports.TouchTypeEnum = TouchTypeEnum = {}));
})(ReachTypeEnum || (exports.ReachTypeEnum = ReachTypeEnum = {}));
{
"name": "react-photo-view",
"version": "0.1.8",
"version": "0.2.0",
"description": "React photo preview.",

@@ -5,0 +5,0 @@ "main": "./lib/index",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc