<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        基于js勻速運動的實例講解

        來源:懂視網 責編:小OO 時間:2020-11-27 20:05:57
        文檔

        基于js勻速運動的實例講解

        javascript中,如何讓一個元素(比如p)運動起來呢。設置基本的樣式,一定要讓p有定位( 當然用margin的變化也可以讓元素產生運動效果 )。<;style>;p { width: 100px;height: 100px;background: red;position: absolute;left: 0px;}<;/style>;。基本的結構。<;input type=";button";value=";動起來";/>;<;p id=";box";>;<;/p>;。
        推薦度:
        導讀javascript中,如何讓一個元素(比如p)運動起來呢。設置基本的樣式,一定要讓p有定位( 當然用margin的變化也可以讓元素產生運動效果 )。<;style>;p { width: 100px;height: 100px;background: red;position: absolute;left: 0px;}<;/style>;。基本的結構。<;input type=";button";value=";動起來";/>;<;p id=";box";>;<;/p>;。
        本文主要為大家帶來一篇基于勻速運動的實例講解(側邊欄,淡入淡出)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望能幫助到大家。

        javascript中,如何讓一個元素(比如p)運動起來呢?

        設置基本的樣式,一定要讓p有定位( 當然用margin的變化也可以讓元素產生運動效果 );

        <style>
         p {
         width: 100px;
         height: 100px;
         background: red;
         position: absolute;
         left: 0px;
         }
        </style>

        基本的結構:

         <input type="button" value="動起來"/>
         <p id="box"></p>

        當我們點擊,這個按鈕的時候,要讓p運動起來,其實就是讓p的left值持續變化,那么p就會產生運動效果,我們先讓left改變,再讓他持續改變

        window.onload = function(){
         var oBtn = document.querySelector( "input" ),
         oBox = document.querySelector( '#box' );
         oBtn.onclick = function(){
         oBox.style.left = oBox.offsetLeft + 10 + 'px';
         }
         }

        那么每當我點擊按鈕的時候,p的left值就會在原來的基礎上加上10px。這里也可以用獲取非行間樣式的方法獲取left的值再加上10px,也可以達到效果

        function css(obj, attr) {
         if (obj.currentStyle) {
         return obj.currentStyle[attr];
         } else {
         return getComputedStyle(obj, false)[attr];
         }
        }
        window.onload = function () {
         var oBtn = document.querySelector("input"),
         oBox = document.querySelector('#box');
         oBtn.onclick = function () {
         oBox.style.left = parseInt( css( oBox, 'left' ) ) + 10 + 'px';
         }
        }

        offsetLeft與獲取非行間樣式left的值 有什么區別呢?

        offsetLeft沒有px單位,而left是有px單位的

        oBtn.onclick = function () {
         // alert( css( oBox, 'left' ) ); //0px
         alert( oBox.offsetLeft ); //0
         }

        現在p是點擊一下動一下,我們讓他持續動起來,怎么做? 加上定時器

         oBtn.onclick = function () {
         setInterval( function(){
         oBox.style.left = oBox.offsetLeft + 10 + 'px';
         }, 1000 / 16 );
         }

        當我們點擊按鈕時候,p就會不停的向左運動,怎么讓他停下來呢?停下來,肯定是需要條件的,比如,我們讓他跑到500px的時候停下來

        var timer = null;
         oBtn.onclick = function () {
         timer = setInterval( function(){
         if ( oBox.offsetLeft == 500 ) {
         clearInterval( timer );
         }else {
         oBox.style.left = oBox.offsetLeft + 10 + 'px';
         }
         }, 1000 / 16 );
         }

        這樣,我們就可以讓p停在500px的位置,這里如果我們把步長10 改成 7或者8,你會發現停不下來了,為什么呢?因為會跳過500px這個判斷條件

        0, 7, 14, 21 .... 280, 287, 294, 301, ... 490, 497, 504. 從497變成504跳過了500px,所以p停不下來,那怎么辦呢?修改下判斷條件就可以了.

        oBtn.onclick = function () {
         timer = setInterval( function(){
         if ( oBox.offsetLeft >= 500 ) {
         oBox.style.left = 500 + 'px';
         clearInterval( timer );
         }else {
         oBox.style.left = oBox.offsetLeft + 7 + 'px';
         }
         }, 1000 / 16 );
        }

        把條件變成>=500 清除定時器, 同時還要加上這句代碼oBox.style.left = 500 + 'px',讓他強制被停在500px, 否則p就不會停在500px, 而是504px了,還有一個問題,如果在p運動的過程中,你不停的點擊按鈕,會發現, p開始加速運動了,而不是每次加10px了,這又是為什么呢?這是因為,每次點擊一下按鈕,就開了一個定時器,每次點擊一個按鈕就開了一個定時器,這樣就會有多個定時器疊加,那么速度也會產生疊加,所以p開始加速了,那么我們要讓他保持10px的速度,意思就是不要讓定時器疊加,更通俗點說就是確保一個定時器在開著。應該怎么做呢?

        oBtn.onclick = function () {
         clearInterval( timer );
         timer = setInterval( function(){
         if ( oBox.offsetLeft >= 500 ) {
         oBox.style.left = 500 + 'px';
         clearInterval( timer );
         }else {
         oBox.style.left = oBox.offsetLeft + 7 + 'px';
         }
         }, 1000 / 16 );
        }

        只需要在每次點擊按鈕的時候,清除之前的定時器就可以了,這樣就能確保始終一個定時器開著,至此,一個最基本的勻速運動結構就完成了,那么我們可以把他封裝成函數

         function animate(obj, target, speed) {
         clearInterval(timer);
         timer = setInterval(function () {
         if (obj.offsetLeft == target) {
         clearInterval(timer);
         } else {
         obj.style.left = obj.offsetLeft + speed + 'px';
         }
         }, 30);
         }

        有了這個函數之后,我們來小小的應用一下。

        http://www.jiathis.com/getcode

        打開這個網站,你注意看他右邊有個側欄式效果(分享到),這種特效在網站上很普遍

        <!DOCTYPE html>
        <html>
        <head lang="en">
         <meta charset="UTF-8">
         <title>側邊欄 - by ghostwu</title>
         <style>
         #box {
         width: 150px;
         height: 300px;
         background: red;
         position: absolute;
         left: -150px;
         top: 50px;
         }
        
         #box p {
         width: 28px;
         height: 100px;
         position: absolute;
         right: -28px;
         top: 100px;
         background: green;
         }
         </style>
         <script>
         window.onload = function () {
         var timer = null;
         var oBox = document.getElementById("box");
         oBox.onmouseover = function () {
         animate(this, 0, 10);
         }
         oBox.onmouseout = function () {
         animate(this, -150, -10);
         }
         function animate(obj, target, speed) {
         clearInterval(timer);
         timer = setInterval(function () {
         if (obj.offsetLeft == target) {
         clearInterval(timer);
         } else {
         obj.style.left = obj.offsetLeft + speed + 'px';
         }
         }, 30);
         }
         }
         </script>
        </head>
        <body>
        <p id="box">
         <p>分享到</p>
        </p>
        </body>
        </html>

        再來一個淡入淡出的效果:

        當鼠標移上去之后,透明度變成1

        <!doctype html>
        <html lang="en">
        <head>
         <meta charset="UTF-8">
         <title>淡入淡出 - by ghostwu</title>
         <style>
         img {
         border: none;
         opacity: 0.3;
         filter: alpha(opacity:30);
         }
         </style>
         <script>
         window.onload = function () {
         var timer = null;
         var oImg = document.getElementById("img");
         oImg.onmouseover = function(){
         animate( this, 100, 10 );
         }
         oImg.onmouseout = function(){
         animate( this, 30, -10 );
         }
         //alpha=30 --> 100
         function animate(obj, target, speed) {
         clearInterval(timer);
         var cur = 0;
         timer = setInterval(function () {
         cur = css( obj, 'opacity') * 100;
         if( cur == target ){
         clearInterval( timer );
         }else {
         cur += speed;
         obj.style.opacity = cur / 100;
         obj.style.filter = "alpha(opacity:" + cur + ")";
         }
         }, 30);
         }
        
         function css(obj, attr) {
         if (obj.currentStyle) {
         return obj.currentStyle[attr];
         } else {
         return getComputedStyle(obj, false)[attr];
         }
         }
         }
         </script>
        </head>
        <body>
        <img src="./img/h4.jpg" alt="" id="img"/>
        </body>
        </html>

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        基于js勻速運動的實例講解

        javascript中,如何讓一個元素(比如p)運動起來呢。設置基本的樣式,一定要讓p有定位( 當然用margin的變化也可以讓元素產生運動效果 )。<;style>;p { width: 100px;height: 100px;background: red;position: absolute;left: 0px;}<;/style>;。基本的結構。<;input type=";button";value=";動起來";/>;<;p id=";box";>;<;/p>;。
        推薦度:
        標簽: 運動 js 例子
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 中文字幕视频免费| a级成人毛片免费视频高清| 无人在线直播免费观看| 亚洲欧洲日产国码二区首页| 99久久人妻精品免费一区| 亚洲一级二级三级不卡| 99久久免费看国产精品| 亚洲国产成人综合| 女人毛片a级大学毛片免费| 色噜噜噜噜亚洲第一| 免费一级一片一毛片| 国产精品免费久久| 亚洲成A人片在线观看无码不卡| 久久久国产精品无码免费专区| 亚洲美女自拍视频| 天天操夜夜操免费视频| MM1313亚洲精品无码久久| 亚洲日韩VA无码中文字幕 | 99re免费99re在线视频手机版| 精品亚洲成a人片在线观看| 手机在线免费视频| 美女的胸又黄又www网站免费| 亚洲香蕉网久久综合影视| 免费女人高潮流视频在线观看 | yellow视频免费看| 亚洲av日韩综合一区在线观看| ww4545四虎永久免费地址| 亚洲AV女人18毛片水真多| 国产亚洲情侣一区二区无| 亚洲精品在线免费观看| 羞羞漫画页面免费入口欢迎你 | 久久亚洲国产午夜精品理论片| 91精品国产免费久久国语蜜臀 | 一级毛片a女人刺激视频免费 | 亚洲午夜成人精品电影在线观看| a级在线免费观看| 亚洲欧美日韩中文二区| 亚洲精品美女久久777777| 在线观看成人免费| 在线观看人成视频免费无遮挡 | 亚洲情XO亚洲色XO无码|