当前位置: 首页 > 知识库问答 >
问题:

一个页面上有多个图片库

汪德明
2023-03-14

我用缩略图创建了一个小图像库。每次我将鼠标悬停在给定的颜色上,主窗口中的图像就会变成具有这种颜色的图像(实际上,我希望彩色图像被替换为我放在那里的图像的不同颜色变化)。

我想做的是在我的页面上放不止一个这样的图库。问题是,如果我添加另一个库,所有内容都会重复。我希望避免为每个库创建css和jquery代码。有什么办法可以做到这一点吗?

此外,最初我希望大图像仅在单击彩色缩略图时显示,而不是悬停在上方,但当我使用click()而不是mouseover()时,图像会“闪烁”并消失。我做错了什么?

下面是我的代码:

CSS

.g-wrap {
    width: 250px;
    margin: 0;
    padding: 0;
}
.g-image {
    width: 250px;
    height: 159px;
    position: relative;
}
.g-image img {
    display: none;
    position: absolute;
    width: 250px;
    height: 159px;
    border: none;
}
.g-colors {
    margin: 0 auto;
}
.g-colors a {
    display: block;
    width: 24px;
    height: 24px;
    float: left;
}
.clearfix {
    float: none;
    clear: both;
}
/*Color palette*/
.purple {background-color: #7d278a;}
.beige {background-color: #b8b596;}
.gray {background-color: #5a5b5d;}
.blue {background-color: #5388d4;}

HTML

<div class="g-wrap">
<div class="g-image">
<a href=""><img src="http://imageshack.us/a/img89/4650/purplew.jpg" /></a>
<a href=""><img src="http://imageshack.us/a/img18/6574/beigekq.jpg" /></a>
<a href=""><img src="http://imageshack.us/a/img526/2198/grayw.jpg" /></a>
<a href=""><img src="http://imageshack.us/a/img849/6161/blueye.jpg" /></a>
</div>
<div class="g-colors">
<a href="" title="purple" class="purple"></a>
<a href="" title="beige" class="beige"></a>
<a href="" title="gray" class="gray"></a>
<a href="" title="blue" class="blue"></a>
</div>
<div class="clearfix"></div>
</div>

jQuery

$(document).ready(function(){
    var totalWidth = 0;
    $(".g-colors").children().each(function() {
    totalWidth = totalWidth + $(this).width();
    $(".g-colors").css('width',totalWidth);
});
    });
$(document).ready(function(){
    $(".g-image img").eq(0).css('display','block')
    $(".g-colors a").each(function(){
        $(this).mouseover(function(){
        var x = $(this).index();
        $(this).closest(".g-image img").hide();
        $(this).closest(".g-image img").eq(x).show();
        });
        });
    });

共有1个答案

陈正业
2023-03-14

首先,我认为你的JS代码中有一个错误。尝试将以下输出添加到控制台:

console.log($(this).closest(".g-image img").length);

$(this).closest(".g-image img").hide();
$(this).closest(".g-image img").eq(x).show();

对我来说,它打印0。这意味着jQuery元素集是空的。事实上,我认为你需要这样写(根据你的HTML结构):

var imgs = $(this).closest('.g-wrap').find('.g-image img');
imgs.hide();
imgs.eq(x).show();

其次,为了避免重复整个代码,你只需要写一些更聪明的代码:)例如,将你放在$(文档).准备(...);中的内容包装在一个单独的函数中。该函数应该接受一个DOM元素,并对其进行一些操作,以用库功能认可它,也就是说,该函数应该将一些事件处理程序附加到相应的“. g-颜色a”元素(与您在示例中已经做的完全相同)...然后,您可以将函数应用于每个库DOM元素,仅此而已。像这样的东西:

function makeGallery(gal)
{
   var totalWidth = 0;
   $(".g-colors > a", gal).each(function() {
      totalWidth = totalWidth + $(this).width();
      $(".g-colors").css('width', totalWidth);
   });


   $(".g-image img", gal).eq(0).css('display','block');

   $(gal).on('mouseover', '.g-colors > a', function() {
      var x = $(this).index();

      var imgs = $('.g-image img', gal);
      imgs.hide();
      imgs.eq(x).show();
   });
}

$(function () {
   makeGallery($('.g-wrap')[0]);
});
 类似资料:
  • 我是ExtJS新手。 我在同一页上有两个网格。第一个网格有3列。只有第二个。问题是,当渲染第二个网格时,它会覆盖第一个网格的属性。 例如,当我试图编辑第一个网格中的行时,它需要第二个网格中的行的宽度。

  • 问题内容: 我希望能够在一页上使用多个ng-app =“ {angular.module}”指令。我想这样做是为了使我的应用程序的模块更加模块化。我认为,如果我可以创建角度模块并将其中几个模块插入一个文档,则可以将这些模块轻松地插入其他项目。 我见过有人说您只能在页面上使用一个ng-app指令…是真的吗?说“每个视图一个ng-app指令”是否最准确? 我希望不是这样,或者如果情况是,仍然存在实现高

  • 我需要在一个页面上创建多个二维码。 我使用的图书馆 https://larsjung.de/jquery-qrcode/ 我用这样一个代码打印了多个,但二维码创造的价值是“无文本”。 它生成一个条形码与下面的代码,但不幸的是,我有麻烦创建多个条形码。 null null

  • 所以,我的问题是,我需要打印tableview的内容,但其中的项目太多,它只打印其中的前23个。我已经在这里找到了一些解决方案,不幸的是,它们没有多大帮助。 这是我的打印方法:

  • 我想要多个图像滑块在相同的页面与相同的类名使用JavaScript。我已经做了一个图像滑块。 问题是当我使用多个图像滑块时,它不能正常工作。我尝试了childNodes,但它也不能工作。我该如何解决这个问题呢? 并且我正在尝试使滑动动画也(左和右)的图像滑块。 如果你需要更多的解释,让我知道。 我给出了下面的代码; HTML CSS JavaScript

  • 嗨,我的wordpress网站有问题-我用这个css改变了页面的背景: . page-id-689#主{背景: url('http://www.gamekey.sk/wp-content/uploads/2015/09/thief-totalne.jpg')无重复中心!重要; -webkit背景尺寸:封面!重要的 -moz背景尺寸:封面!重要的 -o-背景-大小:封面!重要; } 问题是背景不会显