位置: IT常识 - 正文

js实现图片的放大缩小(鼠标长按拖拽、鼠标滚轮控制放大缩小)(js图片放大代码)

编辑:rootadmin
js实现图片的放大缩小(鼠标长按拖拽、鼠标滚轮控制放大缩小) 系列文章目录文章目录系列文章目录背景与效果图1.背景如下(功能图):2.效果图如下:拖拽后的效果缩放的效果放大的效果一、功能:支持鼠标长按拖拽1.鼠标事件:2.拖拽功能流程3.拖拽部分代码如下二、功能:滚轮控制图片放大缩小1.鼠标事件(推荐使用onwheel;mousewheel存在安全隐患)2.功能流程:3.具体代码如下:三、案例功能的完整代码如下:四、总结(一定要看,功能是有坑的)背景与效果图1.背景如下(功能图):

推荐整理分享js实现图片的放大缩小(鼠标长按拖拽、鼠标滚轮控制放大缩小)(js图片放大代码),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript图片放大,js怎么放图片,js点击图片让图片放大显示,js图片局部放大,js图片展示,js实现图片的放大功能,js图片展示,js怎么放图片,内容如对您有帮助,希望把文章链接给更多的朋友!

该功能的需求点事2个月前的一个需求,当时采用的是Element-UI中的image图片做的一个功能,但是不能满足产品真实的需求,只能定制化自己封装。

该功能在Vue2 的element-UI中还是比较鸡肋的 ⬇️ ⬇️ Element-UI

该功能在Emenent-UI-plus(vue3)版本已经很好的支持了。 完整功能如下link⬇️ ⬇️ Element-Plus的Image标签

2.效果图如下:拖拽后的效果

缩放的效果

放大的效果

一、功能:支持鼠标长按拖拽1.鼠标事件:js实现图片的放大缩小(鼠标长按拖拽、鼠标滚轮控制放大缩小)(js图片放大代码)

onmouseup : 按键弹起事件 onmousemove :鼠标移动事件 onmousedown :鼠标按下事件

2.拖拽功能流程

1.给 需要移动的盒子 添加鼠标按下事件 : onmousedown 盒子要添加绝对定位 。

2.并且给全局(window)注册鼠标移动事件 : onmousemove

3.给需要移动的盒子添加鼠标距离左侧和顶部的长度

4.在鼠标按键松开后把全局注册的鼠标事件移除 (到此拖拽的功能基本完成)

这里如果使用的是img标签作为图片展示的话,一定要把img上的长按拖拽事件先去除,要不然就回出现BUG

3.拖拽部分代码如下 var divMove = document.querySelector('div') divMove.onmousedown = function (e) { window.onmousemove = function (event) { divMove.style.left=event.clientX-e.target.offsetWidth/2+'px' divMove.style.top=event.clientY-e.target.offsetHeight/2+'px' } } divMove.onmouseup=function(){ window.onmousemove =null }二、功能:滚轮控制图片放大缩小1.鼠标事件(推荐使用onwheel;mousewheel存在安全隐患)

1.onwheel : wheel当用户旋转定点设备(通常是鼠标)上的滚轮按钮时会触发该事件。(现在主流的浏览器都支持该事件)

2.mousewheel : 操作鼠标滚轮或类似设备时异步触发该事件。它由MouseWheelEvent界面表示

2.功能流程:

1.获取需要放大缩小的盒子DOM 给盒子绑定onwheel事件(这个事件里面存在在谷歌和火狐上放大和缩小的Api不准确,建议先尝试确认下)

2.给需要放大缩小的盒子DOM 添加Css样式 scale控制图片的缩放

3.具体代码如下: //scale是为了控制图片大小为正常渲染 let scale = 1 divMove.onwheel=function(e){ if(e.wheelDelta>0){ scale+=0.05 divMove.style.transform=`scale(${scale})` }else{ scale-=0.05 divMove.style.transform=`scale(${scale})` } }三、案例功能的完整代码如下:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> div { width: 500px; background-color: antiquewhite; position: absolute; background-image: url("https://top-mvp-img.xhscdn.com/miniimg/1000g1i81etmd8is4o0003oqd6mc015uq3uh1hcg"); background-repeat: no-repeat; background-size: 100% 100%; } </style></head><body> <button>重置</button> <div><img style=" width: 100%; visibility: hidden;" src="https://top-mvp-img.xhscdn.com/miniimg/1000g1i81etmd8is4o0003oqd6mc015uq3uh1hcg" alt=""></div></body><script> var button =document.querySelector('button') button.onclick=function(){ divMove.style.top=40+'px' divMove.style.left=10+'px' scale=1 divMove.style.transform=`scale(${scale})` } var divMove = document.querySelector('div') divMove.onmousedown = function (e) { window.onmousemove = function (event) { divMove.style.left=event.clientX-e.target.offsetWidth/2+'px' divMove.style.top=event.clientY-e.target.offsetHeight/2+'px' } } divMove.onmouseup=function(){ window.onmousemove =null } let scale = 1 divMove.onwheel=function(e){ if(e.wheelDelta>0){ scale+=0.05 divMove.style.transform=`scale(${scale})` }else{ scale-=0.05 divMove.style.transform=`scale(${scale})` } }</script></html>四、总结(一定要看,功能是有坑的)

在完整的代码里面给出了,多种解决图片拖拽和onmousemove冲突的问题,第一种:可以使用background-image代替img标签;第二种:可以使用img标签添加css的属性解决这个问题。

只是写了简易的功能,主要是为了给大家提供思路,可以通过这个小案例,完善自己的需求。

本文链接地址:https://www.jiuchutong.com/zhishi/278034.html 转载请保留说明!

上一篇:deepin20语音记事本在哪? deepin语音记事本的使用方法(deepin声音)

下一篇:win10待机自动关机怎么办(win10待机自动关机软件)

  • 苹果库乐队怎么退出到主页(苹果库乐队怎么下载不了)

    苹果库乐队怎么退出到主页(苹果库乐队怎么下载不了)

  • machinecheckexception蓝屏

    machinecheckexception蓝屏

  • 微信拉黑再删除怎么加回来(微信拉黑再删除怎么操作)

    微信拉黑再删除怎么加回来(微信拉黑再删除怎么操作)

  • hd6850相当于什么显卡(hd6850相当于什么集显)

    hd6850相当于什么显卡(hd6850相当于什么集显)

  • iphone7拆机触控id失效(苹果7触摸ic维修视频)

    iphone7拆机触控id失效(苹果7触摸ic维修视频)

  • cad找不到指定的图形文件(cad找不到指定的图形文件改不了)

    cad找不到指定的图形文件(cad找不到指定的图形文件改不了)

  • 连接服务器时出现问题是什么意思(连接服务器时出现问题 苹果)

    连接服务器时出现问题是什么意思(连接服务器时出现问题 苹果)

  • i5 6300u什么水平(i5-6300u属于什么水平)

    i5 6300u什么水平(i5-6300u属于什么水平)

  • 路由器怎么看有没有网络(路由器怎么看有没有人蹭网)

    路由器怎么看有没有网络(路由器怎么看有没有人蹭网)

  • 华为备忘录速记划不出来(华为备忘录速记窗口大小怎么调)

    华为备忘录速记划不出来(华为备忘录速记窗口大小怎么调)

  • 支付宝会员名字怎么修改(支付宝会员名字可以改吗)

    支付宝会员名字怎么修改(支付宝会员名字可以改吗)

  • 小米手机被监控了怎么解除(小米手机被监控如何反监控)

    小米手机被监控了怎么解除(小米手机被监控如何反监控)

  • 苹果峰值性能关闭影响使用吗(苹果峰值性能容量点了没反应)

    苹果峰值性能关闭影响使用吗(苹果峰值性能容量点了没反应)

  • 华为nova2支持OTG吗(华为nova2支持鸿蒙吗)

    华为nova2支持OTG吗(华为nova2支持鸿蒙吗)

  • 汉字拼音输入码属于(汉字拼音输入码属于汉子的)

    汉字拼音输入码属于(汉字拼音输入码属于汉子的)

  • 万能钥匙扫一扫在哪里(万能钥匙扫一扫怎么扫)

    万能钥匙扫一扫在哪里(万能钥匙扫一扫怎么扫)

  • 华为mate30上市时间(华为mate30 pro)

    华为mate30上市时间(华为mate30 pro)

  • 新版趣步怎么卖糖果(趣步现在如何)

    新版趣步怎么卖糖果(趣步现在如何)

  • iphone11怎么安装双卡(iPhone11怎么安装软件)

    iphone11怎么安装双卡(iPhone11怎么安装软件)

  • 摄像头毫米代表什么(摄像头的毫米数代表什么)

    摄像头毫米代表什么(摄像头的毫米数代表什么)

  • jdk1.7和1.8的区别(jdk1.7和1.8的区别 jvm)

    jdk1.7和1.8的区别(jdk1.7和1.8的区别 jvm)

  • 闲鱼怎么买东西(闲鱼怎么买东西改价格)

    闲鱼怎么买东西(闲鱼怎么买东西改价格)

  • 曼哈顿河滨公园中的圣女贞德纪念碑 (© Chase Guttman/Alamy)(曼哈顿公园大道432号)

    曼哈顿河滨公园中的圣女贞德纪念碑 (© Chase Guttman/Alamy)(曼哈顿公园大道432号)

  • 如何用ps填补头发(ps填头发)

    如何用ps填补头发(ps填头发)

  • 2020年小微企业所得税税率
  • 一般纳税人做外账没有一点成本票怎么办?
  • 本月无销售额,但是有进项,需要认证吗
  • 装修行业小规模纳税人增值税专票
  • 资产负债表其他应付款包括哪些
  • 新公司实收资本
  • 固定资产不提折旧怎么算
  • 旅行社支付导游费怎么算
  • 计提和缴纳企业所得税分录
  • 对方开票怎么做账务处理
  • 广告业与服务业哪个好
  • 河道工程修建维护管理费何时开始停征?
  • 公司预付签证费怎么入账
  • 供应商转让合同
  • 公司购买电脑费用怎么报销
  • 劳务派遣工资需要发票吗
  • 以前年度少计提收入
  • 建筑业可以开电费发票吗
  • 差额征税的服务费怎么入账
  • 研发费用计入什么科目符合资本化
  • 股利分配账务处理
  • 公司股权变更后税务没有变更会有什么后果
  • msmpeng.exe 是什么
  • windows7增加桌面
  • php保存数据
  • php中false的作用
  • 住宅用途的房屋可以办理医疗器械证吗
  • 在产品定额工时怎么算
  • icon图标教程
  • 持有至到期投资科目被取消了吗
  • php静态页面生成
  • vue脚手架和vue的区别
  • php读取数据库复选框数据
  • 汇兑损益计入哪里
  • 微信小程序基于什么技术
  • 常用php数组排序方法
  • makefile 编译选项
  • 不得抵扣增值税的情形有哪些
  • 物业费少交点,有什么理由
  • 个人佣金收入怎样交税
  • 会计备案报送期间
  • python如何在一个文件中运行另一个文件
  • 公允价值变动损益
  • 使用增值税发票违法吗
  • 不确认递延所得税资产的特殊情况举例
  • 航空电子客票行程单是发票吗
  • 社保局退回来的社保怎么入账
  • 最新版的电子发票没有章
  • 小企业核算方式选独立核算
  • 增值税专用发票查询系统官方网站
  • 调整账户有哪几类
  • 机票退票费计入什么科目
  • 收到银行季度结转怎么做
  • 哪些行业不能开电子发票
  • 小规模纳税人怎么算税
  • 待处理财产损益是备抵类科目吗
  • 红字冲销凭证怎么登明细账
  • 长期待摊费用是非流动资产吗
  • 记账凭证分为哪几类,应具备哪些主要内容
  • 从农业生产者手中购进免税农产品
  • MySQL在Linux系统中隐藏命令行中的密码的方法
  • sql没有数据库
  • mysql安装配置教程5.7.25
  • ubuntu 16.04.6安装教程
  • win8屏幕显示不全
  • 戴尔dell服务器维修
  • pmropn.exe
  • win8.1怎么用
  • linux怎么安装sh
  • win10系统中怎么打开IE浏览器
  • unity3d入门教程中文图解
  • jquery网站开发
  • 安卓手机引导模式设置
  • python3 生成器
  • unity怪物自动攻击
  • 置顶的朋友圈屏蔽的人能看到吗
  • 丰田威驰2023款1.5自动挡新车报价
  • 如何查到银行
  • 核定土地增值税的条件
  • 基本账号信息
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设