Photoswipe图像大小/比例

时间:2016-11-09 20:41:33

标签: laravel photoswipe

我使用的是Laravel网站,包括 Photoswipe 。 这就是我的问题:当我点击一张照片时,会弹出一个预定义的高度和宽度(在我的情况下为764X480)。我希望我的照片以原始比例打开,而不是预定义(因为我有一些全景照片)。有办法解决这个问题吗?是否可以设置另一个尺寸?您可以查看http://www.pixelkomando.com/paysages

上的行为

6 个答案:

答案 0 :(得分:2)

不幸的是,PhotoSwipe没有自动检测图像尺寸的选项。它不是错误或缺少功能。它的作者偏好,保持它小而干净的纯JavaScript代码。作者的建议在http://photoswipe.com/documentation/faq.html

你可以试试这个。 (来源:https://github.com/dimsemenov/PhotoSwipe/issues/796

var items = [ 
  { src: 'http://........', w:0, h:0 },
  { src: 'http://........', w:0, h:0 }
];

var gallery = new PhotoSwipe( ..... );
gallery.listen('gettingData', function(index, item) {
        if (item.w < 1 || item.h < 1) { // unknown size
        var img = new Image(); 
        img.onload = function() { // will get size after load
        item.w = this.width; // set image width
        item.h = this.height; // set image height
           gallery.invalidateCurrItems(); // reinit Items
           gallery.updateSize(true); // reinit Items
        }
    img.src = item.src; // let's download image
    }
});
gallery.init();

我个人尚未对其进行测试,但作者通过在代码下方发表评论来批准它。在“问题”选项卡下的github页面上,还有一些开发人员提供的其他解决方案。

此外,您还有其他几种选择

1。最肮脏的解决方案。对于一些图像来说这可能已经足够了,但如果您有大约10张图像,则需要花费太多时间等待初始化。

在页面上嵌入您的全尺寸图片。这样您就可以在窗口加载时访问图像尺寸,这样您就可以使用实际尺寸构建图像数组,然后使用init PhotoSwipe。

2. 您可以使用http://imagesloaded.desandro.com/之类的jQuery插件来检测图片是否已加载。您可以使用尺寸为100x100的小图像占位符在文档就绪时初始化PhotoSwipe。然后根据插件的过程,使用PhotoSwipe API更新加载的图像。

3. 最先进的解决方案。我上面提到的imagesLoaded插件使用了jquery的延迟对象。 http://api.jquery.com/category/deferred-object/我们随时欢迎您编写自己的插件。

答案 1 :(得分:2)

如Marko所说

.pswp img {
    max-width: none;
    object-fit: contain;
}

它运作良好,但是我将!important添加到object-fit属性中。

如果您不想使用占位符图像,请添加以下内容,因为它会在重新计算尺寸之前隐藏图像周围出现的黑/灰色框。

.pswp__img--placeholder--blank{
    display: none !important;
}

答案 2 :(得分:1)

感谢。我在JS中真的不够好。我找到了解决方案。

我替换了以下几行:

// create slide object
item = {
  src: linkEl.getAttribute('href'),
  w: parseInt(size[0], 10),
  h: parseInt(size[1], 10)
};

通过

// create slide object
item = {
  src: linkEl.getAttribute('href'),
  w: parseInt(size[0], 12),
  h: parseInt(size[1], 12)
};

但我不得不说我不知道​​ 10 12 的用途。

为了保持这个比例,我只发现了一个CSS技巧:

我在photoswipe.css中添加了一行代码:

.pswp img {
  max-width: none;
}

现在:

.pswp img {
  max-width: none;
  height: auto !important;
}

它似乎不是解决问题的最佳方法,但我得到了我需要的结果。

答案 3 :(得分:1)

只需在CSS中放入“对象适合:包含”:

.pswp img {
    max-width: none;
    object-fit: contain;
}

它将解决您的问题

答案 4 :(得分:0)

我遇到了同样的问题,试图在Cargo Collective网站中调整PhotoSwipe图像的大小。我将以下内容添加到自定义CSS中,并且效果很好:

.pswp img { 
object-fit: contain !important;
max-height: 400px !important;
max-width: auto !important;
margin-top: 100px;
margin-bottom: 100px;
 }

我还通过以下方式将背景更改为白色:

.pswp__bg {
    background-color: #fff !important;
}
.Pswp_bg image-zoom-background {
    background-color: #fff !important;
}

答案 5 :(得分:0)

使用 getimagesize php function 得到 widthheight 宽度在 index 0 上,高度在 index 1

如果您使用 spatie 存储图像,请使用 $image->url$image->getUrl() 获取路径

数据大小属性应如下所示,如果您的图像存储在 public_path 下或放置图像的完整路径,请使用 storage/app/public/ 以避免错误

data-size="{{getimagesize(public_path($img->url))[0]}}x{{getimagesize(public_path($img->url))[1]}}"