在Javascript中实现鼠标悬停功能

时间:2018-01-23 00:32:16

标签: javascript html css

我试图学习如何使用javascript进行编程,来自对Java,HTML和CSS非常扎实的知识。我使用bootstrap设计了一个网站,但我已经卡住了。我的目标是使用普通Javascript

更改导航栏元素的背景颜色

What I'm working with 我可以使用JQuery做到这一点,但我需要知道如何在javascript中编程,因为它有助于作为一种技能(特别是对于实习!)。研究完之后,我可以看到的实现是HTML元素的鼠标悬停属性和getElementsByClassName / getElementsById。

当我自己实施它们时,我似乎没有任何运气。我想将我的Javascript保存在外部文件中,这是另一个难点。我似乎无法一次性选择所有元素,更不用说为它们设置样式了。

这是我的html(使用bootstrap 4和一些自定义样式):

<!DOCTYPE = html>
<html lang = "en">
  <head>
    <title>Testing Styles</title>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.css">
    <link rel="stylesheet" type="text/css" href="css/bootstrap-grid.css">
    <link rel="stylesheet" type="text/css" href="css/styles.css">
    <link href="https://fonts.googleapis.com/css?family=Julius+Sans+One|Quicksand|Rubik" rel="stylesheet">
  </head>
  <body>
    <heading>
      <div class = "Jumbotron">
        <h1 class = "display-2">The Header</h1>
        <p class = "lead subtext"> And Subtext about the header</p>
      </div>
    </heading>
    <nav class = "mx-auto bg-dark">
      <div class = "container-fluid">
        <ul class = "nav justify-content-center">
          <li class = "nav-item active" id = "temp">
            <a class = "nav-link text-light" href="#">Homepage</a>
          </li>
          <li class = "nav-item active" id = "temp">
            <a class = "nav-link text-light" href="#">Posts</a>
          </li>
          <li class = "nav-item active" id = "temp">
            <a class = "nav-link text-light" href="#">Report A Problem</a>
          </li>
        </ul>
      </div>
    </nav>
    <script src= "JS/scripts.js"></script>

  </body>
</html>

使用Javascript:

document.getElementsByClassName("nav-link").style.color = "blue";

将颜色设置为蓝色仅测试选择是否有效,而不是我的最终目标。当我刷新页面时没有任何反应。我已经确认我正确链接了我的JS文件,因为alert()有效。

任何帮助表示赞赏,我已经在这个问题上付出了很多努力,所以请不要恭维!谢谢!

4 个答案:

答案 0 :(得分:3)

你几乎就在那里......你所拥有的是集合来循环......

var N=document.getElementsByClassName("nav-link");

for(var i=0; i<N.length; i++){ N[i].style.color = "blue"; }

答案 1 :(得分:2)

你需要遍历一系列元素。

&#13;
&#13;
var links = document.getElementsByClassName('nav-link');
for (var i = 0; i < links.length; i++) {
  links[i].addEventListener('mouseover', function() {
    this.style.color = "blue";
  });

  links[i].addEventListener("mouseout", function () {       
      this.style.color = "";
  });
}
&#13;
<link href="https://cdn.jsdelivr.net/npm/bootstrap-grid@2.0.1/dist/grid.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<heading>
  <div class="Jumbotron">
    <h1 class="display-2">The Header</h1>
    <p class="lead subtext"> And Subtext about the header</p>
  </div>
</heading>
<nav class="mx-auto bg-dark">
  <div class="container-fluid">
    <ul class="nav justify-content-center">
      <li class="nav-item active" id="temp">
        <a class="nav-link text-light" href="#">Homepage</a>
      </li>
      <li class="nav-item active" id="temp">
        <a class="nav-link text-light" href="#">Posts</a>
      </li>
      <li class="nav-item active" id="temp">
        <a class="nav-link text-light" href="#">Report A Problem</a>
      </li>
    </ul>
  </div>
</nav>
&#13;
&#13;
&#13;

答案 2 :(得分:2)

清理@ user4723924解决方案并提供一种在鼠标离开控件时更改颜色的方法。

if (neoncircle2.contains(x, y)) {
      //do that and this
}
// Get all the nav-link elements.
var navButtons = document.getElementsByClassName("nav-link");

for (var i=0; i < navButtons.length; i++) { 
    // On mouse over.
    navButtons[i].addEventListener("mouseover", function () {
        // Change color to red.
        this.style.color = "red";
    });
    // On mouse out.
    navButtons[i].addEventListener("mouseout", function () {
      // Change back to original color.
      this.style.color = "";
    });
}

答案 3 :(得分:1)

我个人更喜欢.querySelectorAll('selector'),因为它可以更灵活地选择元素 循环遍历它们的方法(选择)是[].map.call(collection, function)

它灵活,不太冗长,高度可读,因此可维护。我不确定它在向后浏览器兼容性方面有多远,但它确实涵盖了现代IE,推荐的方法NodeList.forEach()尚未实现。

&#13;
&#13;
[].map.call(document.querySelectorAll('.nav-link'), function(el){
  el.addEventListener('mouseover', function(){
    el.setAttribute('data-color',el.style.color);
    el.style.color='red'
  });
  el.addEventListener('mouseout', function(){
    el.style.color=el.getAttribute('data-color');
    el.removeAttribute('data-color')
  });
})
&#13;
<ul>
  <li><a href class="nav-link">a link</a></li>
  <li><a href class="nav-link" style="color:blue">a link</a></li>
  <li><a href class="nav-link" style="color:orange">a link</a></li>
</ul>
&#13;
&#13;
&#13;