【问题标题】:Change Image on Hover using jQuery and an Image Map使用 jQuery 和图像映射在悬停时更改图像
【发布时间】:2012-08-12 19:05:31
【问题描述】:

我有一张正在使用图像映射的图像。根据地图将鼠标悬停在图像的一部分上时,我希望图像发生变化,但我不确定如何使用 jQuery 进行此操作。这是我尝试过的代码:

HTML:

 <div class="img-center">
  <img src="img-src_off.jpg" usemap="#Map" class="feature-image" border="0" />
    <map name="Map" id="Map">
      <area shape="rect" coords="77,461,391,492" href="#" target="_blank"
            class="link-1" />
      <area shape="rect" coords="557,461,855,490" href="#" target="_blank" 
            class="link2" />
    </map>
 </div>

JS:

注意:这是我尝试过的 JS,但抛出了错误(下面列出了错误),我现在不知道该尝试什么。如果我能找到可以正常工作的代码,我就不必使用此代码。

var $j = jQuery.noConflict();
  $j(document).ready(function() {
     $j.preLoadImages("img_src_01.jpg",
                     "img_src_02.jpg"
     ); 

     $j(".link1").hover(function(){
        this.src = this.src.replace("_off","_01");
        },
        function(){
        this.src = this.src.replace("_01","_off");
        }
     );

           $j(".link2").hover(function(){
        this.src = this.src.replace("_off","_02");
        },
        function(){
        this.src = this.src.replace("_02","_off");
        }
     ); 
   });

  (function(j$) {
    var cache = [];
    $j.preLoadImages = function() {
      var args_len = arguments.length;
      for (var i = args_len; i--;) {
        var cacheImage = document.createElement('img');
        cacheImage.src = arguments[i];
        cache.push(cacheImage);
      }
    }
  });

我看到的错误如下:

TypeError: this.src is undefined
[Break On This Error]   

this.src = this.src.replace("_off","_01");

(this error repeats itself on every hover)

这个错误:

TypeError: $j.preLoadImages is not a function
[Break On This Error]   

"img_src_02.jpg"

由于我对 Javascript 不是很流利,请在回答时提供示例。

【问题讨论】:

    标签: javascript jquery image hover jquery-hover


    【解决方案1】:

    要编写一个 jQuery 插件,首先向 jQuery.fn 对象添加一个新的函数属性,其中该属性的名称是您的插件的名称:

    尝试以下方法:

    (function($j) {
       $j.fn.preLoadImages = function() {
            //...
       }
    })(jQuery);
    

    【讨论】:

    • @Lynda 因为它是 jQuery 对象的方法之一,您应该选择一个元素并创建一个 jQuery 对象,$(selector).preLoadImages()
    • 我明白了。我认为整个脚本需要重新编写,但由于缺乏知识,我自己不能这样做。
    • 另外,你的 html 使用 "link-1" 而你的 js 使用 "link1"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多