原生js实现图片预览,旋转,放大,缩小,拖拽

以下是一个使用原生JavaScript实现的简单图片预览、旋转、放大、缩小和拖拽功能的示例代码。

HTML部分:




<div id="image-container">
  <img id="preview-image" src="path_to_your_image.jpg" alt="Image to preview" />
</div>

CSS部分:




#image-container {
  width: 300px;
  height: 300px;
  overflow: hidden;
  position: relative;
  cursor: move;
}
 
#preview-image {
  width: 100%;
  height: auto;
  transform-origin: center center; /* necessary for rotating the image */
  transition: transform 0.3s ease; /* for smooth transformations */
  position: absolute; /* necessary for drag and drop */
}

JavaScript部分:




const container = document.getElementById('image-container');
const img = document.getElementById('preview-image');
let isDragging = false;
let startX, startY, x, y;
 
// 拖拽功能
container.addEventListener('mousedown', function(e) {
  isDragging = true;
  startX = e.clientX - parseInt(img.style.left);
  startY = e.clientY - parseInt(img.style.top);
});
 
document.addEventListener('mousemove', function(e) {
  if (isDragging) {
    x = e.clientX - startX;
    y = e.clientY - startY;
    img.style.left = x + 'px';
    img.style.top = y + 'px';
  }
});
 
document.addEventListener('mouseup', function() {
  isDragging = false;
});
 
// 缩放功能
const scale = (ratio) => {
  img.style.width = (img.width * ratio / 100) + 'px';
  img.style.height = (img.height * ratio / 100) + 'px';
};
 
// 放大
const zoomIn = () => scale(120);
// 缩小
const zoomOut = () => scale(80);
 
// 旋转功能
const rotate = (angle) => {
  img.style.transform = `rotate(${angle}deg)`;
};
// 顺时针旋转
const rotateClockwise = () => rotate(img.getAttribute('data-angle') + 90);
// 逆时针旋转
const rotateCounterClockwise = () => rotate(img.getAttribute('data-angle') - 90);
 
// 绑定按钮事件
document.getElementById('zoom-in').addEventListener('click', zoomIn);
document.getElementById('zoom-out').addEventListener('click', zoomOut);
document.getElementById('rotate-cw').addEventListener('click', rotateClockwise);
document.getElementById('rotate-ccw').addEventListener('click', rotateCounterClockwise);

确保在HTML中添加对应的按钮以绑定这些事件:




<button id="zoom-in">放大</button>
<button id="zoom-out">缩小</button>
<button id="rotate-cw">顺时针旋转</button>
<button id="rotate-ccw">逆时针旋转</button>

这段代码提供了图片的基本预览功能,并添加了拖拽、缩放、旋转的按钮,以及相应的JavaScript函数来处理这些操作。记得将图片的src属性替换为你要预览的图片路径。

最后修改于:2024年08月19日 07:58

评论已关闭

推荐阅读

Vue中使用mind-map实现在线思维导图
2024年08月04日
VUE
Web前端最全Vue实现免密登录跳转的方式_vue怎么样不登录返回首页,最强技术实现
2024年08月04日
VUE
vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)
2024年08月04日
VUE
Vue-颜色选择器实现方案——>Vue-Color( 实战*1+ Demo*7)
2024年08月04日
VUE
Vue项目卡顿慢加载?这些优化技巧告诉你!_vue数据多渲染卡顿
2024年08月04日
VUE
vue中的keep-alive详解与应用场景
2024年08月04日
VUE
Vue、React实现excel导出功能(三种实现方式保姆级讲解)
2024年08月04日
vue-office/docx插件实现docx文件预览
2024年08月04日
VUE
java调用js文件的两种方法(支持V8引擎)
2024年08月04日
JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js
2024年08月04日
两周从爬虫小白变大神 _yjs_js_security_passport
2024年08月04日
JS笔记(对象、函数、数组)
2024年08月04日
Markdown.js:强大的纯JavaScript Markdown解析器
2024年08月04日
Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。
2024年08月04日
vue 父组件怎么获取子组件里面的data数据
2024年08月04日
VUE
个人开发实现AI套壳网站快速搭建(Vue+elementUI+SpringBoot)
2024年08月04日
el-table 表格封装并改造实现单元格可编辑
2024年08月04日
none
nodejs环境下创建vue项目、SSH密钥登陆!!!
2024年08月04日
vue+quill+element-ui实现视频、图片上传及缩放保姆级教程,轻松使用富文本
2024年08月04日
【three.js】22. Imported Models导入模型
2024年08月04日