【问题标题】:jQuery replacing img src in three stepsjQuery三步替换img src
【发布时间】:2011-12-04 22:39:06
【问题描述】:

有点坚持这个。我正在为需要具有以下功能的 Shopify 商店构建产品图片库:

  1. 每个产品图片的缩略图
  2. 进入主图像“容器”的中型图像
  3. 点击中等尺寸图片时显示为灯箱的全尺寸图片

因此,您可以单击缩略图,将中等大小的图像加载到图像容器中,然后单击该中等大小的图像会将完整大小的图像显示为灯箱叠加层。

这是我的标记:

<div id="imgcontainer">
                <a href="assets/product-fullsize.jpg" class="overlay"><img src="assets/product-main.jpg" alt="product-main" width="360" height="231" /></a>
            </div> <!-- End div#imgcontainer -->
            <div id="thumbs">
                <div class="thumbnav">
                    <ul>
                        <li><a href="assets/medium-1.jpg"><img src="assets/thumb-1.jpg" alt="thumb-1" width="100" height="70" /></a></li>
                        <li><a href="assets/medium-2.jpg"><img src="assets/thumb-2.jpg" alt="thumb-2" width="100" height="70" /></a></li>
                        <li><a href="assets/medium-3.jpg"><img src="assets/thumb-3.jpg" alt="thumb-3" width="100" height="70" /></a></li>
                        <li><a href="assets/medium-1.jpg"><img src="assets/thumb-1.jpg" alt="thumb-1" width="100" height="70" /></a></li>
                        <li><a href="assets/medium-2.jpg"><img src="assets/thumb-2.jpg" alt="thumb-2" width="100" height="70" /></a></li>
                        <li><a href="assets/medium-3.jpg"><img src="assets/thumb-3.jpg" alt="thumb-3" width="100" height="70" /></a></li>
                    </ul>
                </div> <!-- End div#thumbnav -->
                <a href="javascript:void(0);" class="tbpr">&nbsp;</a>
                <a href="javascript:void(0);" class="tbnx">&nbsp;</a>
            </div> <!-- End div#thumbs -->
        </div> <!-- End div#main -->

谁能推荐最好的方法来做到这一点? Shopify 使用一种名为“Liquid”的语言,它允许我使用“foreach”语句来输出图像的标记,甚至只输出三种类型的图像 url(缩略图、中等和全尺寸)。

请注意,图像文件名和位置没有简单的命名约定,因为它们是动态生成的,所以我不能将文件名的“中等”部分换成“全尺寸”等。

感谢大家的指点,

奥苏

【问题讨论】:

  • 你怎么能指望任何人为没有正确名称的东西编写一个 JS 函数,只有“动态”随机生成的东西,必须有某种系统,否则它将如何找到任何给定产品的正确图像。不过,我敢肯定,仍然有人会给你一些一般性的想法。
  • @adenao,我假设他可以访问文件名,但它不仅仅是每个大小的预定义前缀/后缀..
  • 好吧,Osu 清楚地写道“文件名/位置没有简单的命名约定”以及描述大小的图像部分,即。 thumb/medium/fullsize 不能只是换掉。要么问题的形式非常糟糕,要么到目前为止的答案都是错误的。由于 Osu 还写道,实际上可以在 Shopify 中生成具有上述描述的图像文件名,所以我假设是前者,问题的格式不正确,并且答案是正确的。
  • adeneo,抱歉不够清楚 - 我想说的是 Shopify 使用的图片网址似乎没有共同的模式,所以我不认为我可以使用名称之类的东西,只需将“medium”之类的单词替换为“fullsize”即可更改容器中的主图像。我相信您会理解有时很难用语言表达这些事情。 @tvanfosson 和 Gaby,感谢您的回答。乍一看,它们看起来都是正确的,所以我要尝试一下,然后再回复你们。

标签: jquery gallery shopify


【解决方案1】:

您可以将完整大小的 url 作为数据属性存储在锚点上吗?例如,

<li><a href="assets/medium-1.jpg" data-fullsize="assets/fullsize-1.jpg">
       <img src="assets/thumb-1.jpg" alt="..." /></a></li>

然后你可以使用类似的东西:

$('a[data-fullsize]').click( function() {
     var $this = $(this);
     $('#imgcontainer a:first').attr('href',$this.data('fullsize'))
                               .find('img')
                               .attr('src',$this.attr('href'));
     return false;
});
$('#imgcontainer').on('click','a:first',function() {
     // load href into lightbox
     return false;
});

【讨论】:

  • 太棒了。这是一个梦想(.attr('src',$this.attr('href')); 上缺少一个括号,但除此之外,太棒了。谢谢!
  • 只是一个简单的问题,如果我想在单击缩略图时创建淡入和淡出过渡,你知道我会怎么做吗?我尝试在'.find('img')'之前链接fadeIn和fadeOut但它不是很令人满意,因为图像出现然后消失并淡入!谢谢
  • 您应该将回调中的其余部分链接到fadeOut。 .find('img').fadeOut( function() { $(this).attr('src', $this.attr('href')).fadeIn(); }) 你可能想选择一个比$this 更合适的名称来存储被点击的锚点,以避免在回调中混淆。
  • 又是一个很好的解决方案。我向您的知识低头,感谢您的帮助。
【解决方案2】:

我会将链接的路径添加为数据属性..

添加大图信息

<li><a href="assets/medium-1.jpg" data-zoomimage="assets/big-1.jpg"><img src="assets/thumb-1.jpg" alt="thumb-1" width="100" height="70" /></a></li>

处理点击jQuery v1.7

拇指优先 -> 中等

$('.thumbnav').on('click','a',function(e){
    e.preventDefault();
    var self = $(this);
    $('#imgcontainer a') // find the link 
        .attr('href',self.data('zoomimage') ) // and update its href to point to the zoom
        .find('img') // fint the image inside
        .attr('src', self.attr('href') ); // and load the medium
});

那么对于媒体 -> 缩放

$('#imgcontainer').on('click','a',function(e){
    e.preventDefault();
    var self = $(this);
    // use lightbox system to load the link's href.. self.attr('href')
});

【讨论】:

  • 也非常感谢您的回答 - 这两种方法似乎都有效,因此感谢您抽出宝贵时间回复
猜你喜欢
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 2011-11-19
相关资源
最近更新 更多