【问题标题】:Change images using Jquery (Circular motion)使用 Jquery 更改图像(圆周运动)
【发布时间】:2012-11-13 20:50:08
【问题描述】:

大家好,

我有一个这样的 DOM

<div class="Gallery">
  <div class="GaleryLeftPanel">
     <img id="img1" src="/Content/Public/images/1.png" style="z-index: 100" width="141"
                            height="140" alt="image 1" /></div>
   <div class="GalleryMiddlePanel">
      <img id="img2" src="/Content/Public/images/3.png" style="z-index: 99" width="715"
                            height="497" alt="image 2" /></div>
   <div class="GaleryRightPanel">
      <img id="img3" src="/Content/Public/images/2.png" style="z-index: 98" width="140"
                            height="140" alt="image 2" /></div>
 </div>

我需要的是,如果我点击img1img2被替换为img1img3被替换为img2img1 替换为 img3(圆周运动 1->2、2->3、3->1)。它是连续的......如果我点击 img3 然后它是相反的 (1

为此,我使用 JQuery 如下:

$('img#img1').click(function () {
        var currentScr = $(this).attr('src');
        var second = $('img#img2').attr('src');
        var third = $('img#img3').attr('src');

        $('img#img3').attr('src', second);
        $('img#img2').attr('src', currentScr);
        $('img#img1').attr('src', third);
    });

    $('img#img3').click(function () {
        var third = $(this).attr('src');
        var first = $('img#img1').attr('src');
        var second = $('img#img2').attr('src');

        $('img#img2').attr('src', third);
        $('img#img3').attr('src', first);
        $('img#img1').attr('src', second);
    });

一切正常。现在,我需要的是,始终将第二张图片替换为大图片而不是原始图片......例如:

点击 img1 (1->2L, 2->3, 3->1)。这里 2L 是 img1 的大图。和 点击 img3 (1

如何做到这一点?请帮帮我

【问题讨论】:

  • 你不能只调用 2L 图像吗?它的大小不会改变任何逻辑,特别是如果它需要双向。
  • 你能做个小提琴吗?
  • @jonBreizh 是的,我试过了。问题是,如果我第二次点击 img1,img2 的 src 将被设置为 img3 的 src,因此,img3 src 将获得更大的图像而不是原始图像
  • @AatishMolasi jsfiddle.net/6HHkT
  • 你能解释一下你想在视觉上实现什么吗?我的猜测是你缺少一个功能

标签: jquery click image src attr


【解决方案1】:

您可以为每张图片设置较大的图片,例如 1L.png, 2L.png, 3L.png,并按如下方式更改您的脚本:

$('img#img1').click(function () {
        var currentScr = $(this).attr('src');
        var second = $('img#img2').attr('src');
        var third = $('img#img3').attr('src');

        $('img#img3').attr('src', second.replace('1L', '1').replace('2L', '2').replace('3L', '3'));
        $('img#img2').attr('src', currentScr.replace('1', '1L').replace('2', '2L').replace('3', '3L'));
        $('img#img1').attr('src', third);
    });

    $('img#img3').click(function () {
        var third = $(this).attr('src');
        var first = $('img#img1').attr('src');
        var second = $('img#img2').attr('src');

        $('img#img2').attr('src', third.replace('1', '1L').replace('2', '2L').replace('3', '3L'));
        $('img#img3').attr('src', first);
        $('img#img1').attr('src', second.replace('1L', '1').replace('2L', '2').replace('3L', '3'));
    });

【讨论】:

    【解决方案2】:

    您需要在这里使用双端队列数据结构,这样您就可以遍历图像。

    这里是a working demo - 如果你给我大图的 URL,我可以按照你的描述让它工作。

    这是代码:

    var imgs = new Array();
    imgs[0] = 'http://farm7.staticflickr.com/6198/6145108610_a5d456dae4_t.jpg';
    imgs[1] = 'http://farm3.staticflickr.com/2564/4064894944_34b0460fc2_t.jpg';
    imgs[2] = 'http://farm1.staticflickr.com/178/460793430_1c0a085849_t.jpg';
    
    $('#img1').click(function () {
            $('#img1').attr('src', imgs[2]);
            $('#img2').attr('src', imgs[0]); // - Do something here to use a larger version of the image
            $('#img3').attr('src', imgs[1]);
            imgs.unshift(imgs.pop());
        });
    
        $('#img3').click(function () {
            $('#img1').attr('src', imgs[1]);
            $('#img2').attr('src', imgs[2]); // - Do something here to use a larger version of the image
            $('#img3').attr('src', imgs[0]);
            imgs.push(imgs.shift());
    });
    

    还有一个稍微重构的版本here

    编辑:

    这里是a version with big images.

    var imgs = new Array();
    imgs[0] = {small: 'http://farm7.staticflickr.com/6198/6145108610_a5d456dae4_t.jpg',
               big: 'http://farm7.staticflickr.com/6198/6145108610_a5d456dae4_b.jpg'};
    imgs[1] = {small: 'http://farm3.staticflickr.com/2564/4064894944_34b0460fc2_t.jpg',
               big: 'http://farm3.staticflickr.com/2564/4064894944_34b0460fc2_b.jpg'};
    imgs[2] = {small: 'http://farm9.staticflickr.com/8201/8219867682_7c9aea748f_t.jpg',
               big: 'http://farm9.staticflickr.com/8201/8219867682_7c9aea748f_b.jpg'};
    
    var $img1 = $('#img1');
    var $img2 = $('#img2');
    var $img3 = $('#img3');
    
    $img1.click(function () {
        $img1.attr('src', imgs[2].small);
        $img2.attr('src', imgs[0].big);
        $img3.attr('src', imgs[1].small);
        imgs.unshift(imgs.pop());
    });
    
    $img3.click(function () {
        $img1.attr('src', imgs[1].small);
        $img2.attr('src', imgs[2].big);
        $img3.attr('src', imgs[0].small);
        imgs.push(imgs.shift());
    });
    

    【讨论】:

      【解决方案3】:

      我相信您正在尝试使用高分辨率的中间图片画廊。

      我检查了你拍照的flickr,规则似乎是:

      所以它们仅在 _t / _b 上有所不同。

      为了实现它,我像这样更新了你的 js 部分:

      $(document).ready(function() {
          var second = $('img#img2').attr('src');
          $('img#img2').attr('src', swap(second));   
      });
      
      function swap(img) {   
          if (img.indexOf("_b.") !== -1) {
          return img.replace("_b.", "_t.");
          } else {
          return img.replace("_t.", "_b.");
          }    
      }
      
      $('img#img1').click(function () {
          var currentScr = $(this).attr('src');
          var second = $('img#img2').attr('src');
          var third = $('img#img3').attr('src');
      
          $('img#img3').attr('src', swap(second));
          $('img#img2').attr('src', swap(currentScr));
          $('img#img1').attr('src', third);
          });
      
          $('img#img3').click(function () {
          var third = $(this).attr('src');
          var first = $('img#img1').attr('src');
          var second = $('img#img2').attr('src');
      
          $('img#img2').attr('src', swap(third));
          $('img#img3').attr('src', first);
          $('img#img1').attr('src', swap(second));
      });
      

      此外(为了查看分辨率变化,我将图片放大了一点):140/141 -> 300

      jsfille链接:http://jsfiddle.net/dx3DY/

      唯一的问题似乎是其中一张示例图片似乎不是高分辨率的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-31
        • 2015-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        相关资源
        最近更新 更多