Maison >interface Web >js tutoriel >Partager des exemples de mouvements multi-objets à l'aide de JS
Cet article présente principalement la méthode JS pour réaliser un mouvement multi-objets. Il analyse en détail les principes et les techniques de fonctionnement associées du javascript pour réaliser un mouvement multi-objets sous forme d'exemples. J'espère que cela pourra aider tout le monde.
Étapes de base
1 Obtenez les éléments à déplacer par plusieurs objets via getElementsByTagName
2. . Ensuite, la boucle for parcourt les éléments et ajoute des événements
3 Définissez la fonction startMove, qui nécessite deux paramètres, l'élément "en mouvement" actuel et la valeur cible target
Remarque : En mouvement multi-objets, tout ne peut pas être partagé
<script> window.onload = function(){ var liTags = document.getElementsByTagName('li'); // 第一步 for(var i=0;i<liTags.length;i++){ // 第二步 liTags[i].onmouseover = function () { startMove(this,400); } liTags[i].onmouseout = function () { startMove(this,200); } } } var timer = null; function startMove(obj,iTarget) { // 第三步,2个参数 clearInterval(timer); timer = setInterval(function () { var iSpeed = (iTarget - obj.offsetWidth)/10; iSpeed = iSpeed>0 ?Math.ceil(iSpeed):Math.floor(iSpeed);// 缓冲运动注意取整处理 if(obj.offsetWidth == iTarget){ clearInterval(timer); }else{ obj.style.width = obj.offsetWidth+iSpeed+'px'; } },30); } </script>
Problème :
Lorsque la vitesse d'entrée et de sortie est relativement rapide, il apparaîtra que certains Li ne peuvent pas revenir à leur état d'origine et sont bloqués au milieuC'est parce que tous les Li partagent une minuterie Lorsque la souris entre dans le premier Quand li, appelez startMove pour démarrer un chronomètre ; lorsque la souris supprime li, vous devez également démarrer un chronomètre pour ramener li à sa position d'origine. Lorsque li atteint la moitié du chemin, nous passons au second. li, et la minuterie sera effacée en premier. À ce moment-là, le premier li est resté bloqué à mi-chemin.
Résolvez ce problème :Laissez chaque li avoir son propre timer pour contrôler ses modifications et définissez chaque li pendant la boucle for. Un de vos propres timers
liTags[i].timer = null;// 给每个li都添加一个timer
Le timer précédent ici a été remplacé par
(le timer de l'objet actuel) ; il n'y a pas de problème ici ;obj.timer
Le code complet est le suivant :
<body> <ul> <li></li> <li></li> <li></li> <li></li> </ul> </body>
<style> ul{list-style: none;} ul li{ margin: 10px; width: 200px;height: 50px; background: lightblue; } </style>
<script> window.onload = function(){ var liTags = document.getElementsByTagName('li'); for(var i=0;i<liTags.length;i++){ liTags[i].timer = null;// 给每个li都添加一个timer liTags[i].onmouseover = function () { startMove(this,400); } liTags[i].onmouseout = function () { startMove(this,200); } } } function startMove(obj,iTarget) { clearInterval(obj.timer); obj.timer = setInterval(function () { var iSpeed = (iTarget - obj.offsetWidth)/10; iSpeed = iSpeed>0 ?Math.ceil(iSpeed):Math.floor(iSpeed); if(obj.offsetWidth == iTarget){ clearInterval(obj.timer); }else{ obj.style.width = obj.offsetWidth+iSpeed+'px'; } },30); } </script>
<script> window.onload = function () { var aImgs = document.getElementsByTagName('img'); for(var i=0;i<aImgs.length;i++){ aImgs[i].timer = null; aImgs[i].alpha = 100; // 把公用的alpha改成每个img对象都有的属性 aImgs[i].onmouseover = function () { startMove(this,30); } aImgs[i].onmouseout = function () { startMove(this,100); } } } // var alpha = 100; 这里alpha在多物体运动里 不能公用 function startMove(obj,iTarget) { clearInterval(obj.timer); var iSpeed = (iTarget - obj.alpha)/10; iSpeed = iSpeed>0 ? Math.ceil(iSpeed): Math.floor(iSpeed); obj.timer = setInterval(function(){ if(obj.alpha == iTarget){ clearInterval(obj.timer); }else{ obj.alpha += iSpeed; obj.style.opacity =obj.alpha/100; obj.style.filter = 'alpha(opacity:'+obj.alpha+')'; } },30); } </script>Analyse des méthodes d'implémentation de mouvement multi-objets JavaScript_compétences JavascriptExplication d'exemples de mouvement uniforme basé sur jsDeux méthodes JS pour réaliser le mouvement de trajectoire parabolique d'une petite balle
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!