图片旋转+滚动鼠标中间对图片放大缩小

layui实现预览图片并可以滚动鼠标放大缩小图片 首先通过绑定点击事件来打开图片预览。当点击事件触发时,获取被点击图片的链接和标题。事件,根据鼠标滚动的方向来计算图片的缩放比例,进而调整图片的宽度、高度和位置。方法中,通过传入一个包含图片信息的对象来配置预览的图片,其中包括图片标题和链接。回调函数中,实现了以鼠标位置为中心的滚动放大缩小功能。参数用于指定图片预览的动画效果。来获取相应的元素并进行样式调整。方法来打开图片预览。 阅读详情
目录结构:

image.png

html-pictureDemo.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">  /*css代码*/
        * {
            margin: 0px;
            padding: 0px;
          }
 
        #pandiv {
            width: 700px;
            height: 500px;
        }
 
        #control {
            background: #ccc;
            opacity: 0.7;
            width: 200px;
            height: 30px;
            display: none;
            padding-top: 5px;
            position: absolute;
            left: 250px;
            top: 450px;
        }
 
        #canvas {
            border: 1px solid black;
        }
 
        #left {
            float: left;
            display: block;
        }
 
        #right {
            float: right;
            display: block;
        }
</style>
<script type="text/javascript" src="../js/jquery-1.9.1.min.js"></script>

<link >
</head>
<body>
<div id="pandiv">
        <img src="../image/3.png" style="display: none;">
        <canvas id="canvas" width="700" height="500" style="cursor: default;"> </canvas>
        <div id="control" style="display: none;">
        <img id="left" src="../image/left1.png" onclick="rateImage(270)">  /*左旋转*/
        <img id="right" src="../image/right1.png" onclick="rateImage(90)"> /*右旋转*/
    </div>
    </div>
    <script type="text/javascript" src="../js/pictureJs.js"></script>
</body>
</html>
JS-pictureJs.js
/**
 * 
 */
 
var canvas = document.getElementById("canvas");
var pandiv = document.getElementById("pandiv");
var cxt = canvas.getContext("2d");
var control = document.getElementById("control");
var imgScale = 1;
var img;
var imgX = 0;
var imgY = 0;
var currentRate = 0;
/**当前的旋转角度*/
var mouseDownLocation;
var isMouseDown = false;
 
window.onload = function() {
    var bbox = canvas.getBoundingClientRect();
    var imageUrl = $("#pandiv>img").attr("src");
    img = new Image();
    img.src = imageUrl;
    img.id = "pic";
 
    loadImage();
    drawImage();
}
 
function reLoadImage() {
    loadImage();
}
function loadImage() {
    if (img.width <= canvas.width && img.height <= canvas.height) {
        imgX = (canvas.width - img.width * imgScale) / 2
        imgY = (canvas.height - img.height * imgScale) / 2;
    } else {
        var ratio = img.width / img.height;
        widthTime = img.width / canvas.width;
        heightTime = img.height / canvas.height;
 
        if (widthTime > heightTime) {
            img.width = canvas.width;
 
            img.height = canvas.width / ratio;
        } else {
            img.height = canvas.height;
            img.width = canvas.height * ratio;
 
        }
 
        imgX = (canvas.width - img.width * imgScale) / 2
        imgY = (canvas.height - img.height * imgScale) / 2
    }
}
 
//var backGroundColor = ['#223344', '#445566', '#667788', '#778899'];
//var backGroundColorIndex = 0;
function drawImage() {
 
    var bbox = canvas.getBoundingClientRect();
 
    //cxt.clearRect(0, 0, canvas.width, canvas.height);
    cxt.clearRect(-200, -200, canvas.width * 2, canvas.height * 2);
 
    // cxt.fillStyle = backGroundColor[backGroundColorIndex++ % backGroundColor.length];
    //cxt.fillRect(0, 0, canvas.width, canvas.height);
 
    cxt.drawImage(img, imgX, imgY, img.width * imgScale, img.height * imgScale);
}
 
// windowToCanvas此方法用于鼠标所在点的坐标切换到画布上的坐标
function windowToCanvas(canvas, x, y) {
    var bbox = canvas.getBoundingClientRect();
    return {
        x : x - bbox.left - (bbox.width - canvas.width) / 2,
        y : y - bbox.top - (bbox.height - canvas.height) / 2
    };
}
 
function isPointInImageArea(point) {
    return true;
    //return (point.x > imgX && point.x < imgX + img.width * imgScale &&
    //point.y > imgY && point.y < imgY + img.height * imgScale);
}
function isPointInCanvasArea(point) {
    return true;
    //var bbox = canvas.getBoundingClientRect();
    //return (point.x > bbox.left && point.x < bbox.right && point.y > bbox.//top && point.y < bbox.bottom);
}
function isDivArea(point) {
    return true;
    //var bbox =pandiv.getBoundingClientRect();
    //return (point.x > bbox.left && point.x < bbox.right && point.y > bbox.//top && point.y < bbox.bottom);
}
 
canvas.onmousewheel = canvas.onwheel = function(event) {
 
    var pos = windowToCanvas(canvas, event.clientX, event.clientY);
    event.wheelDelta = event.wheelDelta ? event.wheelDelta
            : (event.deltaY * (-40));
 
    if (event.wheelDelta > 0) {
        //alert("放大");
        if (isPointInImageArea(pos)) {
            imgScale *= 2;
            //imgX = imgX * 2 - pos.x;
            // imgY = imgY * 2 - pos.y;
            imgX = (canvas.width - img.width * imgScale) / 2
            imgY = (canvas.height - img.height * imgScale) / 2
        } else {
            imgScale *= 2;
            //imgX = (canvas.width - img.width * imgScale) / 2;
            //imgY = (canvas.height - img.height * imgScale) / 2;
            imgX = (canvas.width - img.width * imgScale) / 2
            imgY = (canvas.height - img.height * imgScale) / 2
        }
    } else {
        //alert("缩小");
        if (isPointInImageArea(pos)) {
            imgScale /= 2;
            //imgX = imgX * 0.5 + pos.x * 0.5;
            // imgY = imgY * 0.5 + pos.y * 0.5;
            imgX = (canvas.width - img.width * imgScale) / 2
            imgY = (canvas.height - img.height * imgScale) / 2
        } else {
            imgScale /= 2;
            // imgX = (canvas.width - img.width * imgScale) / 2;
            // imgY = (canvas.height - img.height * imgScale) / 2;
            imgX = (canvas.width - img.width * imgScale) / 2
            imgY = (canvas.height - img.height * imgScale) / 2
        }
    }
 
    drawImage();
 
    return false;
}
 
/**旋转angle度*/
function rateImage(angle) {
    currentRate = (currentRate + angle) % 360;
 
    cxt.clearRect(0, 0, canvas.width, canvas.height);
    //cxt.save();
    cxt.translate(canvas.width / 2, canvas.height / 2);
    cxt.save();
    cxt.rotate(angle * Math.PI / 180);
    cxt.translate(-canvas.width / 2, -canvas.height / 2);
    imgScale = 1;
    reLoadImage();
 
    drawImage();
    //cxt.restore();
}
 
/**鼠标按下*/
pandiv.onmousedown = function(event) {
    mouseDownLocation = windowToCanvas(canvas, event.clientX, event.clientY);
    if (isPointInImageArea(mouseDownLocation)) {
        isMouseDown = true;
        document.title = 'mouse down';
    }
}
/**鼠标弹起*/
document.body.onmouseup = function() {
    isMouseDown = false;
    canvas.style.cursor = "default";
    document.title = 'mouse up';
}
/**鼠标移动*/
pandiv.onmousemove = function(event) {
    if (isMouseDown) {
        canvas.style.cursor = "move";
        var newMouseLocation = windowToCanvas(canvas, event.clientX,
                event.clientY);
        if (isDivArea({
            x : event.clientX,
            y : event.clientY
        })) {
            var x = newMouseLocation.x - mouseDownLocation.x;
            var y = newMouseLocation.y - mouseDownLocation.y;
            mouseDownLocation = newMouseLocation;
            /**根据角度,计算图片偏移*/
            if (0 == currentRate) {
                imgX += x;
                imgY += y;
            } else if (90 == currentRate) {
                imgX += y;
                imgY -= x;
            } else if (180 == currentRate) {
                imgX -= x;
                imgY -= y;
            } else if (270 == currentRate) {
                imgX -= y;
                imgY += x;
            }
        } else {
            /** 鼠标移动至画布范围外,置鼠标弹起 */
            isMouseDown = false;
            canvas.style.cursor = "default";
            document.title = 'mouse up';
        }
        drawImage();
    }
}
pandiv.onmouseover = function() {
    //alert("1");
    control.style.display = "block";
 
}
canvas.onmouseout = function() {
    //alert("1");
    control.style.display = "none";
}
Vue.js中结合jQuery.js实现在指定区域内图片的放大缩小、拖拽及旋转 Vue.js结合jQuery.js实现在指定区域内图片的放大缩小及拖拽 工作项目中,使用vue.js+require.js还有少量的JQuery.js组成的前端JS环境,样式用的element-ui,工作需求是要对APP端传到PC端页面的十几张甚至几十张图片进行显示,且与OCR识别图片中的信息进行人工比对,这就需要PC端的工作人员细致的查看图片,要支持在指定的div中图片可放大、缩小、可拖动。 阅读详情

相关推荐

JS鼠标为中心放大缩小旋转拖动

JS鼠标为中心放大缩小旋转(实现以鼠标为中心的滚动无限放大缩小)拖动旋转

js 以鼠标为中心缩放图片

原理 使用的绘制方法 void ctx.drawImage(image, dx, dy, dWidth, dHeight); 参数说明: dx image的左上角在目标canvas上 X 轴坐标。 dy image的左上角在目标canvas上 Y 轴坐标。 dWidth(可选) image在目标canvas上绘制的宽度。 允许对绘制的image进行缩放。 如果不说明, 在绘制时image宽度不会缩放。 dHeight(可选) image在目标canvas上绘制的高度。 允许对绘制的image进行缩放。 如

qq_43589960的博客 2825

asp.net b/s架构图像缩放与旋转

通常对图片处理多方于C/S架构中,B/S较少,本程序在页面实现对图像的缩放和任意角度的旋转。

html 图片滚动 放大缩小,js实现图片旋转 js滚动鼠标中间对图片放大缩小

从开通博客园到今天,有两个多月了。我发现之前没有开通博客记录自己所做的东西,真是后悔啊。现在一点一点把自己所做的功能以博客的形式记录下来,一方面可以给大家分享,大家一起学习,同时自己也从新回顾一下。这个图片放大,缩小和旋转,我采用canvas画布这个来做的,核心点就在js中去控制鼠标状态及事件。我先给大家展示一下效果图。鼠标移到画布范围内就会出现下方的操作栏,每次以90度选择。1.在引入js的时候...

weixin_29466045的博客 1404

MFC鼠标中键拖动、同时滚轮缩放(根据鼠标位置)绘制的图形

1、VS2010开发的MFC对话框程序; 2、可利用中键拖动绘制的图形; 3、滚轮根据当前鼠标的位置缩放绘制的图形; 4、与AutoCAD及其他平面设计软件的鼠标功能相同。 5、可作为具有类似应用开发的模板、关键代码均提供详细的注释。

图片查看器(翻转、鼠标放大缩小等、全屏)

一个前端图片查看器,可以实现图片翻转、鼠标放大缩小等功能,预览地址:http://www.jq22.com/demo/jQueryViewer20160329/index.html,内附文档。

js 鼠标滚动效果:图片放大缩小

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X...

全易 3605

js实现图片旋转 js滚动鼠标中间对图片放大缩小

从开通博客园到今天,有两个多月了。我发现之前没有开通博客记录自己所做的东西,真是后悔啊。 现在一点一点把自己所做的功能以博客的形式记录下来,一方面可以给大家分享,大家一起学习,同时自己也从新回顾一下。 这个图片放大,缩小和旋转,我采用canvas画布这个来做的,核心点就在js中去控制鼠标状态及事件。 我先给大家展示一下效果图。 鼠标移到画布范围内就会出现下方的操作栏,每次以90度选择。 1.在引入js的时候一定要注意了,由于在使用画布canvas时,需要等图片加载完成后才可以执行画布里的内容。js要在最后引入。 2.js中要在图片加载完成之后在方法 主要的地方就是这个啦,其它就是js方法

js以鼠标位置为中心的滑轮放大功能

代码来自网上,小小改动了下,可以用其他的东西替换页面中aaa <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

一枚小前端 1400

手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现

PhotoSwipe 是专为移动触摸设备设计的相册/画廊.兼容所有iPhone、iPad、黑莓6+,以及桌面浏览器.底层实现基于HTML/CSS/JavaScript,是一款免费开源的相册产品。 为谁而用 让移动站点的相册体验和原生App一样的设计师和开发者。 绝佳特性 PhotoSwipe提供给用户一个熟悉又直观的相册交互界面。 官方网站 http://www.photoswipe.com/ 源码示例 http://github.com/downloads/codecomputerlove/PhotoSwipe/code.photoswipe-3.0.5.zip Github https:/

手把手教你配置MAX96712解串器:从I2C地址分配到PWM帧同步

本文详细解析了MAX96712解串器在自动驾驶视觉链路中的核心配置流程。从I2C地址分配、GMSL2数据流映射到实现多摄像头精准同步的PWM帧同步触发,手把手指导工程师构建高可靠性的图像传输系统,并提供了实用的Linux调试技巧与问题排查思路。

weixin_29297127的博客 924

实现图片旋转,滚动鼠标中间对图片放大缩小

从开通博客园到今天,有两个多月了。我发现之前没有开通博客记录自己所做的东西,真是后悔啊。 现在一点一点把自己所做的功能以博客的形式记录下来,一方面可以给大家分享,大家一起学习,同时自己也从新回顾一下。 这个图片放大,缩小和旋转,我采用canvas画布这个来做的,核心点就在js中去控制鼠标状态及事件。 我先给大家展示一下效果图。 鼠标移到画布范围内就会出现下方的操作栏,每次以90度...

anwubeng6215的博客 353

matlab电容式传感器仿真,差动电容式位移传感器的仿真研究

设计了一种差动电容式位移传感器,主要对传感器的数学模型及电容检测电路进行了仿真研究。其中检测电路设计主要包括正弦激励电路、转换桥路、信号放大电路、精密整流电路和滤波电路。最后利用Matlab/SimurFnk软件对所设计的系统进行仿真,并分析了传感器性能。仿真研究表明,传感器及其检测电路具有合理性,测量范围内具有很好的线性度。0|| I≯ lat on ii{差动容尊翩’亘研发注:湖南省教育厅资...

weixin_36323601的博客 1390

使用lightbox 点击表格的图片放大,放大后可以旋转 滚动鼠标放大缩小

引用 lightbox.css lightbox.js 在js中搜索 Lightbox.prototype.build = function() { 在这个方法后面添加下面的内容 // 图片滚轮缩放 this.img = this.$container.find('.lb-image'); this.label = this.$lightbox.find(...

Null_Bugs的博客 1214

【ESP32实战】SPI驱动ILI9341屏幕:从基础绘图到汉字显示

本文详细介绍了如何使用ESP32通过SPI驱动ILI9341屏幕,从基础连接、SPI初始化到实现基础绘图、数字显示及汉字显示的全过程。文章包含实用的代码示例和优化技巧,帮助开发者快速掌握屏幕驱动技术,提升显示性能。特别针对常见问题如花屏、刷新率等提供了解决方案。

weixin_29164091的博客 621

VTK基础教程(1)- vtkPolyData 介绍

目录 VTK的编译与环境搭建 VTK一般渲染流程 VTK数据类型-vtkPolyData 使用vtk自带的多边形数据 使用自己创建的数据 添加顶点颜色 添加面颜色 VTK的编译与环境搭建 这部分目前已经有了大佬做了成熟的傻瓜式配置,大家可以参考这篇文章:VTK+VS2019(或其他版本均可) 傻瓜式一站式 配置_Nancy_fairy的博客-优快云博客_vs2019 vtk VTK一般渲染流程 这部分的介绍也很多,大家可以参考这篇文章:VTK笔记-了解VTK_黑山老妖的博客.

qq_35769071的博客 9054

html图片控制处理放大缩小移动多种案例(附源码)

html图片控制处理放大缩小移动多种案例(附源码),简约图片预览,仿京东图片放大镜效果,图片查看器,可放大缩小,旋转,图片放大镜效果,图片放大缩小查看,图片放大显示,支持滚轮调整大小,图片上下滑动缩略图字幕效果,各种风格都有,代码上手简单,代码独立,可以直接使用。也可直接预览效果。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 6841

从零到一:RT-Thread与W5500的硬件抽象层设计哲学与实践启示

本文深入探讨了RT-Thread操作系统下W5500以太网模块的硬件抽象层(HAL)设计哲学与实践。通过GD32F103和STM32F103平台的适配案例,详细阐述了如何利用RT-Thread的驱动框架实现跨平台硬件无关性、模块化设计及配置定制,为嵌入式开发者提供了可复用的HAL设计方法论和实战经验。

7z8x2c4v6b9的博客 197

JS 图片放大缩小、旋转

<html> <head> <script src="https://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script> <script type="text/javascript"> var base_scrollBar = 0; function imgShow(outerdiv, innerdiv, bigimg, _this) { var rIndex = 0; .

医然 3141

DataCastle-租金预测

ID:编号;时间:房屋信息采集的时间;小区名:房屋所在小区,已脱敏处理;小区房屋出租数量:小区出租房屋数量,已脱敏处理;楼层:0、1、2分别表示楼层低,中,高;总层数:房屋所在建筑的总楼层数,已脱敏处理;房屋面积:房屋面积数值,已脱敏处理;房屋朝向:房屋的朝向;居住状态:房屋的居住状态,表示是否已出租或居住中,已脱敏处理;卧室数量:户型信息,数字表示卧室的个数;卫的数量:户型信息,数字表示卫生间的个数;厅的数量:户型信息,数字表示厅的个数;

优快云 精品推荐 3457

【DeepSeek R1构建本地RAG知识库】数据结构化清洗-工作流自动清洗

在构建本地RAG知识库时,数据结构化清洗是关键但繁琐的步骤。传统方法效率低且易出错,而低代码/无代码平台如Dify提供了更高效的解决方案。Dify通过可视化工作流设计,集成大模型智能处理,支持多格式输入输出,无需编码即可完成复杂的数据清洗任务。文章详细介绍了数据结构化的核心困境、目标、价值及类型,并比较了TXT与Markdown在RAG系统中的适用性。最后,通过Dify平台实战演示了如何在20分钟内完成规则制度文档的结构化清洗,输出标准化数据,展示了自动化工作流在数据处理中的高效性和便捷性。

少说,多做 1222

JQ实现图片预览(轮播,放大缩小,拖拽,ajax请求,旋转)

大致思路:只有鼠标按下时移动生效(需要在) <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #app { width:80px; height:80px; // position:absolute; left:0; right:0; } </style> <script t.

小白在成长的路上 2179

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

antdesign图片点击放大_vue ant-design 图片预览组件,支持旋转,放大缩小,下载

class="picPreview":title="title":visible="imgListShow"@cancel="$emit('close')":bodyStyle="moduleCenter"> v-for="(item,index) in imgList":key="item":src="item":class="{ changeColor:ch...

weixin_39903571的博客 3296

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

vue实现图片鼠标滚动放大缩小、按钮旋转、拖动查看

vue实现图片鼠标滚动放大缩小、按钮旋转

茶荼 2649

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

vue实现图片旋转,放大缩小及拖动功能

【代码】vue实现图片旋转,放大缩小及拖动功能。

yu_run的博客 2905
上一篇: bootstrap穿梭框+el表达式+jstl标签库
下一篇: AJAX请求 $.ajaxSetup方法的使用
TARS_
博客等级 码龄6年 5粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值