Maison > interface Web > js tutoriel > Analyse approfondie de JavaScript et du mouvement de JS

Analyse approfondie de JavaScript et du mouvement de JS

php中世界最好的语言
Libérer: 2018-03-13 13:38:58
original
1902 Les gens l'ont consulté

Cette fois, je vais vous proposer un exercice approfondi de JS en utilisant JavaScript Quelles sont les précautions pour utiliser JS en JavaScript Voici des cas pratiques. .

Bases du mouvement JS

Cadre de mouvement

Lors du démarrage d'un mouvement, fermez la minuterie existante

Séparez le mouvement et arrêtez (si/sinon)

1. Mouvement uniforme

nbsp;HTML>
    <meta>
    <title>01-运动基础</title>
    <style>
        #div1 {width:200px; height:200px; background:red; position:absolute; top:50px; left:0px;}    </style>
    <script>
        //定时器
        var timer=null;        function startMove()        {            var oDiv=document.getElementById(&#39;div1&#39;);            //为了保证只有一个定时器工作,把之前的定时器全关了
            clearInterval(timer);
            timer=setInterval(function (){                var speed=1;                if(oDiv.offsetLeft>=300)
                {
                    clearInterval(timer);
                }                else
                {
                    oDiv.style.left=oDiv.offsetLeft+speed+&#39;px&#39;;
                }
            }, 30);
        }    </script><input><div></div>
Copier après la connexion

Analyse approfondie de JavaScript et du mouvement de JS

<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><style>#div1 {width:150px; height:200px; background:green; position:absolute; left:-150px;}#div1 span {position:absolute; width:20px; height:60px; line-height:20px; background:blue; right:-20px; top:70px;}</style><script>window.onload=function (){    var oDiv=document.getElementById(&#39;div1&#39;);
    
    oDiv.onmouseover=function ()    {
        startMove(0);
    };
    oDiv.onmouseout=function ()    {
        startMove(-150);
    };
};var timer=null;function startMove(iTarget){    var oDiv=document.getElementById(&#39;div1&#39;);
    
    clearInterval(timer);
    timer=setInterval(function (){        //先初始化速度
        var speed=0;        //开始位置 > 终点位置:比方 起点:350 终点 50 要想到50这个位置,速度得为:-10; 
        //oDiv.offsetLeft : 起点位置
        //iTarget终点位置
        if(oDiv.offsetLeft>iTarget)
        {
            speed=-10;
        }        else
        {
            speed=10;
        }        //这个函数存在一个漏洞,如果oDiv.offsetLef 刚好t >=iTarget 定时器不会停止
        if(oDiv.offsetLeft==iTarget)
        {
            clearInterval(timer);
        }        else
        {
            oDiv.style.left=oDiv.offsetLeft+speed+&#39;px&#39;;
        }
    }, 30);
}</script></head><body><div id="div1">
    <span>分享到</span></div></body></html>
Copier après la connexion

Analyse approfondie de JavaScript et du mouvement de JS

3. 🎜>

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>03-淡入淡出</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: red;
            opacity:0.3; //兼容chrome和ff
            filtr:alpha(opacity:30);//兼容低版本的IE
        }    </style>
    <script>
        window.onload = function () {            var oDiv = document.getElementsByTagName(&#39;div&#39;)[0];
            oDiv.onmouseover = function () {
                changeAlpha(100);
            };
            oDiv.onmouseout = function () {
                changeAlpha(30);
            };            var timer = null;            var alpha = 30;            function changeAlpha(isTarget) {
                clearInterval(timer);                var speed = 0;
                timer = setInterval(function () {                    //注意这个速度判断要写在定时器里面
                    if (alpha < isTarget){
                        speed = 10;
                    }else {
                        speed = -10;
                    }                    if (alpha == isTarget){
                        clearInterval(timer);
                    }else {
                        alpha += speed;
                        oDiv.style.opacity = alpha/100;
                        oDiv.style.filter = &#39;alpha(opacity:&#39;+alpha+&#39;)&#39;;
                    }
                },30);
            }
        }    </script></head><body><div></div></body></html>
Copier après la connexion

3. Le mouvement tampon Analyse approfondie de JavaScript et du mouvement de JS

ralentit progressivement et finit par s'arrêter

Plus la distance est grande, plus la vitesse est grande

La vitesse est déterminé par la distance

Vitesse = (valeur cible - valeur actuelle) / facteur d'échelle

Exemple : menu tampon

Bug : arrondi de vitesse, les décimales le seront causer des problèmes !!!
Math.ceil():向上取整 Math.ceil(3.41) 结果是4 ,Math.ceil(-9.8) 结果是 -9; Math.floor():向下取整 Math.floor(-0.9) 结果是 -1;
Copier après la connexion


<html><head>    <meta charset="utf-8">    <title>无标题文档</title>    <style>        *{            padding: 0;            margin: 0;        }        #div1 {width:100px; height:100px; background:red; position:absolute; left:0; top:50px;}        #div2 {width:1px; height:300px; position:absolute; left:300px; top:0; background:black;}    </style>    <script>        function startMove()        {            var oDiv=document.getElementById(&#39;div1&#39;);            setInterval(function (){                var speed=(300-oDiv.offsetLeft)/10;                //缓冲运动一定要取整,否则会出事的!!!!                //Math.ceil():向上取整 Math.ceil(3.41) 结果是4 ,Math.ceil(-9.8) 结果是 -9;                //Math.floor():向下取整 Math.floor(-0.9) 结果是 -1;                //speed=Math.floor(speed);                //速度大于0,向上取整,速度小于0,向下取整;                speed=speed>0?Math.ceil(speed):Math.floor(speed);                //速度不能为小数:速度里面有小数,导致oDiv.style.left的值带有小数,而oDiv.style.left会自动取整,导致他把小数抹掉了,导致误差!!!                //故把速度向上取整,来避免此误差                oDiv.style.left=oDiv.offsetLeft+speed+&#39;px&#39;;                document.title=oDiv.offsetLeft+&#39;,&#39;+speed;            }, 30);        }    </script></head><body><input type="button" value="开始运动" onclick="startMove()" /><div id="div1"></div><div id="div2"></div></body></html>
Copier après la connexion

Analyse approfondie de JavaScript et du mouvement de JSBuffering Movement 1 (il y a des problèmes de compatibilité sur le navigateur Chrome)

Barre latérale de mise en mémoire tampon qui suit le défilement des pages

Problème potentiel : lorsque la valeur cible n'est pas un entier, une gigue se produira. Il suffit de la convertir en un entier ! Il peut y avoir une erreur de 0,5 pixels, qui peut être ignorée ! boîte flottante à droite

Comprenez d'abord quelques connaissances de base

Obtenez la distance de défilement de la barre de défilement du navigateur

Lors de la conception d'une page, la position du calque fixe peut souvent être. utilisé, ce qui nécessite d'obtenir les coordonnées de certains objets HTML. Pour définir les coordonnées du calque cible de manière plus flexible, des attributs tels que document.body.scrollTop peuvent être utilisés ici, mais cet attribut n'est pas utilisé dans les pages Web standard xhtml ou, plus simplement. , pages avec les balises Le résultat obtenu est 0. Si vous n'avez pas besoin de cette balise, tout est normal Alors comment obtenir les coordonnées du corps dans la page xhtml ? way - utilisez document.documentElement pour remplacer document.body. Vous pouvez écrire

comme ceci :

Obtenez la distance de défilement de la barre de défilement du navigateur

var top = document.documentElement.scrollTop || body.scrollTop;

En JavaScript, || est une bonne chose, en plus d'être utilisé dans if et d'autres
jugements conditionnels
peuvent également être utilisés pour l'affectation de variables. Alors l’exemple ci-dessus est équivalent à l’exemple suivant.
Exemple : var top = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
Écrire comme ceci peut obtenir une bonne compatibilité.
Au contraire, si aucune déclaration n'est faite, document.documentElement.scrollTop sera affiché à 0.


Arrêter à vitesse constante
document.body.clientWidth ==> BODY对象宽度document.body.clientHeight ==> BODY对象高度document.documentElement.clientWidth ==> 可见区域宽度document.documentElement.clientHeight ==> 可见区域高度
<html><head><meta charset="utf-8"><title>右侧悬浮窗</title><style>#div1 {width:100px; height:150px; background:red; position:absolute; right:0; bottom:0;}</style><script>window.onscroll=function (){    var oDiv=document.getElementById(&#39;div1&#39;);    var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;        //oDiv.style.top=document.documentElement.clientHeight-oDiv.offsetHeight+scrollTop+&#39;px&#39;;    startMove(document.documentElement.clientHeight-oDiv.offsetHeight+scrollTop);};var timer=null;function startMove(iTarget){    var oDiv=document.getElementById(&#39;div1&#39;);        clearInterval(timer);    timer=setInterval(function (){        var speed=(iTarget-oDiv.offsetTop)/4;        speed=speed>0?Math.ceil(speed):Math.floor(speed);                if(oDiv.offsetTop==iTarget)        {            clearInterval(timer);        }        else        {            oDiv.style.top=oDiv.offsetTop+speed+&#39;px&#39;;        }    }, 30);}</script></head><body style="height:2000px;"><div id="div1"></div></body></html>
Copier après la connexion

//Valeur absolue, Analyse approfondie de JavaScript et du mouvement de JSMath.abs()

Par exemple : (Math .abs(- Les résultats de 6)) et (Math.abs(6)) sont tous deux 6, ce qui signifie que les valeurs sont modifiées pour n'avoir aucun signe positif ou négatif, et elles sont toutes positives.



Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
<html><head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <style>
        #div1 {width:100px; height:100px; background:red; position:absolute; left:600px; top:50px;}        #div2 {width:1px; height:300px; position:absolute; left:300px; top:0; background:black;}        #div3 {width:1px; height:300px; position:absolute; left:100px; top:0; background:black;}    </style>
    <script>
        var timer=null;        function startMove(iTarget)        {            var oDiv=document.getElementById(&#39;div1&#39;);
            clearInterval(timer);
            timer=setInterval(function (){                var speed=0;                if(oDiv.offsetLeft<iTarget)
                {
                    speed=10;
                }                else
                {
                    speed=-10;
                }                //目标和物体之间的距离的绝对值小于等于速度,就算他达到目标了.
                if(Math.abs(iTarget-oDiv.offsetLeft)<=Math.abs(speed))
                {
                    clearInterval(timer);                    //目标和物体之间的有一小小的距离,计算误差导致的.
                    //让left直接等于目标点
                    oDiv.style.left=iTarget+&#39;px&#39;;
                }                else
                {
                    oDiv.style.left=oDiv.offsetLeft+speed+&#39;px&#39;;
                }
            }, 30);
        }    </script></head><body><input type="button" value="到100" onclick="startMove(100)" /><input type="button" value="到300" onclick="startMove(300)" /><div id="div1"></div><div id="div2"></div><div id="div3"></div></body></html>
Copier après la connexion

Lecture recommandée : Analyse approfondie de JavaScript et du mouvement de JS

Application de base approfondie de JavaScript

8 connaissances de base de JS auxquelles il faut prêter attention à

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal