【问题标题】:Multiple images depending on mouse location when hovering over div将鼠标悬停在 div 上时,取决于鼠标位置的多个图像
【发布时间】:2015-09-18 23:53:02
【问题描述】:

我正在尝试在我的网站上创建一个概览页面,以便当我将鼠标悬停在概览页面上的一个 div 上时,该 div 的不同部分会显示不同的图像。本质上是幻灯片,但图像会根据光标所在的位置而变化。

我已经设法找到了一些我想要的代码,但它使用 a href 来拉入图像,这意味着如果你点击它,它会转到图像的链接。

目前我只有占位符图像,但完成后每个都会有特定的项目图像。由于每个 div 只是一个项目,整个 div 应该转到一个 html 链接,而不仅仅是图像的特定图像链接用户悬停在上面。

我想要的只是用户点击它会转到一个 html 链接而不是一个 img 链接。

这是我正在使用的代码:

对于我想要实现的目标,精通编码的人可能会有更好的解决方案,我有兴趣看到任何更好的解决方案。

HTML

     <div class="multi">
        <ul class="rotator-nav fifth clearfix">
            <li><a href="/img/FoI.jpg" onclick="return false;" class="img1"></a></li>
            <li><a href="/images/card.jpg" onclick="return false;" class="img2"></a></li>
            <li><a href="/images/amareal.jpg" onclick="return false;" class="img3"></a></li>
            <li><a href="/images/edeva.jpg" onclick="return false;" class="img4"></a></li>
            <li><a href="/images/amacover2.gif" onclick="return false;" class="img5"></a></li> 
        </ul>
    <div class="imgcontent">
        <ul class="rotator-icons fifth">
            <span class="img1 active"></span>
            <span class="img2"></span>
            <span class="img3"></span>
            <span class="img4"></span>
            <span class="img5"></span>
        </ul>

    <img src="/img/FoI.jpg" class="currentimg">
    </div>
    </div>

CSS

.multi {
    display: block;
    float:left;
    position: relative;
    width: 30.8%;
    height: 20%;
    padding: 0px;
    margin:0% 1% 2% 1%;
    overflow: hidden;
}

.multi .imgcontent {
  display: block;
  position: absolute;
  top: 0px;
}

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

.rotator-nav {
  display: block;
  position: relative;
  width: 100%;
  height: 100%;
  z-index: 9;
}
.rotator-nav li {
  display: block;
  float: left;
  height: 100%;
}

.rotator-nav.fourth li {
  width: 25%;
}
.rotator-nav.fifth li {
  width: 20%;
}

.rotator-nav li a {
  display: block;
  float: left;
  width: 100%;
  height: 100%;
  border-bottom:0px solid #fff
}

.clearfix:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; }
.clearfix { display: inline-block; }

html[xmlns] .clearfix { display: block; }
* html .clearfix { height: 1%; }

JS

$(function(){
  var $rotators = $('.multi');
  var $imglinks = $('.rotator-nav a');

  $imglinks.on('mouseenter', function(e){
    var imgclass = '.'+$(this).attr('class');
    var imglink  = $(this).attr('href');

    // update main image src
    $(this).parent().parent().parent().find('.currentimg').attr('src',imglink);

    // update current rotator icon
    var $rotators = $(this).parent().parent().parent().find('.rotator-icons');

    if($rotators.children(imgclass).hasClass('active')) {
      // already active icon -- do nothing
    } else {
      // remove active class then add to new icon
      $rotators.children('span').removeClass('active');
      $rotators.children(imgclass).addClass('active');
    }
  });
});

任何帮助将不胜感激!

谢谢,

标记

【问题讨论】:

  • 你能提供一个jsFiddle吗?
  • 这让我大吃一惊——你不能在
      中直接使用 span 标签,
        的子级必须是
      • (然后你可以在
      • 中使用 span )。我也支持jsFiddle的请求。

标签: javascript jquery html css image


【解决方案1】:

我认为您最好为此使用数据属性(如果我理解正确的意图):

var imglink  = $(this).data('image');

<div class="multi">
  <ul class="rotator-nav fifth clearfix">
    <li>
      <a data-image="/img/FoI.jpg" href="#" class="img1"></a>
    </li>
    <li>
      <a data-image="/images/card.jpg" href="#" class="img2"></a>
    </li>
    <li>
      <a data-image="/images/amareal.jpg" href="#" class="img3"></a>
    </li>
    <li>
      <a data-image="/images/edeva.jpg" href="#" class="img4"></a>
    </li>
    <li>
      <a data-image="/images/amacover2.gif" href="#" class="img5"></a>
    </li>
  </ul>

...

如果您仍然希望看到原始 div 上的图像,可以使用伪元素。优点是它们不是实际的 DOM 元素,不会注册点击:

Demo

现在,如果 data 属性也可以直接用于伪元素的内容,那就太好了,但这似乎是不可能的。而且您不能使用 JavaScript 来定位它们,因此每个图像都必须在样式表中另外使用 nth-of-type() 定义。

【讨论】:

  • 效果很好,非常感谢您的帮助!
  • 哇,我原以为它可能需要在这里或那里进行一些调整。一气呵成的情况很少见。很高兴我能提供帮助并感谢您的跟进。
【解决方案2】:

你不需要使用.parent().parent()

只需使用父类的类来查找项目。

你的$(this).parent() * 3 是$(".multi")

所以你的$rotators 找不到.rotator-icons

您需要多使用一位父母或使用兄弟姐妹


如果不需要对很多项目做一件事,我建议不要使用类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多