我正在使用纯普通JavaScript创建一个HTML表单,其效果与SurveyMonkey.com/r/online-product-feedbed-survey-template-new类似
我想实现的是让我的表单题的不透明度变轻,让一个屏幕上的题不透明度:0;以便在上下滚动时,从用户获得焦点并使该表单的所有其他问题变暗,这将是完全可见的。
为此,我尝试了我的代码后,从不同的资源得到不同的提示,在这里我分享它。检查我的工作的带电工作JSFIDDLE和编辑它在那里。
HTML
<form>
<div class="questionDIV overlay">
<h3>Question # 1) Our purpose / vision / mission / values reflect delivering value for all stakeholders...</h3>
<p><label class="container">Yes<input type="radio" name="1" value="Yes"><span class="radiomark"></span></label></p>
<p><label class="container">No<input type="radio" name="1" value="No"><span class="radiomark"></span></label></p>
<p><label class="container">Partially<input type="radio" name="1" value="Partially"><span class="radiomark"></span></label></p>
</div>
<div class="questionDIV overlay">
<h3>Question # 1) Our purpose / vision / mission / values reflect delivering value for all stakeholders...</h3>
<p><label class="container">Yes<input type="radio" name="1" value="Yes"><span class="radiomark"></span></label></p>
<p><label class="container">No<input type="radio" name="1" value="No"><span class="radiomark"></span></label></p>
<p><label class="container">Partially<input type="radio" name="1" value="Partially"><span class="radiomark"></span></label></p>
</div>
<div class="questionDIV overlay">
<h3>Question # 1) Our purpose / vision / mission / values reflect delivering value for all stakeholders...</h3>
<p><label class="container">Yes<input type="radio" name="1" value="Yes"><span class="radiomark"></span></label></p>
<p><label class="container">No<input type="radio" name="1" value="No"><span class="radiomark"></span></label></p>
<p><label class="container">Partially<input type="radio" name="1" value="Partially"><span class="radiomark"></span></label></p>
</div>
<div class="questionDIV overlay">
<h3>Question # 1) Our purpose / vision / mission / values reflect delivering value for all stakeholders...</h3>
<p><label class="container">Yes<input type="checkbox" name="1" value="Yes"><span class="checkmark"></span></label></p>
<p><label class="container">No<input type="checkbox" name="1" value="No"><span class="checkmark"></span></label></p>
<p><label class="container">Partially<input type="checkbox" name="1" value="Partially"><span class="checkmark"></span></label></p>
</div>
<div class="questionDIV overlay">
<h3>Question # 1) Our purpose / vision / mission / values reflect delivering value for all stakeholders...</h3>
<p><label class="container">Yes<input type="checkbox" name="1" value="Yes"><span class="checkmark"></span></label></p>
<p><label class="container">No<input type="checkbox" name="1" value="No"><span class="checkmark"></span></label></p>
<p><label class="container">Partially<input type="checkbox" name="1" value="Partially"><span class="checkmark"></span></label></p>
</div>
<div class="questionDIV overlay">
<h3>Question # 1) Our purpose / vision / mission / values reflect delivering value for all stakeholders...</h3>
<p><label class="container">Yes<input type="checkbox" name="1" value="Yes"><span class="checkmark"></span></label></p>
<p><label class="container">No<input type="checkbox" name="1" value="No"><span class="checkmark"></span></label></p>
<p><label class="container">Partially<input type="checkbox" name="1" value="Partially"><span class="checkmark"></span></label></p>
</div>
</form>
CSS
.overlay {opacity:0.2}
JavaScript
//Example from https://www.javascripttutorial.net/sample/dom/event/visible-viewport/index.html
function isInViewport(el) {
const rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
}
const box = document.querySelector('.questionDIV');
document.addEventListener('scroll', function () {
if (isInViewport(box) == true) {
document.querySelector('.questionDIV').classList.remove("overlay");
} else {
document.querySelector('.questionDIV').classList.add("overlay");
}
}, {
passive: true
});
主要问题在于您的“.QuestionDiv”选择器方法。
Document.QuerySelector只返回它找到的第一次出现。第一个之后的所有块永远不会被“isInviewPort”评估。
您需要获得所有问题容器的列表,并在滚动事件期间对它们进行迭代。像这样:
const box = document.querySelectorAll('.questionDIV');
document.addEventListener('scroll', function () {
for(let i = 0; i < box.length;i++){
console.log(box[i]);
console.log(isInViewport(box[i]));
if (isInViewport(box[i]) == true) {
box[i].classList.remove("overlay");
} else {
box[i].classList.add("overlay");
}
}
}, {
passive: true
});
之后,您只需要微调代码,以确保每次只有一个问题是活动的。在此处编辑了JSFIDDLE
问题内容: 是否可以使用该方法将div(或其他任何元素)聚焦? 我已经将tabIndex设置为div元素: 当我单击它时,我可以看到它被聚焦,但是,我试图动态地聚焦这样的元素: 或像这样: 但是触发事件时,组件不会获得焦点。我怎样才能做到这一点?我还有其他(非输入)元素可以使用吗? 编辑: 好吧,看来这实际上是有可能做到的:https : //jsfiddle.net/69z2wepo/54201
Focus聚焦社区是GoFrame社区项目,采用了简洁强大的GoFrame作为后端WEB框架, 由于前台系统需要SEO因此使用了GF自带template模板引擎,数据库用MySQL,前端使用jQuery/bootstrap框架。 一、源码地址 github:https://github.com/gogf/focus gitee:https://gitee.com/johng/focus 二、演示
问题内容: 我有输入要显示格式化的数字。通常,当它没有焦点时,应该显示一个格式化的字符串,例如’$ 50,000.00’。但是当它具有焦点时,它应该显示原始值,例如用于编辑的50000。 有内置功能吗?谢谢! 问题答案: 这是一条指令(),它可以执行您想要的操作。 请注意,只有元素的显示值才被格式化(模型值将始终为未格式化)。 这个想法是您为和事件注册侦听器,并根据元素的焦点状态更新显示值。 另请
问题内容: 对于我正在做的网站,我想加载一个div,然后隐藏另一个,然后有两个按钮可以使用JavaScript在div之间切换视图。 这是我当前的代码 替换div2的第二个功能不起作用,但第一个功能起作用。 问题答案: 如何显示或隐藏元素: 为了显示或隐藏元素,请操纵元素的style属性。在大多数情况下,您可能只想更改元素的属性: 或者,如果您仍然希望元素占用空间(例如,如果您要隐藏表格单元格),
对于我正在做的一个网站,我想加载一个div并隐藏另一个,然后有两个按钮可以使用JavaScript在div之间切换视图。 这是我当前的代码 null null 取代div2的第二个函数不起作用,但第一个是。
我正在用Java编程一个聊天客户机,在那里我希望有一个单独的JDialog用于所有打开的聊天。所以我决定使用一个JTabbedPane,其中一个选项卡代表一个单独的聊天。 我在每个选项卡中都放了一个JPanel,它只包含一个用于消息历史记录的JTextPane和一个用户输入消息的JTextArea。 为了更好的可用性,我实现了一个特性,当 打开新的ChatTab 用户在chattab之间进行更改(