实现图片通过滚轮的放大缩小

本文介绍了一种使用HTML、CSS和JavaScript实现图片通过鼠标滚轮进行缩放的方法。该方法利用了事件监听器和样式的zoom属性来完成图片的放大和缩小功能,并通过设置绝对定位来确保图片在缩放过程中的位置准确性。

实现图片通过滚轮的放大缩小

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

</head>
 <style type="text/css">
  body{font-size: 12px;font-family: "Verdana" , "Arial" , "Helvetica" , "sans-serif";} 
  button{
    background-color: #ccc;
    color:black;
    width:100px;
    height: 30px;
    border-radius: 5px;
  }
  #block1 { position:absolute;}
  #div2 {width:100%; height:100%; background:white; position:absolute;overflow: hidden;}

 </style>
<body>
<div id="main">
 <div id="div2">
 <div class="dragAble" id="block1" onMouseOver="dragObj=block1; drag=1;" style="z-index: 10;
  left: 0px;  position: absolute; top: 0px; " onMouseOut=""drag="0">
  <div id='lm_test'  style="zoom: 1.5;z-index: 100000;width: 100%;height: 100%" >
  <img  src="static/img/userContrail/buildground.png" border="0" name="images1"><!-- 显示的大图片 -->


</div>
 </div>
 </div>
</div>
<script type="text/javascript">


drag = 0
move = 0

var ie=document.all;
var nn6=document.getElementById&&!document.all;
var isdrag=false;
var y,x;
var oDragObj;

var oDiv=document.getElementById('block1');
  var oDiv2=document.getElementById('div2');

  var disX=0;
  var disY=0;

  oDiv.onmousedown=function (ev)
  {
    var oEvent=ev||event;


    disX=oEvent.clientX-oDiv.offsetLeft;
    disY=oEvent.clientY-oDiv.offsetTop;

    document.onmousemove=function (ev)
    {
      var oEvent=ev||event;
      var l=oEvent.clientX-disX;
      var t=oEvent.clientY-disY;

      if(l>0)
      {
        l=0;
      }
      else if(l<oDiv2.offsetWidth-oDiv.offsetWidth)
      {
        l=oDiv2.offsetWidth-oDiv.offsetWidth;
      }

      if(t>0)
      {
        t=0;
      }
      else if(t<oDiv2.offsetHeight-oDiv.offsetHeight)
      {
        t=oDiv2.offsetHeight-oDiv.offsetHeight;
      }

      oDiv.style.left=l+'px';
      oDiv.style.top=t+'px';
    };

    document.onmouseup=function ()
    {
      document.onmousemove=null;
      document.onmouseup=null;
    };

    return false;
  };
 //滚轮缩放
 document.getElementById("lm_test").onmousewheel=function(){
  return onWheelZoom(this);
}
function onWheelZoom(obj){ 

zoom = parseFloat(obj.style.zoom);
tZoom = zoom + (event.wheelDelta>0 ? 0.05 : -0.05);
if(tZoom<0.5) return true;
obj.style.zoom=tZoom;
return false;
}

</script>
</body>
</html>
在 Qt 中实现通过鼠标滚轮控制图片缩放功能,通常可以使用 `QPixmap` 结合 `QLabel` 或 `QGraphicsView` 来完成。下面是一个基于 `QLabel` 的示例,展示如何利用鼠标滚轮事件来动态缩放图像。 ### 实现思路 1. **继承 QLabel**:创建一个自定义的 `QLabel` 子类,以便重写鼠标事件。 2. **处理滚轮事件**:在 `wheelEvent` 函数中根据滚轮的方向调整图像的缩放比例。 3. **更新图像显示**:每次缩放后重新计算图像的大小,并更新显示效果。 ### 示例代码 ```cpp #include <QLabel> #include <QWheelEvent> #include <QPixmap> #include <QTransform> class ImageLabel : public QLabel { Q_OBJECT public: explicit ImageLabel(QWidget *parent = nullptr) : QLabel(parent), scale_factor(1.0) {} void setPixmap(const QPixmap &pixmap) { original_pixmap = pixmap; current_pixmap = original_pixmap; QLabel::setPixmap(current_pixmap); } protected: void wheelEvent(QWheelEvent *event) override { // 获取滚轮滚动的角度(单位为1/8度) int delta = event->angleDelta().y(); // 根据滚轮方向调整缩放比例 if (delta > 0) { scale_factor *= 1.1; // 放大 } else { scale_factor /= 1.1; // 缩小 } // 限制缩放范围 scale_factor = qBound(0.1, scale_factor, 10.0); // 缩放图像 QTransform transform; transform.scale(scale_factor, scale_factor); current_pixmap = original_pixmap.transformed(transform); // 更新 QLabel 显示的图像 QLabel::setPixmap(current_pixmap); } private: QPixmap original_pixmap; // 原始图像 QPixmap current_pixmap; // 当前显示的图像 double scale_factor; // 缩放因子 }; ``` ### 使用说明 1. 在主窗口中创建 `ImageLabel` 实例并设置图像: ```cpp ImageLabel *imageLabel = new ImageLabel(this); imageLabel->setPixmap(QPixmap(":/path/to/image.png")); ``` 2. 将 `ImageLabel` 添加到布局中以确保正确显示: ```cpp QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(imageLabel); setLayout(layout); ``` 3. 运行程序后,将鼠标悬停在图像上并滚动滚轮即可实现放大缩小。 ### 注意事项 - 如果需要以鼠标位置为中心进行缩放,可以在 `wheelEvent` 中获取当前鼠标坐标,并根据该点进行图像变换[^2]。 - 图像缩放时可能会导致性能问题,尤其是在图像较大或频繁缩放的情况下,建议对缩放逻辑进行优化。 ### 扩展功能 - 可以结合 `QMouseEvent` 实现拖动图像的功能。 - 使用 `QGraphicsView` 和 `QGraphicsPixmapItem` 可以更灵活地实现复杂的交互操作,如旋转、平移等[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值