1.控制图片的信息
imgScale: '100%', // 图片放大缩小 imgTransform: '', // 旋转 imgCurrent: 0, // 当前的旋转 x: 0, // x移动 y: 0, // y移动
2.执行用的函数
// 放大 imgToBigger() { this.setState({ imgScale: `${parseInt(this.state.imgScale, 10) + 25}%` }); } // 缩小 imgToSmaller() { this.setState({ imgScale: `${parseInt(this.state.imgScale, 10) - 25}%` }); } // 滚轮缩放 handleZoom(e) { if (e.nativeEvent.deltaY <= 0) { this.setState({ imgScale: `${parseInt(this.state.imgScale, 10) + 18}%` }); // 图片宽度每次增加18 } else if (e.nativeEvent.deltaY > 0) { this.setState({ imgScale: `${parseInt(this.state.imgScale, 10) - 18 > 0 ? parseInt(this.state.imgScale, 10) - 18 : parseInt(this.state.imgScale, 10)}%` }); // 图片宽度 } } // 拖拽 moveImg = (ev) => { const { x, y } = this.state; ev.preventDefault(); const disx = ev.pageX - x; const disy = ev.pageY - y; document.onmousemove = (e) => { this.setState({ x: e.pageX - disx, y: e.pageY - disy, }); }; document.onmouseup = () => { document.onmousemove = null; document.onmousedown = null; }; } // 左旋转 imgToLeftRoll() { const a = (this.state.imgCurrent - 90) % 360; this.setState({ imgTransform: `rotate(${a}deg)`, imgCurrent: a }); } // 右旋转 imgToRightRoll() { const a = (this.state.imgCurrent + 90) % 360; this.setState({ imgTransform: `rotate(${a}deg)`, imgCurrent: a }); }
3.运用的组件
<Modal width="auto" centered="true" overflow="hidden" visible={previewVisible} footer={[ <scmp.Div margin="0 auto" textAlign="center" key="Modal"> <scmp.AntdButton border="none" padding="5px 8px" title="amplify" onClick={() => this.imgToBigger()} // 点击放大 > <ZoomInOutlined /> </scmp.AntdButton> <scmp.AntdButton border="none" padding="5px 8px" title="reduce" onClick={() => this.imgToSmaller()} // 点击缩小 > <ZoomOutOutlined /> </scmp.AntdButton> <scmp.AntdButton border="none" padding="5px 8px" title="Counterclockwise rotation" onClick={() => this.imgToLeftRoll()} // 左旋转 > <UndoOutlined /> </scmp.AntdButton> <scmp.AntdButton border="none" padding="5px 8px" title="Clockwise rotation" onClick={() => this.imgToRightRoll()} // 右旋转 > <RedoOutlined /> </scmp.AntdButton> </scmp.Div>, ]} onCancel={this.handleCancel} // 作废的时候把改的参数还原 title="Preview" > <div width="800px" height="600px" position="relative" onm ouseDown={this.moveImg} // 拖拽事件 onWheel={this.handleZoom} // 缩放事件 > <div width="wrap_content" height="wrap_content" position="absolute" top="50%" left="50%" transform="translate(-50%, -50%)" > <img width="wrap_content" maxWidth="800px" height="wrap_content" position="relative" // onm ouseMove={this.handleMouseMove} style={{ imageRendering: 'pixelated', scale: imgScale, transform: imgTransform, left: `${x}px`, top: `${y}px`, // transformOrigin: `${centreX}px ${centreY}px`, }} alt="example" src={previewImage} /> </div> </div> </Modal>
标签:const,定义,预览,imgScale,react,state,parseInt,imgCurrent,setState From: https://www.cnblogs.com/Dluea/p/17225593.html