javascript - 使用不带变换的宽度和高度在光标位置放大/缩小

标签 javascript jquery

我正在尝试像此处一样应用 Google map 的放大/缩小 - https://www.google.com/maps/@36.241201,-98.1261798,5.13z?hl=en 我无法让它正常工作。

我一直在寻找解决方案。但它们都是基于 CSS Tansform 的,我无法使用。

var $image = $('#image');
var container_height = $('#container').height();
var container_width = $('#container').width();

$image.width(container_width);

$('#container').on('click', function(e){
  var zoom = 100;
  e.preventDefault();
  var this_offset = $(this).offset(); 
  var click_x = e.pageX - this_offset.left;
  var click_y = e.pageY - this_offset.top;

  var image_height = $image.height();
  var image_width = $image.width();

  $image.css({
    'width' : image_width + zoom,
    'height' : image_height + zoom,
    'top': -click_y,
    'left': -click_x,
  });
});
.container{
  margin: 15px auto;
  position:relative;
  width:400px;
  height: 300px;
  border: 2px solid #fff;
  overflow:hidden;
  box-shadow: 0 0 5px rgba(0,0,0,0.5);
}

.image{
  position:absolute;
  transition:all 0.25s ease-in-out;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container" id="container">
  <img src="https://i.imgur.com/sEUlGOw.jpg" id="image" class="image" />
</div>

请帮助。 谢谢

最佳答案

首先,请将缩放用作倍增因子。因此,对于 200% 缩放,将值设置为 2。要缩小到一半大小,请将值设置为 0.5

我没有使用 pageXpageY,而是使用了 offsetXoffsetY找到被点击的像素的 x, y 坐标。 (请注意兼容性)。

为了在容器中找到图像的左侧和顶部,我使用了 offsetLeftoffsetTop .

(function () {
    var $image = $('#image');

    var container_width = $('#container').width();

    $image.width(container_width);

    $image.on('click', function(e){
        var zoom = 1.3; // zoom by multiplying a factor for equal width n height proportions
        e.preventDefault();
        var click_pixel_x = e.offsetX,
            click_pixel_y = e.offsetY;

        var image_width = $image.width(),
            image_height = $image.height();

        var current_img_left = this.offsetLeft,
            current_img_top = this.offsetTop;

        var new_img_width = image_width * zoom,
            //new_img_height = image_height * zoom,
            img_left = current_img_left + click_pixel_x - (click_pixel_x * zoom),
            img_top = current_img_top + click_pixel_y - (click_pixel_y * zoom);

        $image.css({
            'width' : new_img_width,
            //'height' : new_img_height,
            'left': img_left,
            'top': img_top
        });
    });
})(jQuery);
.container{
        margin: 15px auto;
        position:relative;
        width:400px;
        height: 300px;
        border: 2px solid #fff;
        overflow:hidden;
        box-shadow: 0 0 5px rgba(0,0,0,0.5);
    }

.image{
    position:absolute;
    left: 0,
    top: 0,
    transition:all 0.25s ease-in-out;
}
<div class="container" id="container">
<img src="https://i.imgur.com/sEUlGOw.jpg" id="image" class="image" />
</div>

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

关于javascript - 使用不带变换的宽度和高度在光标位置放大/缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47474244/

相关文章:

javascript - 需要 RegEx for URI 模板 (RFC 6570)

javascript - 从嵌套集模型 javascript 创建 JSON

javascript - JSHint 错误 Don't make functions within a loop

jquery - 禁止元素被选中 - Jquery 和 CSS

javascript - JavaScript 中不需要的事件监听器的垃圾收集

javascript - Angular 6如何在表单中制作所有输入的不可编辑元素

javascript - 如何为 Javascript 对象中的属性设置值,该属性由键数组标识

ajax - jQuery AJAX JSON 数据类型转换

javascript - AngularJS - 如何对操作 HTML 的指令进行单元测试?

javascript - 由于位置绝对,无法更改背景大小