简体   繁体   English

如何在mousehover 上增加全局变量,但让它在mouseout 上恢复到正常值?

[英]How do I increment a global variable onmousehover, but have it return to it's normal value onmouseout?

Hi i'm new to javascript and is trying to create the following functionality.嗨,我是 javascript 新手,正在尝试创建以下功能。

I have 7 buttons.我有7个按钮。 Some of these are hovered from the beginning.其中一些从一开始就悬停。 This depends on a numeric value fetched from the database.这取决于从数据库中获取的数值。 So when this value from the database is 4 then 4 buttons will be hovered因此,当数据库中的此值为 4 时,将悬停 4 个按钮

However, when hovering the "Remembered" or "Didn't remember" buttons, as seen in the picture below.但是,将鼠标悬停在“记住”或“不记得”按钮时,如下图所示。 The number of buttons that are hovered should change temporarily.悬停的按钮数量应暂时更改。

When "Remembered" is hovered - button 5 should also be hovered.当“记住”悬停时 - 按钮 5 也应该悬停。 When "Remembered" is not hovered - only 4 buttons should be hovered again.当“记住”没有悬停时 - 只有 4 个按钮应该再次悬停。

When "DidNotRemember is hovered" - only button 1 should be hovered.当“DidNotRemember 被悬停”时 - 只有按钮 1 应该被悬停。 When "DidNotRemember" is not hovered - only 4 buttons should be hovered again.当“DidNotRemember”未悬停时 - 仅应再次悬停 4 个按钮。

在此处输入图片说明

Below is my approach, and I don't quite understand why it doesn't work.下面是我的方法,我不太明白为什么它不起作用。

My code:我的代码:

 var actualLeitnerbox = 4; // Dummy value. Will normally be fetched from database var leitnerbox = actualLeitnerbox; function rememberedHovered(leitnerbox) { leitnerbox += 1; return leitnerbox } function rememberedNotHovered(leitnerbox, actualLeitnerbox) { leitnerbox = actualLeitnerbox; return leitnerbox } function didNotRememberHovered(leitnerbox) { leitnerbox = 1; return leitnerbox } function didNotRememberNotHovered(leitnerbox, actualLeitnerbox) { leitnerbox = actualLeitnerbox; return leitnerbox } var header = document.getElementById("myDIV"); var btns = header.getElementsByClassName("btn"); for (var i = 0; i < leitnerbox; i++) { btns[i].classList.add("active"); }
 /* Style the buttons */ .btn { border: none; outline: none; padding: 10px 16px; background-color: #f1f1f1; cursor: pointer; font-size: 18px; } /* Style the active class, and buttons on mouse-over */ .active, .btn:hover { background-color: #666; color: white; }
 <button onmouseover="rememberedHovered()" onmouseout="rememberedNotHovered()" class="btn "> Remembered </button> <button onmouseover="didNotRememberHovered()" onmouseout="didNotRememberNotHovered()" class="btn "> Did Not Remember </button> <div id="myDIV"> <button class="btn">1</button> <button class="btn">2</button> <button class="btn">3</button> <button class="btn">4</button> <button class="btn">5</button> <button class="btn">6</button> <button class="btn">7</button> </div>

Thanks for reading this感谢您阅读本文

First: Your functions function rememberedHovered(leitnerbox) and others accept parameters, but you do not pass them on hover event <button onmouseover="didNotRememberHovered()" onmouseout="didNotRememberNotHovered()" class="btn "> Did Not Remember </button> .第一:你的函数function rememberedHovered(leitnerbox)和其他function rememberedHovered(leitnerbox)接受参数,但你没有在悬停事件上传递它们<button onmouseover="didNotRememberHovered()" onmouseout="didNotRememberNotHovered()" class="btn "> Did Not Remember </button> Since leitnerbox and actualLeitnerbox are globals - you don't really need your functions to have them as parameters.由于leitnerboxactualLeitnerbox是全局变量 - 您实际上并不需要您的函数将它们作为参数。

Second: You don't have a function to change the state of the buttons.第二:您没有更改按钮状态的功能。 This part of code这部分代码

var header = document.getElementById("myDIV");
var btns = header.getElementsByClassName("btn");
for (var i = 0; i < leitnerbox; i++) {
  btns[i].classList.add("active");
}

will only work on first load, but won't change anything when you hover over the buttons.只会在第一次加载时工作,但当你悬停在按钮上时不会改变任何东西。 So you need it as a function as well and place it inside your onHover functions.所以你也需要它作为一个函数并将它放在你的 onHover 函数中。 And you also need to change this part a bit.而且您还需要稍微更改此部分。 Since the number of active buttons change, you will have to deactivate them somehow.由于active按钮的数量发生变化,您必须以某种方式停用它们。

I hope this is your desired functionality:我希望这是您想要的功能:

 var actualLeitnerbox = 4; var leitnerbox = actualLeitnerbox; function rememberedHovered() { leitnerbox += 1; activate(); } function rememberedNotHovered() { leitnerbox = actualLeitnerbox; activate(); } function didNotRememberHovered() { leitnerbox = 1; activate(); } function didNotRememberNotHovered() { leitnerbox = actualLeitnerbox; activate(); } function activate(){ var header = document.getElementById("myDIV"); var btns = header.getElementsByClassName("btn"); for(let i = 0; i < btns.length; i++){ btns[i].classList.remove("active"); } for (var i = 0; i < leitnerbox; i++) { btns[i].classList.add("active"); } } activate();
 .btn { border: none; outline: none; padding: 10px 16px; background-color: #f1f1f1; cursor: pointer; font-size: 18px; } /* Style the active class, and buttons on mouse-over */ .active, .btn:hover { background-color: #666; color: white; }
 <button onmouseover="rememberedHovered()" onmouseout="rememberedNotHovered()" class="btn "> Remembered </button> <button onmouseover="didNotRememberHovered()" onmouseout="didNotRememberNotHovered()" class="btn "> Did Not Remember </button> <div id="myDIV"> <button class="btn">1</button> <button class="btn">2</button> <button class="btn">3</button> <button class="btn">4</button> <button class="btn">5</button> <button class="btn">6</button> <button class="btn">7</button> </div>

You should make each function do specific task你应该让每个功能做特定的任务

Moreover, leitnerbox and actualLeitnerbox in this case are undefined , because in the HTML, you call these function without any parameters此外,本例中的leitnerboxactualLeitnerboxundefined ,因为在 HTML 中,您调用这些函数时不带任何参数

function rememberedHovered(leitnerbox) {
  // ...
}

function rememberedNotHovered(leitnerbox, actualLeitnerbox) {
  // ...
}

function didNotRememberHovered(leitnerbox) {
  // ...
}

function didNotRememberNotHovered(leitnerbox, actualLeitnerbox) {
  // ...
}

Below snippet should help you下面的片段应该可以帮助你

 var actualLeitnerbox = 4; var leitnerbox = actualLeitnerbox; var header = document.getElementById("myDIV"); var btns = header.getElementsByClassName("btn"); function hover(i) { btns[i].classList.add("active"); } function unhover(i) { btns[i].classList.remove("active"); } function hoverAll() { for (var i = 0; i < actualLeitnerbox; i++) hover(i) } function unhoverAll() { for (var i = 0; i < actualLeitnerbox; i++) unhover(i) } function rememberedHovered() { hover(actualLeitnerbox) } function rememberedNotHovered() { unhover(actualLeitnerbox) } function didNotRememberHovered() { unhoverAll() hover(0) } function didNotRememberNotHovered() { unhoverAll() hoverAll() } for (var i = 0; i < leitnerbox; i++) { btns[i].classList.add("active"); }
 /* Style the buttons */ .btn { border: none; outline: none; padding: 10px 16px; background-color: #f1f1f1; cursor: pointer; font-size: 18px; } /* Style the active class, and buttons on mouse-over */ .active, .btn:hover { background-color: #666; color: white; } #myDIV { margin-top: 5rem; }
 <button onmouseover="rememberedHovered()" onmouseout="rememberedNotHovered()" class="btn "> Remembered </button> <button onmouseover="didNotRememberHovered()" onmouseout="didNotRememberNotHovered()" class="btn "> Did Not Remember </button> <div id="myDIV"> <button class="btn">1</button> <button class="btn">2</button> <button class="btn">3</button> <button class="btn">4</button> <button class="btn">5</button> <button class="btn">6</button> <button class="btn">7</button> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM