图像剪裁中心

6
我希望我的图像可以在中心被裁剪,并能够左右上下移动,同时保持覆盖整个屏幕以适应整个屏幕。用户只能看到图像的某一部分,并且可以像下面的链接一样移动,但他的视点是适合屏幕的小矩形。到目前为止,我只得到了我图像的左上角被裁剪的效果。
如果我没有表达清楚我想要实现的效果,请参考以下链接,但用户不能看到更多的正方形。 https://www.w3schools.com/howto/howto_js_image_zoom.asp 如果您偶然遇到这个问题,我很快就会关闭这张门票。如果您碰巧遇到这个问题,请查看这个问题,我相信我在这里已经尽可能清楚了。 如何自由裁剪您的图像
<style>
img {
    background-position: cover;
    position: absolute;
    clip:rect(0px,500px,500px,0px);
}
.image1 { 
background: url(images/bg.jpg) no-repeat center center; 
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
</style>
</head>
<body>

<div class='clipper-div'>
   <img class='image1' src='office.gif'/>  
</div>
1个回答

2
你要找的是一种插图剪辑:
clip-path: inset(top bottom left right);

您可以监听鼠标移动事件以更新剪辑。在下面的示例中,我使用了添加到clipper-element样式定义中的CSS自定义属性
这些自定义属性被用作剪辑定义的CSS变量。

// Globals variables (we could store them into an object,
// which would be a cleaner way
var clipperDiv = document.getElementById("clipper-div");
var hoveringClippedImg = document.getElementById("hovering-clipped");
var imgBoundingRect = hoveringClippedImg.getBoundingClientRect();
var clippingSize = 40;

// Surrouding DIV element mouse move event callback
clipperDiv.onmousemove = clipHoveredArea;

// Update image clipping

function clipHoveredArea(e) {

  // First step: getting clipping coordinates from mouse position
  var pos = getMousePos(e);
  var top = (pos.y - clippingSize / 2);
  var bottom = (imgBoundingRect.height - pos.y - (clippingSize / 2));
  var left = (pos.x - clippingSize / 2);
  var right = (imgBoundingRect.width - pos.x - clippingSize / 2);

  // Second step: CSS custom properties
  hoveringClippedImg.style.setProperty("--top", top + "px");
  hoveringClippedImg.style.setProperty("--bottom", bottom + "px");
  hoveringClippedImg.style.setProperty("--left", left + "px");
  hoveringClippedImg.style.setProperty("--right", right + "px");

};

// Get mouse position relative to an element
// Source: //stackoverflow.com/a/42111623/4375327

function getMousePos(e) {
  // e = Mouse click event.
  var rect = e.currentTarget.getBoundingClientRect();
  var x = e.clientX - Math.round(rect.left);
  var y = e.clientY - Math.round(rect.top);
  return {
    x: x,
    y: y
  };
}
#clipper-div {
  border: 2px solid black;
  width: 200px;
  height: 200px;
}

#hovering-clipped {
  padding: 0;
  margin: 0;
  width: 200px;
  height: 200px;
  clip-path: inset(var(--top) var(--right) var(--bottom) var(--left));
  --top: 0px;
  --right: 0px;
  --bottom: 0px;
  --left: 0px;
  cursor: crosshair;
}
<div id='clipper-div'>
  <img id="hovering-clipped"
       src="//placehold.it/200x200/d0d8f8/000000" />
</div>


注意:我使用了 Clippy。这是一个方便的工具,可以设计您想要的剪贴内容。

感谢您抽出时间回答我的问题,但这不是我要找的。用户应该能够看到图像的某个特定部分,比如200x200,并且可以在其中移动。 - scriver
再次感谢。我得到的是一个占位图像,我想做的是让用户看到图片的中间部分,而不需要使用 Ps 或编辑应用程序进行裁剪。这是因为我希望用户能够四处移动并查看图片的其余部分。所有这些都在移动版本中,我忘了澄清。 - scriver
请查看此链接 https://stackoverflow.com/questions/58079617/how-to-clip-your-image-freely?noredirect=1#comment102553689_58079617 - scriver
@scriver,这是另一个话题,涉及到事件处理。您可以查看此SO答案:https://dev59.com/A6Hia4cB1Zd3GeqPXbAj#43937223。如果我的答案适用于关于剪辑的问题,请标记为已接受吗? - Amessihel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接