我正在尝试创建表单列表并禁用它们,并且仅启用焦点表单。然后,当向下滚动时,一个表单将被禁用,而下一个焦点表单将被启用。这是我正在搞乱的代码:
(我发布下面代码的原因是当前每个表单元素在未获得焦点时都不会被禁用。我希望在获得焦点时一次仅启用几个元素,而其他元素则被禁用)
function SubmitName() {
var form = document.getElementById("InputName");
var elements = form.elements;
for (var i = 0, len = elements.length; i < len; ++i) {
elements[i].disabled = true;
}
}
.body {}
.buttonTans {
width: 80px;
height: 50px;
background: grey;
-webkit-transition: width .5s;
/* For Safari 3.1 to 6.0 */
transition: width .5s;
}
.buttonTans:hover {
width: 100px;
}
.formsize {
height: 50px;
font-size: 25px;
}
.ResizeForms {
width: 120px;
}
.ResizeForms:hover {
-webkit-transition: width .5s;
/* For Safari 3.1 to 6.0 */
transition: width .5s;
width: 150px;
}
<form id="InputName">
First name:<br>
<input id="firstname" class="ResizeForms formsize" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms formsize" type="text" name="lastname"><br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName2">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname"><br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName3">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname"><br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName4">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname"><br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName5">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname"><br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName6">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname"><br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName7">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname"><br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName8">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname"><br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName9">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname"><br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName10">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname"><br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
如果您选择“市场调查”之类的内容,您可以在这里看到我在说什么
https://admin.typeform.com/gallery/workspaces/11216029#/
TLDR:
如何在滚动时不直接查看表单时禁用表单(在聚焦时一次启用一个或仅一个表单)?
编辑
感谢 felixmosh,我设法使用事件监听器滚动解决方案。这是我修改后的代码。 Stille 对其进行了一些调整,但我将发布它,以便其他人也可以使用它:
function SubmitName() {
var form = document.getElementById("InputName");
var elements = form.elements;
for (i = 0, len = elements.length; i < len; ++i) {
elements[i].disabled = true;
}
}
var yPositionForm = new Array(10); //array which stores yposition of each form
var formIdName = ["InputName", "InputName2", "InputName3", "InputName4", "InputName5", "InputName6", "InputName7", "InputName8", "InputName9", "InputName10"];
function findTop(element) {
var rec = document.getElementById(element).getBoundingClientRect();
return rec.top;
}
function findFormPositions() {
for (var k = 0; k <= yPositionForm.length - 1; k++) {
yPositionForm[k] = findTop(formIdName[k]);
}
}
function disableFormElements() {
var formName = formIdName[0];
var formString = formIdName[0];
var j = 0;
while (j <= formIdName.length - 1) {
var form = document.getElementById(formIdName[j]);
var elements = form.elements;
for (i = 0, len = elements.length; i < len; ++i) {
elements[i].disabled = true;
elements[i].style.opacity = 0.5;
}
j++;
}
//do something here to mess with opacity
}
function disableAllButTop() {
var formName = formIdName[0];
var formString = formIdName[0];
var j = 1;
while (j <= formIdName.length - 1) {
var form = document.getElementById(formIdName[j]);
var elements = form.elements;
for (i = 0, len = elements.length; i < len; ++i) {
elements[i].disabled = true;
elements[i].style.opacity = 0.5; //do something here to mess with opacity
}
j++;
}
}
disableAllButTop(); //start with all forms disabled but the first one
var last_known_scroll_position = 0;
var ticking = false;
function doSomethingOnScroll(scroll_pos) {
// do something with the scroll position
disableFormElements();
findFormPositions();
for (var k = 0; k <= yPositionForm.length - 1; k++) {
if (yPositionForm[k] <= scroll_pos + 315 && yPositionForm[k] >= scroll_pos - 80) {
EnableForum(formIdName[k]);
}
}
}
function EnableForum(name) {
var form = document.getElementById(name);
var elements = form.elements;
for (i = 0, len = elements.length; i < len; ++i) {
elements[i].disabled = false;
elements[i].style.opacity = 1; //do something here to mess with opacity
}
}
window.addEventListener('scroll', function(e) {
last_known_scroll_position = window.scrollY;
if (!ticking) {
window.requestAnimationFrame(function() {
doSomethingOnScroll(last_known_scroll_position);
ticking = false;
});
ticking = true;
}
});
.body {}
.testVisible.visible {
display: block;
}
.buttonTans {
width: 80px;
height: 50px;
background: grey;
-webkit-transition: width .5s;
/* For Safari 3.1 to 6.0 */
transition: width .5s;
}
.buttonTans:hover {
width: 100px;
}
.formsize {
height: 50px;
font-size: 25px;
}
.ResizeForms {
width: 120px;
}
.ResizeForms:hover {
-webkit-transition: width .5s;
/* For Safari 3.1 to 6.0 */
transition: width .5s;
width: 150px;
}
<form id="InputName" class="testVisible">
First name:<br>
<input id="firstname" class="ResizeForms formsize" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms formsize" type="text" name="lastname">
<br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName2">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname">
<br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName3">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname">
<br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName4">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname">
<br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName5">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname">
<br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName6">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname">
<br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName7">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname">
<br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName8">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname">
<br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName9">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname">
<br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
<form id="InputName10">
First name:<br>
<input id="firstname" class="ResizeForms" type="text" name="firstname"><br> Last name:<br>
<input id="lastname" class="ResizeForms" type="text" name="lastname">
<br>
<input id="submitName" class="buttonTans" type="button" value="Submit" onclick="SubmitName()">
</form>
最佳答案
有很多选项可以监听滚动事件,其中之一正在使用
scroll event ,
window.addEventListener('scroll', function(e) {})
其他内容可以使用任何可用的 spy 滚动库来完成。
关于javascript - 隐藏滚动时且不在焦点上的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47151346/