亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

淺談Javascript中勻速運動的停止條件

2019-11-20 13:39:33
字體:
來源:轉載
供稿:網友

我們先來看下之前的勻速運動的代碼,修改了速度speed后會出現怎么樣的一個bug。這里加了兩個標桿用于測試

復制代碼 代碼如下:

<style type="text/css">
            #div1 {
                width: 100px;
                height: 100px;
                position: absolute;
                background: red;
                top: 50px;
                left: 600px;
            }
            #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 type="text/javascript">
            var time = null;
            function startMove(iTarget) {
                var oDiv = document.getElementById("div1");
                clearInterval(time);
                time = setInterval(function() {
                    var speed = 0;
                    if (oDiv.offsetLeft < iTarget) {
                        speed = 7;
                    } else {
                        speed = -7;
                    }
                    // 其實這種情況是有問題的
                    oDiv.style.left = oDiv.offsetLeft + speed + 'px';
                   
                }, 30)
            }
        </script>
    </head>
    <body>
        <input type="button" id="btn" value="到100" onclick="startMove(100)" />
        <input type="button" id="btn" value="到300" onclick="startMove(300)" />
        <div id="div1">
        </div>
        <div id="div2">
        </div>
        <div id="div3">
        </div>
    </body>

其實這樣的代碼如果把速度改成7這種奇數,而到達目標點卻是一個整數,這樣就會出現未能達目標點或超過目標點來回抖動的bug

那為什么會出現這種情況呢 ?

實際上來說他到達目標點的時候無法精確到目標點,若目標點是100,每次走7個,這個時候他要么就是過了目標點,要么就是沒過。

永遠到不了目標點。其實幫之前的緩沖有點像。

那么到底怎么算才是到達了目標點呢?

舉個例子 : 你打車到某個地方,司機肯定是到哪里差不多離個10米20米就停下來了,就算到了。不可能要求汽車貼到那個地方停下來吧。

所以說呢,其實來講程序也是一樣的,我們只要物體和目標點之間的距離近到一定的程度,就不需要再近了,就認為到了。

我們看下修改后的代碼:

復制代碼 代碼如下:

<script type="text/javascript">
            var time = null;

            function startMove(iTarget) {
                var oDiv = document.getElementById("div1");
                clearInterval(time);
                time = setInterval(function() {
                    var speed = 0;
                    if (oDiv.offsetLeft < iTarget) {
                        speed = 7;
                    } else {
                        speed = -7;
                    }
                    if (Math.abs(iTarget - oDiv.offsetLeft) <= 7) {
                        clearInterval(time);
                        oDiv.style.left=iTarget+'px';
                    } else {
                        oDiv.style.left = oDiv.offsetLeft + speed + 'px';
                    }
                   
                }, 30)
            }
        </script>

解釋一下: 這里為什么要用 Math.abs 取絕對值呢?

理由很簡單,因為速度可能是正的可能是負的。

現在我們讓目標和物體之間的距離只要小于等7, 那就算到了。為什么是7呢? 因為他下一次的運動都不足7個了。這個時候我們就算他到了目標點了。

那現在問題又來了, 這樣寫 他并沒有精確的停在目標點的位置。所以我們加了一句簡單的話,直接讓left 等于目標點。oDiv.style.left=iTarget+'px';

實際上最后一次走的不足7個,但是大家都知道程序這個運行的太快了,人眼是看不出來的。熱烈的笑臉

這個時候就沒有問題了。眨眼

這個就是勻速運動的停止條件。 那有朋友問,為什么緩沖運動沒有這么麻煩呢?

因為他的速度是變的,越來越小,直到最后他甚至就到達1了,一步一步往前肯定不會出現這樣的問題。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲护士老师的毛茸茸最新章节| 国产精品18久久久久久麻辣| 亚洲天堂av综合网| 久久99久久99精品中文字幕| 国产精品欧美一区二区| 欧美日在线观看| 中文字幕免费精品一区| 国产91成人在在线播放| 欧美日韩爱爱视频| 久久av资源网站| 欧美自拍视频在线观看| 久久精品在线视频| 日韩高清电影好看的电视剧电影| 亚洲国产精品人久久电影| 国产成人福利视频| 亚洲精品中文字幕av| 97视频在线观看免费| 亚洲国产精品久久久久秋霞蜜臀| 欧美一级bbbbb性bbbb喷潮片| 中文字幕av日韩| 亚洲精品一区二区三区不| 亚洲天堂影视av| 成人免费视频a| 久久久亚洲天堂| 欧美巨猛xxxx猛交黑人97人| 国产精品女主播| 亚洲精品影视在线观看| 亚洲精品suv精品一区二区| 热久久99这里有精品| 精品国产户外野外| 黄色成人在线播放| 久久久久久亚洲精品中文字幕| 91精品国产综合久久香蕉的用户体验| 国产欧美日韩中文字幕| 日韩av在线精品| 成人午夜在线视频一区| 日韩电影免费观看在线| 国产精品久久久久久五月尺| 国产精品久久久久久av下载红粉| 日韩精品中文字幕久久臀| 国产精品久久久久久亚洲调教| 亚洲第一级黄色片| 在线播放国产一区中文字幕剧情欧美| 日韩av在线网址| 91精品视频在线播放| 97色在线视频观看| 91久热免费在线视频| 一区二区三区www| 国产精品三级久久久久久电影| 国产日韩欧美在线观看| 91久久精品美女高潮| 亚洲片国产一区一级在线观看| 日韩视频精品在线| 国产成人一区二区在线| 中文在线资源观看视频网站免费不卡| 91午夜理伦私人影院| 国产美女久久精品香蕉69| 国产精品免费久久久久影院| 日韩成人av在线| 亚洲娇小xxxx欧美娇小| 久久国产精品免费视频| 亚洲自拍偷拍视频| 91爱爱小视频k| 欧美高清视频一区二区| 国产在线观看精品| 清纯唯美亚洲综合| 国产精品丝袜视频| 亚洲一区二区三区四区在线播放| 午夜精品在线观看| 3344国产精品免费看| 国产精品久久久久久久久久小说| 欧洲成人免费视频| 国产成人精品亚洲精品| 美日韩精品视频免费看| 国产精品久久久久91| 欧美在线视频网| 91视频国产精品| 欧美成人久久久| 成人福利在线视频| 亚洲一区二区三区视频| 中文字幕亚洲精品| 日韩成人av在线| 不卡伊人av在线播放| 青草热久免费精品视频| 欧美成人国产va精品日本一级| 日韩av在线免费看| 欧美视频在线免费| 亚洲欧美另类中文字幕| 久久天堂电影网| 欧美性猛交99久久久久99按摩| 中文字幕在线看视频国产欧美在线看完整| 亚洲一区制服诱惑| 97国产精品免费视频| 欧美国产精品日韩| 中文字幕欧美日韩va免费视频| 91在线观看免费| 一区二区欧美久久| 国产精品久久99久久| 日韩视频永久免费观看| 亚洲美女激情视频| 日本在线精品视频| 亚洲欧美福利视频| 91久久国产综合久久91精品网站| 国产一区二区三区欧美| 亚洲日韩欧美视频| 国内偷自视频区视频综合| 亚洲自拍偷拍视频| 亚洲精品视频免费在线观看| 欧美激情va永久在线播放| 亚洲精品一区二区久| 一区二区三欧美| 成人午夜小视频| 欧美超级免费视 在线| 51久久精品夜色国产麻豆| 久久精品91久久香蕉加勒比| 91在线高清视频| 亚洲精品国产成人| 久久久久国产精品www| 98精品国产自产在线观看| 久久久国产精品一区| 中文字幕一区二区三区电影| 91大神福利视频在线| 欧美一级黄色网| 亚洲aⅴ日韩av电影在线观看| 欧美性猛交xxxx富婆弯腰| 久久久久久久999精品视频| 日韩欧美在线字幕| 国内自拍欧美激情| 国产精品久久久久久久久久东京| 日本老师69xxx| 欧美xxxx做受欧美.88| 亚洲精品aⅴ中文字幕乱码| 亚洲www视频| 欧美肥臀大乳一区二区免费视频| 亚洲一区二区在线| 国产一区二区三区在线免费观看| 在线性视频日韩欧美| 日韩亚洲国产中文字幕| 啪一啪鲁一鲁2019在线视频| 欧美激情亚洲国产| 欧美综合在线第二页| 亚洲aaa激情| 欧美亚洲另类视频| 国产成人高清激情视频在线观看| 国产国产精品人在线视| 色99之美女主播在线视频| 国产精品永久免费| 久久99精品久久久久久青青91| 中文字幕日韩av电影| 国产日韩精品在线播放| 亚洲精品中文字| 一个人看的www久久| 日韩av中文字幕在线| 亚洲人成电影网站色| 爽爽爽爽爽爽爽成人免费观看| 国产视频精品xxxx| 亚洲精品一区二区三区不| 日韩欧美成人免费视频| 成人免费网视频| 亚洲一区www| 最新日韩中文字幕| 成人av电影天堂| 久久久欧美精品| 色偷偷av亚洲男人的天堂|