【问题标题】:Change an image <src> within a <div> when hovering over another <div>将鼠标悬停在另一个 <div> 上时更改 <div> 内的图像 <src>
【发布时间】:2015-09-12 02:09:54
【问题描述】:

我有一个父 div,#crbigimg,其中有一个图像#copyrightimagecurrent

除此之外,在父 div 中还有四个较小的 div,每个 div 在#copyrightimagecurrent 图像上具有不同的大小和位置。

结构如下:

<div id="crbigimg">
    <img id="copyrightimagecurrent" src="http://bonfiredog.co.uk/ooo/icons/copyrightbase.png" alt="Copyright" />
        <div id="copyright1"></div>
        <div id="copyright2"></div>
        <div id="copyright3"></div>
        <div id="copyright4"></div>
</div>

我想做的是,当将鼠标悬停在每个 #copyright 子 div 上时,更改 #copyrightimagecurrent 图像的 src 以显示不同的图像,并且当从悬停位置移除鼠标时,返回它到原始的src。

我假设为此我需要在子 div 上调用 .hover jQuery 函数,然后再更改 HTML 本身。然而,第二部分目前超出了我的能力范围。

如果有人可以帮助我,我将不胜感激。

有关相关页面的实时构建,请参阅:http://bonfiredog.co.uk/copyright

对于原始代码本身:

HTML

<html>
<body>
    <div id="crbigimg">
    <img id="copyrightimagecurrent" src="http://bonfiredog.co.uk/ooo/icons/copyrightbase.png" alt="Copyright" />
        <div id="copyright1"></div>
        <div id="copyright2"></div>
        <div id="copyright3"></div>
        <div id="copyright4"></div>
    </div>
</body>
<html>

CSS

#crbigimg{
margin-left:auto;
margin-right:auto;
margin-top:0%;
width:25%;
text-align:center;
}

#crbigimg img{
display:block;
margin-left:auto;
margin-right:auto;
width:100%;
height:auto;
}


#copyright1{
border: 2px solid green;
width:3%;
height:6%;
position:absolute;
top:21%;
left:50%;
z-index:5;
}

#copyright2{
border: 2px solid red;
width: 6.5%;
height: 15.4%;
position: absolute;
top: 20%;
left: 45.3%;
z-index: 2;
}

#copyright3{
   border: 2px solid purple;
  width: 5.4%;
  height: 8%;
  position: absolute;
  top: 11.5%;
  left: 45.4%;
  z-index: 3;
}

#copyright4{
  border: 2px solid blue;
  width: 4.1%;
  height: 6.6%;
  position: absolute;
  top: 11.6%;
  left: 49.6%;
  z-index: 4;
}

目前还没有 Javascript/jQuery!

【问题讨论】:

  • 请发布一个包含您的 JavaScript 的最小、完整的代码示例,而不是或附加到您的外部站点链接。一年后,这个问题仍然会出现在该链接中,但该页面上的代码可能已完全更改,使得该问题对未来的访问者无法使用。
  • 现在已经这样做了!谢谢你的提示。

标签: jquery html css


【解决方案1】:

在每个 '#copyright' 元素上添加新的 src:

<div id="copyright1" data-src="path/to/img.png"></div>
....

mouseenter 上,将此 data-src 路径应用于 img:

$('#crbigimg > div').on('mouseenter', function() {
    var newSrc = $(this).attr('data-src');
    var img = $('#copyrightimagecurrent');
    img.attr('data-orSrc', img.attr('src'));
    img.attr('src',newSrc);
}).on('mouseleave', function() {
    var img = $('#copyrightimagecurrent');
    img.attr('src',img.attr('data-orSrc'));
});

【讨论】:

  • 更好的选择器是$('#crbigimg &gt; div')$('#copyrightimagecurrent').siblings().each(...)。你也不需要在你的函数中声明that - 你根本没有改变范围。
  • 谢谢,做了一些修改
  • 谢谢!这很优雅,并且需要对我的原始代码进行最少的更改。
【解决方案2】:

您可以调用 .mouseover() 和 .mouseout() 函数来执行此操作,如下所示:

jQuery(document).ready( function () {
//Set your images (I've set two here for clarity)
    var rollover_image =  "/images/image1.jpg";
    var normal_image =  "/images/image2.jpg";

    //Roll the image
    jQuery("#copyright1")
        .mouseenter(function() {
            jQuery("#copyrightimagecurrent").attr("src", rollover_image);
        })
        .mouseout(function() {
            jQuery("#copyrightimagecurrent").attr("src", normal_image);
        });
});

【讨论】:

  • 我建议使用“mouseenter”,因为它会在悬停时触发一次,而是在每次将光标移到选择器上方时触发“mouseover”
  • 是的,我已经做出了改变
【解决方案3】:

我认为在更改之前存储您的 src 即可。

示例代码

//First Get the Current src and Store it to Variable
var initialImgSrc = $('#copyrightimagecurrent').attr('src');

$('#copyrightimagecurrent').hover(              
    function () {
          //Change img src when hover over
         $('#copywriteimgecurrent').attr('src','picture-1.png');
    }, 

    function () {
        //When hover out get back to initial image
        $('#copywriteimgecurrent').attr('src',initialImgSrc);
    }
);

【讨论】:

    【解决方案4】:

    var img = $('#copyrightimagecurrent');
    var originalSrc = img.attr('src');
    
    $('#crbigimg > div').on({
        mouseenter: function () {
            img.attr('src',$(this).data('src'));
        },
    
        mouseleave: function () {
            img.attr('src',originalSrc);
        }
    });
    #crbigimg{
    margin-left:auto;
    margin-right:auto;
    margin-top:0%;
    width:25%;
    text-align:center;
    }
    
    #crbigimg img{
    display:block;
    margin-left:auto;
    margin-right:auto;
    width:100%;
    height:auto;
    }
    
    #copyright1{
    border: 2px solid green;
    width:3%;
    height:6%;
    position:absolute;
    top:21%;
    left:50%;
    z-index:5;
    }
    
    #copyright2{
    border: 2px solid red;
    width: 6.5%;
    height: 15.4%;
    position: absolute;
    top: 20%;
    left: 45.3%;
    z-index: 2;
    }
    
    #copyright3{
       border: 2px solid purple;
      width: 5.4%;
      height: 8%;
      position: absolute;
      top: 11.5%;
      left: 45.4%;
      z-index: 3;
    }
    
    #copyright4{
      border: 2px solid blue;
      width: 4.1%;
      height: 6.6%;
      position: absolute;
      top: 11.6%;
      left: 49.6%;
      z-index: 4;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    
    <div id="crbigimg">
        <img id="copyrightimagecurrent" src="http://bonfiredog.co.uk/ooo/icons/copyrightbase.png" alt="Copyright">
        <div id="copyright1" data-src="http://newlaunches.com/wp-content/uploads/2013/07/google-glass-dog-590x393.jpg"></div>
        <div id="copyright2" data-src="http://googleblog.blogspot.co.uk/uploaded_images/NICKEY_credit-708823.jpg"></div>
        <div id="copyright3" data-src="http://www.glassappsource.com/wp-content/uploads/2014/02/googleglassdog.jpg"></div>
        <div id="copyright4" data-src="http://www.livewithg.com/wp-content/uploads/2013/05/dog-google-glass.jpg"></div>
    </div>

    【讨论】:

      【解决方案5】:
      <div id="crbigimg">
      <img id="copyrightimagecurrent"  src="http://icons.iconarchive.com/icons/artdesigner/tweet-my-web/128/single-bird-icon.png" old-src="http://icons.iconarchive.com/icons/artdesigner/tweet-my-web/128/single-bird-icon.png" alt="Copyright" />
      
          <div id="copyright1" class='cps' data-src="http://icons.iconarchive.com/icons/fasticon/halloween-emoticons/128/Halloween-sad-icon.png">one</div>
          <div id="copyright2" class='cps' data-src="http://icons.iconarchive.com/icons/fasticon/halloween-emoticons/128/Halloween-sad-icon.png">two</div>
          <div id="copyright3" class='cps' data-src="http://icons.iconarchive.com/icons/fasticon/halloween-emoticons/128/Halloween-sad-icon.png">three</div>
          <div id="copyright4" class='cps' data-src="http://icons.iconarchive.com/icons/fasticon/halloween-emoticons/128/Halloween-sad-icon.png">four</div>
      

      $('.cps').hover(function() {
        var that = $(this);
          var newSrc = that.attr('data-src');
          var img = $('#copyrightimagecurrent');    
          img.attr('src',newSrc);
      },function() {
        var that = $(this);
          var img = $('#copyrightimagecurrent');
          img.attr('src',img.attr('old-src'));
      });
      

      Js Fiddle Demo

      【讨论】:

        【解决方案6】:

        将所有图像 src 保存在一个 json abject 或数组中,并像下面这样使用它

        var copywrightImg = {
            "copyright1": "img1path",
            "copyright2": "img2path",
            "copyright3": "img3path",
            "copyright4": "img4path"
        }
        $("#crbigimg div").hover(function () {
        
            if (Object.keys(copywrightImg).indexOf(this.id) != -1) {
                $("#copyrightimagecurrent").attr("src", copywrightImg[this.id])
            }
        }, function () {
            $("#copyrightimagecurrent").attr("src", "http://bonfiredog.co.uk/ooo/icons/copyrightbase.png")
        });
        

        【讨论】:

          【解决方案7】:

          我在这里为你做了一个小例子https://fiddle.jshell.net/5913ba1q/

          这是你需要在悬停时更改图像的js

          var currentImage = $('#copyrightimagecurrent').attr('src'),
              mainImage = $('.main-image img');
          
          function changeImage(){
          
          $('.copyright').hover(function(){
          
              var el =  $(this);
              imgUrl = el.data('image');
              mainImage.attr('src',imgUrl)
          
          }, function(){
          
              mainImage.attr('src',currentImage)
          
          });
          }
          
          changeImage();
          

          我稍微修改一下你的html,这里是:

          <div id="crbigimg">
               <div class="main-image">
                   <img id="copyrightimagecurrent" src="http://lorempixel.com/400/400/" alt="Copyright" />
               </div>   
              <div class="copyright-wrapper">
                <div class="copyright" data-image="http://lorempixel.com/410/330/"></div>
                <div class="copyright" data-image="http://lorempixel.com/350/320/"></div>
                <div class="copyright" data-image="http://lorempixel.com/350/300/"></div>
                <div class="copyright" data-image="http://lorempixel.com/300/300/"></div>
             </div>
          </div>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-07-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-01
            • 2016-01-21
            • 2015-01-16
            相关资源
            最近更新 更多