【问题标题】:Change Image Source AND Add File Name Suffix更改图像源并添加文件名后缀
【发布时间】:2012-10-19 01:49:39
【问题描述】:

如何为“-hover”图像指定确切的文件路径目录(翻转效果)?目前,这仅适用于位于子目录中的图像。

$(function(){
  $('.box-img').append('<span></span>').hover(
    function(){
      $(this).find('img').stop().animate({opacity:0})
    }, function(){
      $(this).find('img').stop().animate({opacity:1})
    }
  ).each(function(){
    var src=new Array()
    src=$(this).find('img').attr('src').split('.')
    src=src[0]+'-hover.'+src[1]
    $(this).find('>span').css({background:'url('+src+')'})
  });
})

【问题讨论】:

  • 嗯,应该适用于每个不包含点的目录。你尝试过哪些路径?
  • 为了避免这一切,你应该阅读 CSS Sprites:css-tricks.com/css-sprites
  • 您能否明确显示未悬停图像的src 以及悬停图像时您希望src 变成什么?此外,发布live demo for us to work with 也会有所帮助。

标签: javascript image url src


【解决方案1】:

我喜欢使用带有the background-position css 属性的精灵,但你可以试试这个,使用RegExp

$(document).ready(function(){
   // Change the image of hoverable images
   $(".imgHoverable").hover( function() {
       var hoverImg = HoverImgOf($(this).attr("src"));
       $(this).attr("src", hoverImg);
     }, function() {
       var normalImg = NormalImgOf($(this).attr("src"));
       $(this).attr("src", normalImg);
     }
   );
});

function HoverImgOf(filename)
{
   var re = new RegExp("(.+)\\.(gif|png|jpg)", "g");
   return filename.replace(re, "$1-hover.$2");
}
function NormalImgOf(filename)
{
   var re = new RegExp("(.+)-hover\\.(gif|png|jpg)", "g");
   return filename.replace(re, "$1.$2");
}

【讨论】:

    【解决方案2】:

    您可以使用来自jquery.utilsbasename 从您的src 中提取基本名称。然后用“.”分割 basename,添加“-hover”,并重建路径。所以你不必担心诸如“../../css/images/image.png”之类的名称。

    或者你可以用“/”分割,然后检索数组的最后一个元素作为基本名称,那个你用“.”分割。

    var src=new Array()
    // path/to/filename.jpg
    src=$(this).find('img').attr('src').split('/')
    
    var bname = src.pop()   // bname is now filename.jpg, src is { path to }
    var bco=new Array()     
    bco = bname.split('.')  // bco is now { filename jpg }
    ext = bco.pop()         // ext is jpg, bco is { filename }
    nam = bco.pop()         // nam is filename, bco is { }
    
    bco.push(nam + '-hover') // bco is { filename-hover }
    bco.push(ext)            // bco is { filename-hover jpg }
    
    bname = bco.join('.')   // bname is now filename-hover.jpg
    
    src.push(bname)
    
    srcString = src.join('/')
    

    您还必须关心如何在基本名称中使用点命名文件(例如“ubuntu-12.02.jpg”),以及如何重新组装拆分数组。

    【讨论】:

    • 你可以用bco.push('-hover')代替nam = bco.pop(); bco.push(nam + '-hover')
    • 是的,当然。我也可以完全避免bname。但我想展示各个步骤,也是因为我不(现在仍然不)完全确定 OP 的问题。这样,即使总体答案不准确,他也可能会找到有用的东西。
    猜你喜欢
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 2011-04-11
    • 2018-11-10
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多