为什么我不能在 IE 11 或 Edge 中对数组元素调用 jQuery 方法
Why can't I call jQuery methods on array elements in IE 11 or Edge
我正在尝试使用 jQuery.animate 为一组 <div>
元素制作动画。但是当我迭代一个数组时,动画方法没有在元素上定义。
这当然适用于 chrome。
数组有一个有效的动画方法,但每个元素都没有。
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" title="Standard" href="/css/styles.css" type="text/css" media="screen" />
<script src="http://code.jquery.com/jquery-3.2.1.js"></script>
<script>
var confettiPlayers = [];
function makeItRain() {
var confetti = $(".snow");//document.querySelectorAll('.snow');
for (var i = 0, len = confetti.length; i < len; ++i) {
var snowball = confetti[i];
snowball.innerHTML = '<div class="rotate"><div class="askew"></div></div>';
var scale = Math.random() * .8 + .2;
// The next line throws exception on IE11/Edge
// SCRIPT438: Object doesn't support property or method 'animate'
var player = snowball.animate([
{ transform: 'translate3d(' + (i / len * 100) + 'vw,0,0) scale(' + scale + ')', opacity: scale },
{ transform: 'translate3d(' + (i / len * 100 + 10) + 'vw,100vh,0) scale(' + scale + ')', opacity: 1 }
], {
duration: Math.random() * 3000 + 3000,
iterations: Infinity,
delay: -(Math.random() * 5000)
});
confettiPlayers.push(player);
}
}
$(document).ready(function () {
makeItRain();
});
</script>
</head>
<body>
<div class="snowfall">
<div class="snow"></div>
<div class="snow"></div>
<div class="snow"></div>
<div class="snow"></div>
<div class="snow"></div>
<div class="snow"></div>
</div>
</body>
</html>
我已经在单个元素上测试了 animate() 并且它们工作正常。
在你的代码中 var snowball = confetti[i];
:
snowball
是一个 HTMLElement
而不是 jQuery
对象。 IE 不支持 HTMLElement
方法 HTMLElement#animate
:https://developer.mozilla.org/en-US/docs/Web/API/Element/animate
您需要使用 var snowball = $(confetti[i]);
以便 snowbal 成为 jQuery
对象而不是 HTMLElement
我正在尝试使用 jQuery.animate 为一组 <div>
元素制作动画。但是当我迭代一个数组时,动画方法没有在元素上定义。
这当然适用于 chrome。
数组有一个有效的动画方法,但每个元素都没有。
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" title="Standard" href="/css/styles.css" type="text/css" media="screen" />
<script src="http://code.jquery.com/jquery-3.2.1.js"></script>
<script>
var confettiPlayers = [];
function makeItRain() {
var confetti = $(".snow");//document.querySelectorAll('.snow');
for (var i = 0, len = confetti.length; i < len; ++i) {
var snowball = confetti[i];
snowball.innerHTML = '<div class="rotate"><div class="askew"></div></div>';
var scale = Math.random() * .8 + .2;
// The next line throws exception on IE11/Edge
// SCRIPT438: Object doesn't support property or method 'animate'
var player = snowball.animate([
{ transform: 'translate3d(' + (i / len * 100) + 'vw,0,0) scale(' + scale + ')', opacity: scale },
{ transform: 'translate3d(' + (i / len * 100 + 10) + 'vw,100vh,0) scale(' + scale + ')', opacity: 1 }
], {
duration: Math.random() * 3000 + 3000,
iterations: Infinity,
delay: -(Math.random() * 5000)
});
confettiPlayers.push(player);
}
}
$(document).ready(function () {
makeItRain();
});
</script>
</head>
<body>
<div class="snowfall">
<div class="snow"></div>
<div class="snow"></div>
<div class="snow"></div>
<div class="snow"></div>
<div class="snow"></div>
<div class="snow"></div>
</div>
</body>
</html>
我已经在单个元素上测试了 animate() 并且它们工作正常。
在你的代码中 var snowball = confetti[i];
:
snowball
是一个 HTMLElement
而不是 jQuery
对象。 IE 不支持 HTMLElement
方法 HTMLElement#animate
:https://developer.mozilla.org/en-US/docs/Web/API/Element/animate
您需要使用 var snowball = $(confetti[i]);
以便 snowbal 成为 jQuery
对象而不是 HTMLElement