[英]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.由于
leitnerbox
和actualLeitnerbox
是全局变量 - 您实际上并不需要您的函数将它们作为参数。
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此外,本例中的
leitnerbox
和actualLeitnerbox
是undefined
,因为在 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.