如何在document.getElementsByClassName中对类的特定选择器运行函数
how to run a function to a specific selector of a class within document.getElementsByClassName
当你点击一个特定的类时,我试图在javascript中创建一个淡出函数,但我很难让一个特定类淡出。我试图使用this关键字,但我想我用错了,因为它一直说它没有定义。
<div class="opaque">
<h3>Fade Heading</h3>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.</p>
</div>
<div class="opaque">
<h3>Fade Heading</h3>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.</p>
</div>
<div class="opaque">
<h3>Fade Heading</h3>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.</p>
</div>
var o =1;
var r = 0.1;
var a;
var counter;
var e;
function myFunction(e)
{
e = this.style.opacity = o;
console.log(this.style.opacity);
counter = setInterval(fadeO(e),5000);
}
function execute()
{
a = document.getElementsByClassName('opaque');
for( var i = 0; i< a.length; i++)
{
a[i].addEventListener('click',myFunction(e));
}
}//end execute
function fadeO(e)
{
this.a = document.getElementsByClassName('opaque');
if(e.style.opacity <=0)
{
clearInterval(counter);
}
else{
e.style.opacity = o ;
console.log(e.style.opacity);
o -=0.1;
}
}
window.onload = function()
{
execute();
}
这里有两个问题,在addEventListener
和setInterval()
中,您直接调用处理程序,而不是传递函数referennec。
var o = 1;
var r = 0.1;
var a;
var counter;
var e;
function myFunction(e) {
this.style.opacity = 1;
console.log(this.style.opacity);
counter = setInterval(fadeO.bind(this), 100);//again need to pass a function reference to `interval()` don't invoke the function by adding (), in this solution instead of passing the element reference as an argument we are passing it as the `this` reference by using Function.bind()
}
function execute() {
a = document.getElementsByClassName('opaque');
for (var i = 0; i < a.length; i++) {
a[i].addEventListener('click', myFunction);//pass the handler reference, don't invoke it by adding `()`
}
} //end execute
function fadeO() {
if (this.style.opacity <= 0) {
clearInterval(counter);
} else {
this.style.opacity = o;
console.log(this.style.opacity);
o -= 0.1;
}
}
window.onload = function() {
execute();
}
<div class="opaque">
<h3>Fade Heading</h3>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium
quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.</p>
</div>
<div class="opaque">
<h3>Fade Heading</h3>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium
quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.</p>
</div>
<div class="opaque">
<h3>Fade Heading</h3>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium
quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.</p>
</div>
注意:此解决方案将需要进一步更改以支持多次单击等
的e
是什么
for( var i = 0; i< a.length; i++)
{
a[i].addEventListener('click',myFunction(e));
}
尝试
for( var i = 0; i< a.length; i++)
{
a[i].addEventListener('click',myFunction, false);
}
请参见此处。This
的含义始终取决于函数的调用方式。就你而言。您的this if called right应该具有e
的值。检查此处此处
相关文章:
- 如何将jquery函数链接到vanilla选择器
- jQuery选择器不识别任何动态创建的HTML输入函数
- 函数在日期选择器中选择日期之前触发
- 原型中漂亮的代码,如何省略'不是函数'空结果选择器上的错误
- 为什么JQueryshow()函数只对带有选择器的一个(而不是所有)元素起作用
- 日期选择器更改事件抛出”;TypeError:字符串不是函数;
- 使用元素选择器向Object添加函数
- 用于多个from输入的JQuery日期选择器函数
- 为什么jQuery选择器函数与原生DOM方法相比如此缓慢
- Javascript数字选择器函数
- 如何向 Javascript 表添加一行,其中包含包含 jQuery 中的日期选择器函数的单元格
- 无法停止/删除/销毁日期计时器选择器函数 (jQuery)
- JsPlumb - 将自己的选择器函数添加到动态锚点
- 如何将颜色选择器函数集成到动态文本字段中
- 两个连续的java脚本日期选择器函数
- 日期表没有'如果我放了日期选择器函数,它就根本不起作用
- 按属性值的数组选择器函数
- Jquery选择器函数参数
- 如何在 Observable.bindCallback 方法中使用 RXJS 选择器函数
- jQuery日期选择器函数