Javascript 类更改时淡入过渡(JS)不起作用
我正在尝试使用基本JS和CSS对更改后的innerHTML to元素进行淡入效果 这是JS:Javascript 类更改时淡入过渡(JS)不起作用,javascript,css,css-animations,transition,fadein,Javascript,Css,Css Animations,Transition,Fadein,我正在尝试使用基本JS和CSS对更改后的innerHTML to元素进行淡入效果 这是JS: function PrintNote(taskIndex) { //print a note, index is given to let the function know which task to print from the array notesArea.innerHTML += "<div id='taskN" + taskIndex + "'><span
function PrintNote(taskIndex) {
//print a note, index is given to let the function know which task to print from the array
notesArea.innerHTML += "<div id='taskN" + taskIndex + "'><span trash='" + taskIndex + "' class='glyphicon glyphicon-remove-circle deleteBtn'></span><strong><span class='noteTitle'>Task #" + (taskIndex + 1) + "</span><p class='noteTXT'>" + tasksArray[taskIndex].text + "</p><span class='noteDate'>" + tasksArray[taskIndex].date + "</span></strong></div>"
//when done printing, get all the delete buttons into the deletesArray, give each the remove task function
noteDivsElement = document.querySelector("#taskN" + taskIndex);
noteDivsElement.className = 'fadeIn';
deletesArray = document.getElementsByClassName("glyphicon glyphicon-remove-circle deleteBtn");
for (var i = 0; i < deletesArray.length; i++) {
deletesArray[i].onclick = RemoveTask;
}
}
附言。
我必须使用基本的JS(没有JQuery之类的),因为这是我为FullStack课程做的一个项目,我们应该只使用我们学到的基础知识
知道为什么它不起作用吗?
谢谢。:) 浏览器可能正在一次绘制中批处理所有DOM指令。因此,所有div都会立即应用“fadeIn” 要强制“fadeIn”仅应用于下一个绘制周期,请使用 这将导致浏览器看到前状态(不透明度:0)和后状态(不透明度:1),因此过渡将开始 比如:
function PrintNote(taskIndex) {
//print a note, index is given to let the function know which task to print from the array
notesArea.innerHTML += "<div id='taskN" + taskIndex + "'><span trash='" + taskIndex + "' class='glyphicon glyphicon-remove-circle deleteBtn'></span><strong><span class='noteTitle'>Task #" + (taskIndex + 1) + "</span><p class='noteTXT'>" + tasksArray[taskIndex].text + "</p><span class='noteDate'>" + tasksArray[taskIndex].date + "</span></strong></div>"
//when done printing, get all the delete buttons into the deletesArray, give each the remove task function
var noteDivsElement = document.querySelector("#taskN" + taskIndex);
window.requestAnimationFrame(function(){
noteDivsElement.className = 'fadeIn';
});
var deletesArray = document.getElementsByClassName("glyphicon glyphicon-remove-circle deleteBtn");
for (var i = 0; i < deletesArray.length; i++) {
deletesArray[i].onclick = RemoveTask;
}
}
另一种ES6方法是使用适当的局部变量,即使用let
而不是var
,这样可以避免所讨论的所有问题。但并非所有浏览器都支持此功能:
function PrintNote(taskIndex) {
//print a note, index is given to let the function know which task to print from the array
notesArea.innerHTML += "<div id='taskN" + taskIndex + "'><span trash='" + taskIndex + "' class='glyphicon glyphicon-remove-circle deleteBtn'></span><strong><span class='noteTitle'>Task #" + (taskIndex + 1) + "</span><p class='noteTXT'>" + tasksArray[taskIndex].text + "</p><span class='noteDate'>" + tasksArray[taskIndex].date + "</span></strong></div>"
//when done printing, get all the delete buttons into the deletesArray, give each the remove task function
//NOTE THE 'let' here
let noteDivsElement = document.querySelector("#taskN" + taskIndex);
window.requestAnimationFrame(function(){
noteDivsElement.className = 'fadeIn';
});
var deletesArray = document.getElementsByClassName("glyphicon glyphicon-remove-circle deleteBtn");
for (var i = 0; i < deletesArray.length; i++) {
deletesArray[i].onclick = RemoveTask;
}
}
函数打印说明(任务索引){
//打印注释,索引用于让函数知道从数组中打印哪个任务
notesArea.innerHTML+=“任务”+(任务索引+1)+”“+tasksArray[taskIndex].text+”
“+tasksArray[taskIndex].date+“”
//打印完成后,将所有删除按钮放入deletesArray,为每个按钮提供删除任务功能
//注意这里的“let”
让noteDivisElement=document.querySelector(#taskN“+taskIndex);
window.requestAnimationFrame(函数(){
NoteDivisElement.className='fadeIn';
});
var deletesArray=document.getElementsByClassName(“glyphicon glyphicon remove circle deleteBtn”);
对于(var i=0;i
顺便说一句:作为JS初学者课程的一部分,不得不使用闭包和window.requestAnimationFrame对我来说并不重要,所以我可能把你推向了错误的方向。无论如何,了解闭包是了解javascript的一个非常重要的部分,所以我希望它仍然有帮助。祝你好运
1) 嘿,谢谢你的回答:)我会尝试一下,尽管我们在课堂上还没有学习window.requestAnimationFrame。我会告诉你它是如何运作的。所以,它运作起来了!动画效果很好。但是现在,当我在一个循环中打印阵列上的所有其他注释时,只显示最后一个注释。有什么想法吗<代码>函数printalnotes(){//为(var i=0;i
NoteDivisElement
的本地变量时,它也不起作用。我已经清楚地描述了这一点。但不确定为什么上面给出的两个选项对您不起作用
function PrintNote(taskIndex) {
//print a note, index is given to let the function know which task to print from the array
notesArea.innerHTML += "<div id='taskN" + taskIndex + "'><span trash='" + taskIndex + "' class='glyphicon glyphicon-remove-circle deleteBtn'></span><strong><span class='noteTitle'>Task #" + (taskIndex + 1) + "</span><p class='noteTXT'>" + tasksArray[taskIndex].text + "</p><span class='noteDate'>" + tasksArray[taskIndex].date + "</span></strong></div>"
//when done printing, get all the delete buttons into the deletesArray, give each the remove task function
var noteDivsElement = document.querySelector("#taskN" + taskIndex);
(function(el){
//'el' is part of closure and is a local variable only to this iteration
window.requestAnimationFrame(function(){
el.className = 'fadeIn';
});
}(noteDivsElement))
var deletesArray = document.getElementsByClassName("glyphicon glyphicon-remove-circle deleteBtn");
for (var i = 0; i < deletesArray.length; i++) {
deletesArray[i].onclick = RemoveTask;
}
}
function PrintNote(taskIndex) {
//print a note, index is given to let the function know which task to print from the array
notesArea.innerHTML += "<div id='taskN" + taskIndex + "'><span trash='" + taskIndex + "' class='glyphicon glyphicon-remove-circle deleteBtn'></span><strong><span class='noteTitle'>Task #" + (taskIndex + 1) + "</span><p class='noteTXT'>" + tasksArray[taskIndex].text + "</p><span class='noteDate'>" + tasksArray[taskIndex].date + "</span></strong></div>"
//when done printing, get all the delete buttons into the deletesArray, give each the remove task function
//NOTE THE 'let' here
let noteDivsElement = document.querySelector("#taskN" + taskIndex);
window.requestAnimationFrame(function(){
noteDivsElement.className = 'fadeIn';
});
var deletesArray = document.getElementsByClassName("glyphicon glyphicon-remove-circle deleteBtn");
for (var i = 0; i < deletesArray.length; i++) {
deletesArray[i].onclick = RemoveTask;
}
}