【问题标题】:Mix PHP and Javascript in Laravel在 Laravel 中混合 PHP 和 Javascript
【发布时间】:2017-10-26 15:33:19
【问题描述】:

我在我的项目中使用 PhotoSwipe 以一种很酷的渐进方式显示照片。

我想遍历排列和图像之间的关系。 我可以用 console.log() 打印出图像的数量。它有效。

1 个问题: 我想动态获取图像数量并在items: 中显示它们如何?

2 问题:如何动态检索照片的尺寸,例如宽度和高度?我假设可能有一些方法,如getOriginalHight() 之后我想将值分配给w:h:

function showImages() {
    let pswpElement = document.querySelectorAll('.pswp')[0];

    // build items array
    for (i = 0; i < "{{count($arrangement->images)}}"; i++) {
        console.log(i);
    }
    let items = [
        {
            src: '/storage/arrangement_images/{{$arrangement->images[1]->file_name}}',
            w: 500,
            h: 281
        },
        {
            src: 'https://placekitten.com/1200/900',
            w: 1200,
            h: 900
        }
    ];

    // define options (if needed)
    let options = {
        // optionName: 'option value'
        // for example:
        index: 0 // start at first slide
    };

    // Initializes and opens PhotoSwipe
    let gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);
    gallery.init();
}

【问题讨论】:

  • 我会发出一个 ajax 获取请求,以在问题 1 的 javascript 数组中获取 arrangement-&gt;images。对于问题 2,我可以从文档中看到您可能需要 size = linkEl.getAttribute('data-size').split('x');
  • 感谢您的回答。我会试一试,虽然我不确定我是否能成功。 :)
  • 当然可以,但是如果您以前从未使用过此类概念,则可能需要一些时间。
  • 不要把这样的问题组合在一起,试着做单独的问题。

标签: javascript php laravel photoswipe


【解决方案1】:

回答问题 1:

使用 JQuery 来执行此操作。假设您的 .php 文档中有多个图像,请使用 JQuery 的 $.each() 函数循环图像并构建 items 数组。所以它看起来像这样:

var items = [],
    $img = $('.pswp');

$img.each(function() {
  var $this = $(this),
      imageSize = [1280, 980],
      obj = {
        src: $this.attr('src'),
        w: imageSize[0],
        h: imageSize[1]
      };

  items.push(obj);
});

在这里,我使用imageSize var 设置了JS 中每个图像项的宽度/高度,但是如果您在模板中定义它们,也可以使用图像的width=""height="" 属性。

这有帮助吗?

【讨论】:

  • 谢谢@Seb,不幸的是,它没有用。我无法从数据库中获取 obj 的 src。
  • @Mike,对不起,我假设您使用 php 从数据库中获取图像。我能问一下您为什么要动态执行此操作吗?
  • 我将宽度和高度存储到数据库中。现在,当我在 Ajax 请求中获取对象时,我没有得到它们是有原因的。
  • 这就是我在控制器中获取它们的方式$view = View::make('arrangements.show', compact('arrangement'))-&gt;render(); return response()-&gt;json(array($arrangement-&gt;images()-&gt;get()-&gt;all(), 200, $view));
  • 你能给我看一个你正在使用的 html 的例子吗?除非有特殊原因要动态创建幻灯片,否则我建议使用 php 获取所有图像文件路径并将它们存储在图像元素的数据属性中。然后使用我上面建议的代码以及 photowipes 延迟加载选项构建幻灯片?