成品图如下所示:

点击篮球让篮球掉下

搭建HTML+CSS代码

html:

 <div id="demo"></div>

css:

div{
width:100px;
height:100px;
background-image:url("../images/lanqiu.png");
background-size: 100px 100px;
position: absolute;
left: 0px;
top: 0px;
border-radius: 50% 50%;
}

js代码(注释都在里面):

      var oDiv = document.getElementById('demo');
var timer = null; oDiv.onclick = function (){ //点击篮球触发运动函数
startMove(this);
} function startMove (dom){//运动函数
clearInterval(dom.timer);//清理定时器
var iSpeedX = 6; //横向初速度
var iSpeedY = 8; //竖向初速度
var g = 3; //重力初速度 dom.timer = setInterval(function (){ //开启定时器
iSpeedY += g; //竖向坐标每次加等于本身
var newTop = dom.offsetTop + iSpeedY; //篮球自身纵坐标加上竖向速度值付给newTop
var newLeft = dom.offsetLeft + iSpeedX;//篮球自身横坐标加上横向速度值付给newLeft
if(newTop >= document.documentElement.clientHeight - dom.clientHeight){ //newTop如果大于或等于浏览器窗口高度减去篮球自身高度
iSpeedY *= -1; //当篮球到达窗口底部的时候纵向速度乘以-1,使篮球反向运动 //加上能量损失,让篮球碰到四壁的时候,能量减小
iSpeedY *= 0.8; //纵向速度乘以0.8,会越乘越小
iSpeedX *= 0.8; //横向速度乘以0.8,会越乘越小
newTop = document.documentElement.clientHeight - dom.clientHeight;
//为了防止篮球大于等于底部的时候略过浏览器窗口底边出现滚动条,所以让newTop值直接等于浏览器窗口高度减去自身高度
}
if(newTop <= 0){ //当newTop值反向走到流浪器窗口顶部的时候,即等于0
iSpeedY *= -1; //则继续以纵向速度乘以-1,继续反向运动 //加上能量损失,让篮球碰到四壁的时候,能量减小
iSpeedY *= 0.8;//纵向速度乘以0.8,会越乘越小
iSpeedX *= 0.8;//横向速度乘以0.8,会越乘越小
newTop = 0; //防止略过窗口,直接让newTop值等于0
}
if(newLeft >= document.documentElement.clientWidth - dom.clientWidth){//newLeft如果大于或等于流浪器窗口宽度减去篮球自身宽度
iSpeedX *= -1;//则继续以横向速度乘以-1,继续反向运动 //加上能量损失,让篮球碰到四壁的时候,能量减小
iSpeedY *= 0.8;//纵向速度乘以0.8,会越乘越小
iSpeedX *= 0.8;//横向速度乘以0.8,会越乘越小
newLeft = document.documentElement.clientWidth - dom.clientWidth;
//为了防止篮球大于等于宽度的时候略过浏览器窗口宽度出现横向滚动条,所以让newTop值直接等于浏览器窗口宽度减去自身宽度
}
if(newLeft <= 0){ //当newLeft值反向走到流浪器窗口最左侧的时候,即等于0
iSpeedX *= -1;//则继续以横向速度乘以-1,继续反向运动 //加上能量损失,让篮球碰到四壁的时候,能量减小
iSpeedY *= 0.8;//纵向速度乘以0.8,会越乘越小
iSpeedX *= 0.8;//横向速度乘以0.8,会越乘越小
newLeft = 0;//防止略过窗口,直接让newTop值等于0
}
if(Math.abs(iSpeedX) < 1 && Math.abs(iSpeedY) < 1){ //当横向速度和纵向速度小于1的时候,横向纵向速度等于0
iSpeedX = 0;
iSpeedY = 0;
}
if(iSpeedX == 0 && iSpeedY == 0 && newTop == document.documentElement.clientHeight - dom.clientHeight){
//当横向速度和纵向速度等于0并且newTop值等于窗口高度减去自身高度的时候
clearInterval(dom.timer);//清理定时器,停止运动
}else{//停了运动就跟着停止了
dom.style.top = newTop + 'px';
dom.style.left = newLeft + 'px';
}
},30);//每30毫秒运行一次
}

谢谢观看,如有大佬经过请多指教!    谢谢观看,如有大佬经过请多指教!   谢谢观看,如有大佬经过请多指教!

原生JavaScript之实战 模拟重力场(篮球)的更多相关文章

  1. 原生javascript之实战 轮播图

    成品效果如下图所示: 因为博客园限制图片上传大小被我删了一些帧数,所以图片看起来会有一点卡,现实运行是不会的 搭建HTML和CSS结构 HTML代码如下: <div class="wr ...

  2. 用原生javascript模拟经典FC游戏公路争霸

    #用原生javascript模拟经典FC游戏公路争霸 前几天看了园子里面的随笔 [原生javascript开发仿微信打飞机小游戏](http://www.cnblogs.com/Mr-Nobody/p ...

  3. 原生javascript模仿win8等待进度条。

    一.序言 一直很中意win8等待提示圆圈进度条.win8刚出来那会,感觉好神奇!苦于当时没思路,没去研究.通过最近网上找找资料,终于给搞出来了!先上Demo,献丑了!预览请看:win8进度条. 二.简 ...

  4. 表单美化-原生javascript和jQuery单选按钮(兼容IE6)

    最近很多人问怎么美化表单的元素,大家都知道表单元素在各个浏览器中的表现不一,反正也是特别的丑,那么问题就来了,我们能自己设计表单元素的外观么?答案是可以的,现在我们就来试试吧.我们用两种方式来实现这一 ...

  5. 使用原生 JavaScript 操作 DOM

    原文:https://www.sitepoint.com/dom-manipulation-vanilla-javascript-no-jquery/ 微软官方放弃了 IE10-,所以现在可以放心使用 ...

  6. React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块

    尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...

  7. 原生 JavaScript 实现 state 状态管理系统

    原生 JavaScript 实现 state 状态管理系统 Build a state management system with vanilla JavaScript | CSS-Tricks 在 ...

  8. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  9. JavaScript继承的模拟实现

    我们都知道,在JavaScript中只能模拟实现OO中的"类",也就意味着,在JavaScript中没有类的继承.我们也只能通过在原对象里添加或改写属性来模拟实现. 先定义一个父类 ...

随机推荐

  1. Generate Parentheses(组合,回溯)

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  2. 使用图像扫描控件ScanOnWeb实现在线图像扫描

    今天上网查资料,看到一篇文章,描述的是一个开发OA软件的公司解决浏览器嵌入式扫描仪编程的文章,文章描述了改OA厂商的工程师如何辛苦的克服了各种技术难题,最终实现了在线图像扫描处理,然后又在无数个不眠的 ...

  3. MatConvNet 练习使用CNN

    首先在 VGG Convolutional Neural Networks Practical 官网上做了四个练习.现在代码可以直接用 但是在using pretrained models中有个错,n ...

  4. 【scrapy】Item及Spider

    Items Item objects are simple containers used to collect the scraped data.They provide a dictionary- ...

  5. webpack-Hot Module Replacement(热更新)

    模块热替换(Hot Module Replacement) 模块热替换(HMR - Hot Module Replacement)功能会在应用程序运行过程中替换.添加或删除模块,而无需重新加载整个页面 ...

  6. iOS用户体验之-modal上下文

    iOS用户体验之-modal上下文 何为模态视图,它的作用时聚焦当前.获得用户的注意,用户仅仅有完毕模态的任务才 退出模态视图.否则你将不能运行app的任务,比如,alert view,model v ...

  7. VS code - code Snippet

    For anyone working on the UI and using VS Code, you can create a user Snippet and keyboard shortcut ...

  8. java纯数字加密解密实例

    我们都知道,在用户加入信息时,一些比較敏感的信息,如身份证号,手机号,用户的登录password等信息,是不能直接明文存进数据库的.今天我们就以一个详细的样例来说明一下纯数字的java加密解密技术. ...

  9. ASP.NET MVC3 自定义编辑模版

    在View中显示Model中的各字段,默认是使用htmlhelper的EditorFor方法,在界面上显示的文本框.而使用EditorTemplates可在View上为特定字段显示自定义的界面.比如购 ...

  10. ASP.NET for WebApi

    WebApi,听说过吧?呵呵. 感觉比WebService,WCF要强.尤其是那个啥WCF,啥鬼东西,真难懂.真难搞.真难用. 说比WebService要强,是因为不用在本地先生成个代理.而且XML也 ...