javascript - jquery 列表悬停改变侧 img

标签 javascript jquery html

我需要有一个图标列表,每当 <li> 时,这些图标都会更改侧板 div 中的图像和标题。元素被悬停时,当没有任何东西被悬停时有一个默认图像(“i.png”),只要用户光标离开 <ul> 就会返回, 这是 html:

$("#brain").hover(function() {
        $("#brain img").css("opacity", "1");
        $("#exp-img").attr("src", "a.png");
        $("#icon-image-header").text("lorem");
      });
      $("#brain").mouseleave(function() {
        $("#brain img").css("opacity", "0.5");
      });
      $("#body").hover(function() {
        $("#body img").css("opacity", "1");
        $("#exp-img").attr("src", "b.png");
        $("#icon-image-header").text("ipsum");
      });
      $("#body").mouseleave(function() {
        $("#body img").css("opacity", "0.5");
      });
      $("#planning").hover(function() {
        $("#planning img").css("opacity", "1");
        $("#exp-img").attr("src", "c.png");
        $("#icon-image-header").text("dolor");
      });
      $("#planning").mouseleave(function() {
        $("#planning img").css("opacity", "0.5");
      });
      $("#pen").hover(function() {
        $("#pen img").css("opacity", "1");
        $("#exp-img").attr("src", "d.png");
        $("#icon-image-header").text("sit");
      });
      $("#pen").mouseleave(function() {
        $("#pen img").css("opacity", "0.5");
      });
      $("#front").hover(function() {
        $("#front img").css("opacity", "1");
        $("#exp-img").attr("src", "e.png");
        $("#icon-image-header").text("amet");
      });
      $("#front").mouseleave(function() {
        $("#front img").css("opacity", "0.5");
      });
      $("#pie").hover(function() {
        $("#pie img").css("opacity", "1");
        $("#exp-img").attr("src", "f.png");
        $("#icon-image-header").text("lorem");
      });
      $("#pie").mouseleave(function() {
        $("#pie img").css("opacity", "0.5");
      });
      $("#bulb").hover(function() {
        $("#bulb img").css("opacity", "1");
        $("#exp-img").attr("src", "g.png");
        $("#icon-image-header").text("ipsum");
      });
      $("#bulb").mouseleave(function() {
        $("#bulb img").css("opacity", "0.5");
      });
      $("#db").hover(function() {
        $("#db img").css("opacity", "1");
        $("#exp-img").attr("src", "h.png");
        $("#icon-image-header").text("dolor");
      });
      $("#db").mouseleave(function() {
        $("#db img").css("opacity", "0.5");
      });
      $("#skills-icons").mouseleave(function() {
        $("#icon-image-header").text("Lorem");
        $("#exp-img").attr("src", "i.png");
      });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<article class="container">
  <div class="col-2" id="our-expertise-image">
    <div class="icon-image-container">
      <img src="i.png" alt="" id="exp-img">
    </div>
      <h1 id="icon-image-header">
        Lorem
      </h1>
  </div>
  <div class="col-2" id="our-expertise-icons">
    <h3 class="cat-header"><span>+</span>Lorem</h3>
    <h1>Lorem Ipsum Dolor</h1>
    <ul id="skills-icons">
      <li id="brain"><img src="brain-icon.png" alt=""></li>
      <li id="body"><img src="body-icon.png" alt=""></li>
      <li id="planning"><img src="planning-icon.png" alt=""></li>
      <li id="pen"><img src="pen-icon.png" alt=""></li>
      <li id="front"><img src="front-icon.png" alt=""></li>
      <li id="pie"><img src="piegraph-icon.png" alt=""></li>
      <li id="bulb"><img src="bulb-icon.png" alt=""></li>
      <li id="db"><img src="db-icon.png" alt=""></li>
    </ul>
  </div>
</article>

现在这实际上工作正常,但我想知道是否有任何更清洁的方法来做到这一点。我是 jquery 的初学者,但它看起来真的很长。

最佳答案

给您一个解决方案 https://jsfiddle.net/9fczjsgu/

var dic = {
  "brain" : {
    img: "a.png",
    text: "lorem"
  },
  "body" : {
  	img: "b.png",
    text: "ipsum"
  },
  "planning" : {
    img: "c.png",
    text: "dolor"
  },
  "pen" : {
    img: "d.png",
    text: "sit"
  },
  "front" : {
    img: "e.png",
    text: "amet"
  },
  "pie" : {
    img: "f.png",
    text: "lorem"
  },
  "bulb" : {
    img: "g.png",
    text: "ipsum"
  },
  "db" : {
    img: "h.png",
    text: "dolor"
  }
};

$("li").hover(function() {
  $(this).find("img").css("opacity", "1");
  $("#exp-img").attr("src", dic[$(this).attr('id').img]);
  $("#icon-image-header").text(dic[$(this).attr('id').img]);
}).mouseleave(function() {
  $(this).find("img").css("opacity", "0.5");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<article class="container">
  <div class="col-2" id="our-expertise-image">
    <div class="icon-image-container">
      <img src="i.png" alt="" id="exp-img">
    </div>
      <h1 id="icon-image-header">
        Lorem
      </h1>
  </div>
  <div class="col-2" id="our-expertise-icons">
    <h3 class="cat-header"><span>+</span>Lorem</h3>
    <h1>Lorem Ipsum Dolor</h1>
    <ul id="skills-icons">
      <li id="brain"><img src="brain-icon.png" alt=""></li>
      <li id="body"><img src="body-icon.png" alt=""></li>
      <li id="planning"><img src="planning-icon.png" alt=""></li>
      <li id="pen"><img src="pen-icon.png" alt=""></li>
      <li id="front"><img src="front-icon.png" alt=""></li>
      <li id="pie"><img src="piegraph-icon.png" alt=""></li>
      <li id="bulb"><img src="bulb-icon.png" alt=""></li>
      <li id="db"><img src="db-icon.png" alt=""></li>
    </ul>
  </div>
</article>

创建一个字典(JSON),以 id 为键 & 它会再次包含 JSON 形式的值和 image & 文本

希望对您有所帮助。

关于javascript - jquery 列表悬停改变侧 img,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46070542/

相关文章:

javascript - 应该将 javascript 文件和样式表添加到 Rails 项目的何处?

javascript - 如何在从 json 数据创建 html 表时创建隐藏的 <td> 行?

javascript - 捕获按键并传递值 javascript

javascript - 使用 jQuery 删除 iframe 中的 body 标签

html - Div 100% 宽度跨浏览器 firefox 问题

javascript - 如何对可变长度的文本进行分页?

javascript - Flexbox 换行仅第一列带有溢出滚动

javascript - 更改禁用单选按钮的颜色

javascript - 这个跨度如何在选择框中不可见?

javascript - 使用 nedb 数组进行 ng-repeat