【问题标题】:zoom out an image keep viewing center in center缩小图像保持在中心查看中心
【发布时间】:2018-01-13 02:46:49
【问题描述】:

我被指派让图像放大和缩小 javascript 应用程序, 但是对于可拖动的图像以及放大和缩小时,我必须将容器的查看中心保持在中心。 我已经完成了所有计算的部分放大,并保持了左上角的比例。 使用这个 http://jsfiddle.net/phHqQ/

$("#zoom").on("click", function (e) {
  var container = $("#container");
  var image = $("#container img");

  var css = {};
  css.height = image.height() + (image.height() * 0.2);
  css.width = image.width() + (image.width() * 0.2);

  var x = Math.abs(image.position().left) + container.width() / 2;
  var y = Math.abs(image.position().top) + container.height() / 2;
  var ratio = css.width / image.width();

  var newX = x * ratio;
  var newY = y * ratio;

  css.left = image.position().left - (newX - x);
  css.top = image.position().top - (newY - y);

  image.css(css);
});

请任何人都可以从中指导/制作缩小功能

【问题讨论】:

标签: javascript jquery algorithm


【解决方案1】:

您可以从放大功能开始,然后从减小图像的高宽开始。因此,您现在将从它们中减去,而不是增加高度和宽度。

css.height = image.height() - (image.height() * 0.2);
css.width = image.width() - (image.width() * 0.2);

执行此操作后,缩小功能将开始起作用,但很快您就会意识到,一旦您的尺寸小于原始尺寸,图像就会开始出现左上边距。为防止这种情况,您需要检查lefttop 值在缩小期间是否变为正数。如果是这样,您可以将它们设置为0,这样图像无论如何都会移动到左上角。

css.left = css.left > 0 ? 0 : css.left;
css.top = css.top > 0 ? 0 : css.top;

随着您的继续,您会发现更多此类问题,并且您将不得不处理更多场景以防止利润增长。

这是一个小提琴:http://jsfiddle.net/phHqQ/261/

更新 1

在放大时,基于容器的中心,图像的某些部分可能会超出容器,并且可能会在容器的右下角产生一些边距。您可以在放大功能中添加这些验证,以确保尽可能在放大时将图像保留在容器内。

if(css.height + css.top < 200){
  css.top = 200 - css.height;
}

if(css.width + css.left < 300) {
  css.left = 300 - css.width; 
}

这是使用此代码更新的小提琴:http://jsfiddle.net/phHqQ/262/

【讨论】:

  • 但是在缩小时它不会保持左侧和顶部的比例,它只会在变为正数时保持全 0 .edit - 我现在看到更新
  • 感谢修正放大,但我仍然坚持缩小
  • 是的,我注意到了。这是一个偏好问题。我倾向于更喜欢容器中始终存在图像的某些部分。
  • 但是我怎样才能让它像 zoomin 一样,保持中心在中心
  • 在这个fiddle 中,我删除了答案中代码的第二部分和第三部分,并且图像大多停留在中心。但是在它变得非常小之后,它开始转向右下角。让我看看能不能找出原因。
猜你喜欢
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 2017-07-31
  • 1970-01-01
  • 2012-03-01
相关资源
最近更新 更多