首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整大小以适应高度jquery.panzoom

调整大小以适应高度jquery.panzoom
EN

Stack Overflow用户
提问于 2014-09-23 20:17:39
回答 1查看 3.6K关注 0票数 3

当初始化jquery.panzoom时,我试图想出一个比浏览器窗口(2000x2800px)大得多的图像。我需要图像调整自身的大小,以便它将适合于容器的高度。

看看这个jsFiddle:http://jsbin.com/raxejirubayu/1/edit?html,css,js,output

有谁有用过变焦的经验可以帮我吗?虚拟啤酒和击掌作为回报。

EN

回答 1

Stack Overflow用户

发布于 2014-11-28 18:12:52

我通过编写这个javascript代码解决了这个问题,它基本上根据图像大小和容器大小计算缩放和pan参数,并应用转换,从而将图像拉伸到容器边界。

Javascript文件

代码语言:javascript
复制
$(document).ready(function(){
    $panzoom = $(".cimage").panzoom();

    //Wait for the image to load
    $('.cimage').load(function(){
        //Get container and image
        var image = $('.cimage');
        var container = $('.image-container');

        //Get container dimensions
        var container_height = container.height();
        var container_width = container.width();

        //Get image dimensions
        var image_height = image.height();
        var image_width = image.width();

        //Calculate the center of image since origin is at x:50% y:50%
        var image_center_left = image_width / 2.0;
        var image_center_top = image_height / 2.0;

        //Calculate scaling factor
        var zoom_factor;

        //Check to determine whether to stretch along width or heigh
        if(image_height > image_width)
            zoom_factor = container_height / image_height;
        else
            zoom_factor = container_width / image_width;

        //Zoom by zoom_factor
        $panzoom.panzoom("zoom", zoom_factor, {animate: false});

        //Calculate new image dimensions after zoom
        image_width = image_width * zoom_factor;
        image_height = image_height * zoom_factor;

        //Calculate offset of the image after zoom
        var image_offset_left = image_center_left - (image_width / 2.0);
        var image_offset_top = image_center_top - (image_height / 2.0);

        //Calculate desired offset for image
        var new_offset_left = (container_width - image_width) / 2.0;
        var new_offset_top = (container_height - image_height) / 2.0;

        //Pan to set desired offset for image
        var pan_left = new_offset_left - image_offset_left;
        var pan_top = new_offset_top - image_offset_top;
        $panzoom.panzoom("pan", pan_left, pan_top);

    });
});

HTML文件

代码语言:javascript
复制
<div class="image-container">
    <img class='cimage' src="abc.jpg'/>
</div>

它是沿着宽度或高度拉伸,这取决于图像的方向(肖像或景观),但如果你只想沿着高度伸展,那么你需要替换。

代码语言:javascript
复制
if(image_height > image_width)
    zoom_factor = container_height / image_height;
else
    zoom_factor = container_width / image_width;

使用

代码语言:javascript
复制
zoom_factor = container_height / image_height;

但我建议不要这样做,因为它不能处理景观图像。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26004008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档