使用jQuery再现谷歌图像查看器

Reproducing Google image viewer with jQuery

本文关键字:图像 谷歌 jQuery 使用      更新时间:2023-09-26

我正在尝试在我的项目中模拟谷歌图像预览。我想我差不多到了,但有几件事我很难实现。

因此,图像查看器应该执行以下操作:

  1. 单击缩略图将在右侧打开预览面板在下面,关闭另一行的另一个预览面板。关闭其他面板和打开当前面板需要幻灯片转换。

  2. 单击相同的缩略图将关闭预览面板。

  3. 单击"X"也将关闭预览面板。

  4. 打开同一行的另一个缩略图不会执行任何打开/关闭操作,只会交换内容。

到目前为止,我的成就是:

  1. 正在部分工作,因为它只会为第一个预览面板,不会使用幻灯片切换打开/关闭不再我不确定其他小组是如何结束的——我还没有任何实现
  2. 我无法在所有其他条件下一起工作。我试着使用触发缩略图的id,并将该id分配给预览面板,然后如果它们匹配,关闭预览面板,但它会同时打开/关闭,这不是我想要的点击切换
  3. 工作正常
  4. 工作正常,尽管我不能100%确定我使用oldIndex的方法

这是JS Fiddle,供您使用,包含以下脚本。

$.videoWatch = function(element) {
  this.$element = $(element);
  this.init();
};
var oldIndex = -1;
$.videoWatch.prototype = {
  init: function() {
    this.$openLinks = this.$element.find(".open");
    this.$closeLinks = this.$element.find(".close");
    this.open();
    this.close();
  },
  _getContent: function(element) {
    var $parent = element.parent(),
      title = $parent.data('title');
    return {
      title: title
    }
  },
  open: function() {
    var self = this;
    self.$openLinks.on("click", function(e) {
      e.preventDefault();
      var $a = $(this),
        content = self._getContent($a),
        $li = $a.parents("li"),
        $title = $(".title");
      $title.text(content.title);
      $li.append($(".preview"));
      var $preview = $li.find(".preview");
      if (!($li.index() == oldIndex)) {
        $preview.slideDown('fast');
        oldIndex = $li.index();
      }
    });
  },
  close: function() {
    this.$closeLinks.on("click", function(e) {
      e.preventDefault();
      $(this).parent().slideUp('fast');
            oldIndex = -1;
    });
  }
};
$(function() {
  var watch = new $.videoWatch("ul");
});

很好的演示,但我不确定你的问题是什么。正如你所说的,你对如何完成#1和#2 的期望是不清楚的

请看https://jsfiddle.net/mouseoctopus/7ryfLu68/用于工作演示

为了完成#1,在显示之前重新隐藏第一个预览

 if (!($li.index() == oldIndex)) {
     $preview.hide(); // add this line
     $preview.slideDown('fast');

为了完成#2,不确定如何在没有hax的情况下进行,必须存储图形id,并在单击同一图形时隐藏,然后在id不同时重新显示

  else{
    var figureId = $a.parent()[0].id; 
    if  ( oldFigureId == figureId ){
      $preview.slideUp('fast');
      oldFigureId = -1;
    }else{
      $preview.slideDown('fast');
      oldFigureId = figureId;
    }
  }

我也不确定有oldIndex、oldFigureId等的hax,它不干净。

1-您的附加和滑动代码:

if (!($li.index() == oldIndex)) {
    $(".preview").slideUp('fast', function(){
        $li.append($(".preview"));
      var $preview = $li.find(".preview");
      $preview.slideDown('fast');
      oldIndex = $li.index();
    });
} else {
    $li.append($(".preview"));   
}

2-你可以存储当前的拇指id,并在做任何事情之前检查它是否打开,如果是,关闭它

if (curID == $(this).parent().attr("id")) {
    $(".preview").slideUp('fast');
    oldIndex = -1;
    curID = "";
    return false;
} else {
    curID = $(this).parent().attr("id");
}

更新的FIDDLE