如何在淡入淡出功能完成时创建回调函数?
How do I create a callback function for when the fading function is done?
我在 2.5 秒 (0.05x50),
内创建的 fadeOutEffect
函数中淡出 img2
现在问题来了;我想 console.log('fadeOut done')
正好在 img2
完成淡出 时,我想我应该为 [=14 创建一个 callback
函数=] 函数,或者也许当我调用这个函数时,给它一个最后的参数作为 callback
函数(?),这是我已经尝试过但没有成功的方法?我知道使用 jQuery 会很容易,但我想对这种方法使用纯 JavaScript。
我真的不知道我应该如何做到这一点,欢迎任何建议!
let _sliderBox = document.getElementsByClassName('fadeSlider')[0];
let img1 = new Image();
img1.src = 'https://via.placeholder.com/150/0000FF';
_sliderBox.appendChild(img1);
let img2 = new Image();
img2.src = 'https://via.placeholder.com/300/FF0000';
_sliderBox.appendChild(img2);
function fadeOutEffect(fadeTarget, interval) {
let fadeEffect = setInterval(function () {
if (!fadeTarget.style.opacity){
fadeTarget.style.opacity = 1;
}
if (fadeTarget.style.opacity > 0){
fadeTarget.style.opacity -= 0.05;
} else {
clearInterval(fadeEffect);
}
}, interval)
}
fadeOutEffect(document.querySelector( `.${_sliderBox.className} img:nth-child(2)`), 50 , function () {
console.log('fadeOut done');
});
.fadeSlider{
width: 300px;
height: 200px;
position: relative;
margin: auto;
box-shadow: 2px 2px 10px gray;
}
.fadeSlider img{
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
}
<div class="fadeSlider">
</div>
需要在fadeOutEffect
函数中传入回调参数,在clearInterval(fadeEffect)
之后调用回调。
let _sliderBox = document.getElementsByClassName('fadeSlider')[0];
let img1 = new Image();
img1.src = 'https://via.placeholder.com/150/0000FF';
_sliderBox.appendChild(img1);
let img2 = new Image();
img2.src = 'https://via.placeholder.com/300/FF0000';
_sliderBox.appendChild(img2);
// pass the callback as a parameter for fadeOutEffect
function fadeOutEffect(fadeTarget, interval, callback) {
let fadeEffect = setInterval(function () {
if (!fadeTarget.style.opacity){
fadeTarget.style.opacity = 1;
}
if (fadeTarget.style.opacity > 0){
fadeTarget.style.opacity -= 0.05;
} else {
clearInterval(fadeEffect);
callback() // call the callback here
}
}, interval)
}
fadeOutEffect(document.querySelector( `.${_sliderBox.className} img:nth-child(2)`), 50 , function () {
console.log('fadeOut done');
});
您可以为 callback
边界命名任何您认为更适合您的代码的名称。我把它命名为callback
是为了让你更容易看到我的修改。
我有2个例子给你。
我推荐示例 1 来学习 promises
/* example 1 */
function fadeOutEffect(fadeTarget, interval) {
return new Promise((resolve,reject)=>{
let fadeEffect = setInterval(function () {
if (!fadeTarget.style.opacity){
fadeTarget.style.opacity = 1;
}
if (fadeTarget.style.opacity > 0){
fadeTarget.style.opacity -= 0.05;
} else {
clearInterval(fadeEffect);
resolve();
}
}, interval)
})
}
fadeOutEffect(document.querySelector( `.${_sliderBox.className} img:nth-child(2)`), 50).then(()=>{
console.log('fadeOut done');
});
/* example 2 */
function fadeOutEffect(fadeTarget, interval,callback) { // add callback as parameter
let fadeEffect = setInterval(function () {
if (!fadeTarget.style.opacity){
fadeTarget.style.opacity = 1;
}
if (fadeTarget.style.opacity > 0){
fadeTarget.style.opacity -= 0.05;
} else {
clearInterval(fadeEffect);
callback() // run callback
}
}, interval)
}
fadeOutEffect(document.querySelector( `.${_sliderBox.className} img:nth-child(2)`), 50,()=>{
console.log('fadeOut done');
});
我在 2.5 秒 (0.05x50),
内创建的fadeOutEffect
函数中淡出 img2
现在问题来了;我想 console.log('fadeOut done')
正好在 img2
完成淡出 时,我想我应该为 [=14 创建一个 callback
函数=] 函数,或者也许当我调用这个函数时,给它一个最后的参数作为 callback
函数(?),这是我已经尝试过但没有成功的方法?我知道使用 jQuery 会很容易,但我想对这种方法使用纯 JavaScript。
我真的不知道我应该如何做到这一点,欢迎任何建议!
let _sliderBox = document.getElementsByClassName('fadeSlider')[0];
let img1 = new Image();
img1.src = 'https://via.placeholder.com/150/0000FF';
_sliderBox.appendChild(img1);
let img2 = new Image();
img2.src = 'https://via.placeholder.com/300/FF0000';
_sliderBox.appendChild(img2);
function fadeOutEffect(fadeTarget, interval) {
let fadeEffect = setInterval(function () {
if (!fadeTarget.style.opacity){
fadeTarget.style.opacity = 1;
}
if (fadeTarget.style.opacity > 0){
fadeTarget.style.opacity -= 0.05;
} else {
clearInterval(fadeEffect);
}
}, interval)
}
fadeOutEffect(document.querySelector( `.${_sliderBox.className} img:nth-child(2)`), 50 , function () {
console.log('fadeOut done');
});
.fadeSlider{
width: 300px;
height: 200px;
position: relative;
margin: auto;
box-shadow: 2px 2px 10px gray;
}
.fadeSlider img{
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
}
<div class="fadeSlider">
</div>
需要在fadeOutEffect
函数中传入回调参数,在clearInterval(fadeEffect)
之后调用回调。
let _sliderBox = document.getElementsByClassName('fadeSlider')[0];
let img1 = new Image();
img1.src = 'https://via.placeholder.com/150/0000FF';
_sliderBox.appendChild(img1);
let img2 = new Image();
img2.src = 'https://via.placeholder.com/300/FF0000';
_sliderBox.appendChild(img2);
// pass the callback as a parameter for fadeOutEffect
function fadeOutEffect(fadeTarget, interval, callback) {
let fadeEffect = setInterval(function () {
if (!fadeTarget.style.opacity){
fadeTarget.style.opacity = 1;
}
if (fadeTarget.style.opacity > 0){
fadeTarget.style.opacity -= 0.05;
} else {
clearInterval(fadeEffect);
callback() // call the callback here
}
}, interval)
}
fadeOutEffect(document.querySelector( `.${_sliderBox.className} img:nth-child(2)`), 50 , function () {
console.log('fadeOut done');
});
您可以为 callback
边界命名任何您认为更适合您的代码的名称。我把它命名为callback
是为了让你更容易看到我的修改。
我有2个例子给你。 我推荐示例 1 来学习 promises
/* example 1 */
function fadeOutEffect(fadeTarget, interval) {
return new Promise((resolve,reject)=>{
let fadeEffect = setInterval(function () {
if (!fadeTarget.style.opacity){
fadeTarget.style.opacity = 1;
}
if (fadeTarget.style.opacity > 0){
fadeTarget.style.opacity -= 0.05;
} else {
clearInterval(fadeEffect);
resolve();
}
}, interval)
})
}
fadeOutEffect(document.querySelector( `.${_sliderBox.className} img:nth-child(2)`), 50).then(()=>{
console.log('fadeOut done');
});
/* example 2 */
function fadeOutEffect(fadeTarget, interval,callback) { // add callback as parameter
let fadeEffect = setInterval(function () {
if (!fadeTarget.style.opacity){
fadeTarget.style.opacity = 1;
}
if (fadeTarget.style.opacity > 0){
fadeTarget.style.opacity -= 0.05;
} else {
clearInterval(fadeEffect);
callback() // run callback
}
}, interval)
}
fadeOutEffect(document.querySelector( `.${_sliderBox.className} img:nth-child(2)`), 50,()=>{
console.log('fadeOut done');
});