最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript摸擬自由落體與上拋運(yùn)動(dòng)原理與實(shí)現(xiàn)方法詳解

 更新時(shí)間:2020年04月08日 11:26:44   作者:Weiseditor  
這篇文章主要介紹了Javascript摸擬自由落體與上拋運(yùn)動(dòng),結(jié)合實(shí)例形式分析了Javascript摸擬自由落體與上拋運(yùn)動(dòng)相關(guān)原理、實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Javascript摸擬自由落體與上拋運(yùn)動(dòng)原理與實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

JavaScript 代碼

//****************************************
    //名稱:Javascript摸擬自由落體與上拋運(yùn)動(dòng)!
    //作者:Gloot
    //郵箱:glootz@gmail.com
    // QQ:345268267
    //網(wǎng)站:http://www.cnblogs.com/editor/
    //操作:在頁(yè)面不同地方點(diǎn)幾下
    //***************************************
    var $ = function(el) { return document.getElementById(el); };
    function LuoRun()
    {
      this.h = 0;
      this.s = 0;
      this.g = 9.8;
      this.isup = false;
      this.rh = 0;
      this.t = 0;
      this.timer = null;
      this.mt = 0;
      this.top = 0;
      this.left = 0;
      this.id = null;
    }

    LuoRun.prototype.Po = function(obj) {
      this.left += 0.3;
      obj.style.left = (this.left)+'px';

      if (!this.isup) {
        if (this.t == 0)
        {
          this.top = obj.offsetTop;
          this.h = 570 - 22 - this.top;
          this.mt = Math.sqrt(2*this.h/(this.g*100));
          //alert(mt+' '+isup+' '+t)
        }

        this.t+=0.01;

        if (this.t >= this.mt)
        {
          this.t = this.mt;
          this.rh = (1/2)*this.g*this.t*this.t*100;
          this.s = this.g*this.t*100;
          obj.style.top = (this.rh+this.top)+'px';
          //t = 0;
          this.s = this.s-50>0 ? this.s-50 : 0;
          this.isup = true;
          this.t = 0;
        }
        else
        {
          this.rh = (1/2)*this.g*this.t*this.t*100;
          this.s = this.g*this.t*100;

          obj.style.top = (this.rh+this.top)+'px';
        }
      } else { //up
        //return;

        if (this.s == 0) {
          clearInterval(this.timer);
          this.id.parentNode.removeChild(this.id);
          return;
        }

        if (this.t == 0) {
          this.h = this.s*this.s/(2*this.g*100);
          this.mt = this.s/(this.g*100);
          this.top = obj.offsetTop;
          //alert(mt+' '+isup+' '+t)
        }

        this.t+=0.01;
        if (this.t>=this.mt) {
          this.t = this.mt;

          this.rh = this.s*this.t - (1/2)*this.g*this.t*this.t*100;
          obj.style.top = (this.top - this.rh)+'px';
          this.s = 0;
          this.isup = false;
          this.t = 0;
        }else {
          this.rh = this.s*this.t - (1/2)*this.g*this.t*this.t*100;

          obj.style.top = (this.top - this.rh)+'px';
        }
      }
    }

    LuoRun.prototype.Go = function(obj) {
      var self = this;
      if (obj == null)
        obj = $('box');
      self.timer = setInterval(function() {

        self.Po(obj);

        if (self.h<=0) {
          clearInterval(self.timer);
          self.id.parentNode.removeChild(self.id);
        }
      },10);
    }

    document.onmousedown = function(e) {
      e = e?e:window.event;

      var crtDiv = document.createElement('div');
      crtDiv.style.position = 'absolute';
      crtDiv.style.left = e.clientX + 'px';
      crtDiv.style.top = e.clientY + 'px';
      crtDiv.style.background = '#333';
      crtDiv.style.width = '22px';
      crtDiv.style.height = '22px';

      document.body.appendChild(crtDiv);

      crtDiv.innerHTML = '&nbsp;';
      var C = new LuoRun();
      C.left = e.clientX;
      C.id = crtDiv;
      document.onmouseup = function() {
        document.onmousemove = null;
        window.setTimeout(function() { C.Go(crtDiv); },1000);
      }
    }

Css 樣式

<style type="text/css">
    td,body {font-size:12px;}
    .css1 {width:240px;display:table;position:absolute;left:20px;top:20px;border:1px solid green;background:#CAF4BD;line-height:18px;padding:3px;}
    .css2 {width:900px;height:22px;border-top:1px solid #333;position:absolute;top:570px;left:60px;}
</style>

Body Html代碼

<body>
  <form id="form1">

  <div class="css1">
    名稱:Javascript摸擬自由落體與上拋運(yùn)動(dòng)!<br />
    作者:Gloot<br />
    郵箱:glootz@gmail.com <br />
     QQ:345268267 <br />
    網(wǎng)站:http://www.cnblogs.com/editor/ <br />
    操作:在頁(yè)面不同地方點(diǎn)幾下
  </div>

  <div id="line" class="css2">&nbsp;</div>
  </form>
</body>

代碼說(shuō)明

function JsFunc() {
  this.a = "";
  this.b = "";
}

JsFunc.prototype.method = function() {
  var me = this;
  me.a = "method";
}

function init() {
  var func = new JsFunc();
  func.method();
}

JsFunc 類(lèi)當(dāng)于一個(gè)(C#中的)類(lèi);

var func = new JsFunc();

相當(dāng)于初始化了一個(gè)類(lèi),創(chuàng)建了一個(gè)對(duì)象;

this.a, this.b 相當(dāng)于 類(lèi)中的成員;

JsFunc.prototype.method 相當(dāng)于創(chuàng)建這個(gè)類(lèi)下的一個(gè)方法函數(shù);

如果這個(gè)JsFunc 多次 new 操作的話,其下 this成員,將各自的運(yùn)行操作,互不影響;

所以當(dāng) 對(duì) JsFunc new 后創(chuàng)建一個(gè)新對(duì)象時(shí),對(duì)這對(duì)象的成員或方法進(jìn)行 setTimeout, setInterval 操作話,就會(huì)產(chǎn)生類(lèi)似于并行操作的效果;

function LuoRun()
{
  this.h = 0;
  this.s = 0;
  this.g = 9.8;
  this.isup = false;
  this.rh = 0;
  this.t = 0;
  this.timer = null;
  this.mt = 0;
  this.top = 0;
  this.left = 0;
  this.id = null;
}

this.s 表示速度;

this.h 表示設(shè)定的高度, 或物體上拋的最高高度;

this.isup 表示正處于上升還是下降狀態(tài);

this.rn 表示下降距當(dāng)前頂?shù)奈灰?,或上拋距離初始速度位置的位移;

this.t  下降或上拋的時(shí)間;

this.mt 表示從某一高度落體至某一低點(diǎn)所用的時(shí)間,或以某一初始速度上拋至零速度所用的時(shí)間;

this.timer 表示定時(shí)器

this.top, this.left 表示物體相對(duì)于容器頂部及左邊的當(dāng)前偏移;

this.id 表示當(dāng)前創(chuàng)建方塊的對(duì)象id值;

LuoRun.prototype.Po = function(obj) {

}

表示物休自由落體及上拋運(yùn)動(dòng)的方法;

this.left += 0.3; 表示物體每落體或上拋向左跳動(dòng)的偏移量(像素);

Po 方法是在定時(shí)器 setInterval 下拋行的一個(gè)動(dòng)作,每次執(zhí)行時(shí)都會(huì)根據(jù)配置偏移量以及自由落體及上拋相關(guān)公式計(jì)算當(dāng)前參數(shù)值變化,并設(shè)定當(dāng)前物體的位置;

obj.style.left = (this.left)+'px'; 初始化當(dāng)前步驟的 左偏移;

落體狀態(tài)

if (!this.isup) {...} 表示是否是落體狀態(tài);

if (this.t == 0)
{
     this.top = obj.offsetTop;
     this.h = 570 - 22 - this.top;
     this.mt = Math.sqrt(2*this.h/(this.g*100));
     //alert(mt+' '+isup+' '+t)
}

當(dāng)時(shí)間為 0 時(shí),表示當(dāng)前處于落體的最頂點(diǎn),記錄當(dāng)前距頂部的偏移值,設(shè)定落體的高度,以及計(jì)算此高度落體所用的時(shí)間;

if (this.t >= this.mt)
{
    this.t = this.mt;
    this.rh = (1/2)*this.g*this.t*this.t*100;
    this.s = this.g*this.t*100;
    obj.style.top = (this.rh+this.top)+'px';
    //t = 0;
     this.s = this.s-50>0 ? this.s-50 : 0;
     this.isup = true;
     this.t = 0;
}

當(dāng)落體所用時(shí)間,大于 this.mt 的最大時(shí)間時(shí),將時(shí)間設(shè)置為 this.mt 的落體總時(shí)間;

this.rh 根據(jù)公式 1/2gt2 得出的位移值,會(huì)等于 this.h 的值,或接近于 this.h 的高度值;

this.s 根據(jù) 速度在加速度隨時(shí)間變化的公式計(jì)算出 當(dāng)前的速度,也即最大帶度,這也是初始的上拋速度;

this.s = this.s-50>0 ? this.s-50 : 0;

這個(gè) 50 即為阻尼系數(shù),即每次上拋所受阻力所減的速度值;

this.isup 設(shè)置 true; 表示進(jìn)入上拋狀態(tài);

obj.style.top = (this.rh+this.top)+'px'; 設(shè)置物體本步驟落體的當(dāng)前位置;

上拋運(yùn)行

if (this.t == 0) {
   this.h = this.s*this.s/(2*this.g*100);
   this.mt = this.s/(this.g*100);
   this.top = obj.offsetTop;
   //alert(mt+' '+isup+' '+t)
}

當(dāng)時(shí)間為 0 時(shí),表示處于上拋開(kāi)始點(diǎn),計(jì)算 按落體后的速度及公式: v2/(2g) 上升的最大高度 this.h; 最大上升時(shí)間 this.mt; 保存當(dāng)前距頂部的偏移 this.top;

 if (this.t>=this.mt) {
    this.t = this.mt;

    this.rh = this.s*this.t - (1/2)*this.g*this.t*this.t*100;
    obj.style.top = (this.top - this.rh)+'px';
    this.s = 0;
    this.isup = false;
    this.t = 0;
}

當(dāng)時(shí)間 this.t 大于 this.mt 這個(gè)最大上拋時(shí)間時(shí),將時(shí)間設(shè)置為 this.mt;

this.rh 表示上拋的高度; 公式: vt - (1/2)gt2 ;

重置 this.t及this.s 時(shí)間與速度,并將 this.isup 置為 false,開(kāi)始落體動(dòng)作;

LuoRun.prototype.Go = function(obj) {
      var self = this;
      if (obj == null)
        obj = $('box');
      self.timer = setInterval(function() {

        self.Po(obj);

        if (self.h<=0) {
          clearInterval(self.timer);
          self.id.parentNode.removeChild(self.id);
        }
      },10);
}

Go 是個(gè)定時(shí)器,10 毫秒執(zhí)行一次物體偏移移動(dòng)操作;

當(dāng) this.h 小于等于 0 時(shí),清除物體,該對(duì)象方塊一個(gè)落體與上拋過(guò)程結(jié)束;

document.onmousedown = function(e) {
      e = e?e:window.event;

      var crtDiv = document.createElement('div');
      crtDiv.style.position = 'absolute';
      crtDiv.style.left = e.clientX + 'px';
      crtDiv.style.top = e.clientY + 'px';
      crtDiv.style.background = '#333';
      crtDiv.style.width = '22px';
      crtDiv.style.height = '22px';

      document.body.appendChild(crtDiv);

      crtDiv.innerHTML = '&nbsp;';
      var C = new LuoRun();
      C.left = e.clientX;
      C.id = crtDiv;
      document.onmouseup = function() {
        document.onmousemove = null;
        window.setTimeout(function() { C.Go(crtDiv);             },1000);
      }
    }

當(dāng)鼠標(biāo)點(diǎn)擊頁(yè)面時(shí),就創(chuàng)建一個(gè)灰黑底,寬高 22 像素的方塊;

并初始化 (創(chuàng)建新對(duì)象) LuoRun 類(lèi);

當(dāng)鼠標(biāo)松開(kāi)后,過(guò)一秒鐘執(zhí)行 LuoRun的 Go 定時(shí)器,開(kāi)始表現(xiàn)物體的落體與上拋過(guò)程;

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《JavaScript運(yùn)動(dòng)效果與技巧匯總》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動(dòng)畫(huà)特效與技巧匯總》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • js操作table示例(個(gè)人心得)

    js操作table示例(個(gè)人心得)

    有一個(gè)表格,然后有4個(gè)輸入框,一個(gè)合并按鈕,輸入框是這樣的,從第幾行到第幾行,從第幾列到第幾列,然后點(diǎn)擊按鈕,合并
    2013-11-11
  • 微信小程序如何使用Promise對(duì)wx.request()封裝詳解(附完整代碼)

    微信小程序如何使用Promise對(duì)wx.request()封裝詳解(附完整代碼)

    微信小程序的wx.request是微信小程序最早生成的數(shù)據(jù)庫(kù)傳輸模式,數(shù)據(jù)傳輸簡(jiǎn)單明確,下面這篇文章主要給大家介紹了關(guān)于微信小程序如何使用Promise對(duì)wx.request()封裝的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Bootstrap DateTime Picker日歷控件簡(jiǎn)單應(yīng)用

    Bootstrap DateTime Picker日歷控件簡(jiǎn)單應(yīng)用

    這篇文章主要介紹了Bootstrap DateTime Picker日歷控件的簡(jiǎn)單應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • JS判斷字符串包含的方法

    JS判斷字符串包含的方法

    這篇文章主要介紹了JS判斷字符串包含的方法,可有效的檢測(cè)字符串中是否包含固定字符或子字符串,涉及javascript中indexOf的使用技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • JavaScript實(shí)現(xiàn)網(wǎng)站訪問(wèn)次數(shù)統(tǒng)計(jì)代碼

    JavaScript實(shí)現(xiàn)網(wǎng)站訪問(wèn)次數(shù)統(tǒng)計(jì)代碼

    每個(gè)網(wǎng)站管理者,都必須知道每天有多少人訪問(wèn)了本站,需要一個(gè)網(wǎng)站訪問(wèn)次數(shù)功能來(lái)滿足需求,本篇文章主要介紹了JavsScript實(shí)現(xiàn)網(wǎng)站訪問(wèn)次數(shù)統(tǒng)計(jì)代碼,需要的朋友可以參考下
    2015-08-08
  • js中遍歷Map對(duì)象的簡(jiǎn)單實(shí)例

    js中遍歷Map對(duì)象的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇js中遍歷Map對(duì)象的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • js內(nèi)存泄露的幾種情況詳細(xì)探討

    js內(nèi)存泄露的幾種情況詳細(xì)探討

    內(nèi)存泄露是指一塊被分配的內(nèi)存既不能使用,又不能回收,直到瀏覽器進(jìn)程結(jié)束,由于瀏覽器垃圾回收方法有bug,會(huì)產(chǎn)生內(nèi)存泄露,下面與大家詳細(xì)探討下內(nèi)存泄露的幾種情況
    2013-05-05
  • js的[defer]和[async]屬性

    js的[defer]和[async]屬性

    這篇文章主要介紹了js的<script>的[defer]和[async]屬性,需要的朋友可以參考下
    2014-11-11
  • 十個(gè)開(kāi)發(fā)人員面臨的最常見(jiàn)的JavaScript問(wèn)題總結(jié)

    十個(gè)開(kāi)發(fā)人員面臨的最常見(jiàn)的JavaScript問(wèn)題總結(jié)

    今天,JavaScript?是幾乎所有現(xiàn)代?Web?應(yīng)用的核心。這就是為什么JavaScript問(wèn)題,以及找到導(dǎo)致這些問(wèn)題的錯(cuò)誤,是?Web?發(fā)者的首要任務(wù)。本文總結(jié)了十個(gè)常見(jiàn)的問(wèn)題及解決方法,需要的可以參考一下
    2022-11-11
  • 解決Layui 表單提交數(shù)據(jù)為空的問(wèn)題

    解決Layui 表單提交數(shù)據(jù)為空的問(wèn)題

    今天小編就為大家分享一篇解決Layui 表單提交數(shù)據(jù)為空的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論

巧家县| 阆中市| 玉溪市| 富顺县| 依安县| 揭西县| 南和县| 长汀县| 长兴县| 稻城县| 芷江| 临清市| 温泉县| 黑龙江省| 陆丰市| 固原市| 乌海市| 阜阳市| 兴国县| 唐河县| 汉源县| 楚雄市| 德令哈市| 余干县| 桂平市| 谢通门县| 商都县| 高阳县| 麟游县| 岱山县| 中山市| 尚义县| 专栏| 涿州市| 武隆县| 措勤县| 泸州市| 武邑县| 广平县| 澎湖县| 和硕县|