【问题标题】:jQuery changing an image on hover, then maintain image on clickjQuery在悬停时更改图像,然后在单击时保持图像
【发布时间】:2011-09-12 10:26:38
【问题描述】:

我对 jQuery 和图像有点问题。

我正在尝试创建一个简单的系统,其中图像在悬停时发生变化(我已经成功地使用 jQuery .hover())但是我现在正在尝试设置它,所以如果用户点击图像,源永久更改为悬停图像。

我遇到的问题是,当我单击时,源会发生变化,但是当我将鼠标悬停在其上时,它会变回“关闭”图像!这么简单的问题,却找不到解决办法。

悬停代码:

$("#image").hover(function () {
            $(this).attr("src", getImageSourceOn("image"));
        }, function () {
            $(this).attr("src", getImageSourceOff("image"));
});

getImageSourceOn / Off 函数只是根据带有新源的参数返回一个字符串。

onClick 代码:

var imageSource = $(imageID).attr("src");
  var onOff = imageSource.substring((imageSource.length - 5), (imageSource.length - 4));
  if (onOff == "F")
  {
    //alert("Off\nstrID = " + strID);
    $(imageID).attr("src", getImageSourceOn(strID));
  }
  else
  {
    //alert("On");
    $(imageID).attr("src", getImageSourceOff(strID));
  }

此代码仅获取源并在源中查找 On / Off 以将相反的内容放置为图像。我尝试使用 .toggle() 而不是这个子字符串方法,但我无法让它工作。

【问题讨论】:

  • 我建议使用 Background-Image css 属性并只更改 Background-Image-Position 因为更改 src 属性在图像下载之前不会显示,因此第一次悬停时它会不显示更改。

标签: javascript jquery image hover


【解决方案1】:

声明一个全局变量。在click事件上附加一个函数:

var clicked = false;

$("#image").click(function(){
  if(!clicked)
    clicked = true;
  else
    $(this).attr("src", getImageSourceOff("image"));
});

然后修改你hover代码

  $("#image").hover(function () {
      $(this).attr("src", getImageSourceOn("image"));
  }, function () {
     if(!clicked)
       $(this).attr("src", getImageSourceOff("image"));
  });

【讨论】:

  • 非常感谢罗兰多。使用此系统,单击时图像保持不变。但是,我希望在再次单击时返回图像。
  • 谢谢罗兰多。我如何调整代码以使其可重用?目前它可以一键打开和关闭,但不能再点击。
  • 已排序,我添加了 'clicked = false;'到图片点击函数else语句。
  • 如果你想支持多个图像,你可能想简单地为点击的图像添加一个类。类似于:$(this).addClass("clicked") 代替 clicked = true 然后使用 if(!$(this).hasClass("clicked")) 代替 if(!clicked)
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
相关资源
最近更新 更多