2

我正在使用 Lightbox 2,因为它几乎满足了我的每一个要求,并且似乎是我遇到的最新更新的、低调的、高质量的“灯箱”jQuery 插件。我唯一遇到的问题是两个图像(关闭和加载)被硬编码到 .js 文件中,并且没有将参数传递到脚本中以覆盖它的示例。我对 JS 不够好,无法使用作为源代码的文档。

(function() {
  var $, Lightbox, LightboxOptions;
  $ = jQuery;
  LightboxOptions = (function() {
    function LightboxOptions() {
      this.fileLoadingImage = 'images/loading.gif';
      this.fileCloseImage = 'images/close.png';
      this.resizeDuration = 700;
      this.fadeDuration = 500;
      this.labelImage = "Image";
      this.labelOf = "of";
    }
    return LightboxOptions;
  })();

  Lightbox = (function() {
    function Lightbox(options) {
      this.options = options;
      this.album = [];
      this.currentImageIndex = void 0;
      this.init();
    }
    [...]
  })();

  $(function() {
    var lightbox, options;
    options = new LightboxOptions;
    return lightbox = new Lightbox(options);
  });
}).call(this);

如果我没有包含足够的代码,可以在 GitHub 上看到整个文件。在包含的部分中,this.fileLoadingImagethis.fileCloseImage给出了相对于执行它的 HTML 文件的路径。例如,http://mywebsite.com/。但是,我的 CSS、JS、图像等都是从http://static[number].mywebsitestatic.com/. 与其将我的一个可用静态 URL 硬编码到 .js 文件中,我更愿意使它成为一个更可重用的解决方案,这样如果这个可用的子域或父域发生变化,我就不必更新这个文件也是如此。

该站点是一个 Django 应用程序,因此在模板代码中,我可以简单地使用{{ STATIC_URL }}为给定页面写出正确的静态文件 URL 并将其传递到 .js 文件中。但是怎么做?例如,我希望能够执行以下操作(同时避免使用全局变量):

<script>
    /* instantiate a new version of Lightbox */
    newLightbox.fileLoadingImage = "{{ STATIC_URL }}img/lightbox/loading.gif";
    newLightbox.fileCloseImage = "{{ STATIC_URL }}img/lightbox/close.gif";
</script>
4

3 回答 3

7

这是一个允许 lightbox.js 脚本确定其 URL 的小调整;然后是依赖图像的 URL。

原始代码

this.fileLoadingImage = 'images/loading.gif';
this.fileCloseImage = 'images/close.png';

修订代码

this.fileLoadingImage = $('script[src$="/lightbox.js"]')
    .attr('src')
    .replace(/\/lightbox\.js$/, '/../images/loading.gif');
this.fileCloseImage = $('script[src$="/lightbox.js"]')
    .attr('src')
    .replace(/\/lightbox\.js$/, '/../images/close.png');

该脚本通过检查属性以结尾的所有<script>标签(希望您只有一个这样的脚本标签)来工作。从这一点开始,很容易计算图像的路径。演示在这里。请注意,演示使用一些技巧来处理 jsFiddle。src/lightbox.js

于 2012-04-24T06:27:25.063 回答
1

您可以使用全局 js 变量:

<script>
    var imagePath = '{{ STATIC_URL }}img/';
</script>
<script src="js/lightbox.js"></script>

然后,修改 lightbox.js:

this.fileLoadingImage = imagePath + 'images/loading.gif';
this.fileCloseImage = imagePath + 'images/close.png';
于 2012-04-24T06:21:47.027 回答
0

这就是我选择jQuery lightBox 插件的原因,它可以随心所欲地初始化。例子:

$("a[rel|=lightbox]").lightBox
  imageLoading: '/assets/lightbox-ico-loading.gif'
  imageBtnPrev: '/assets/lightbox-btn-prev.gif'
  imageBtnNext: '/assets/lightbox-btn-next.gif'
  imageBtnClose: '/assets/lightbox-btn-close.gif'
  imageBlank: '/assets/lightbox-blank.gif'

(我正在使用 Coffeescript)。

于 2012-07-02T16:27:48.420 回答