JS回弹原理-高级
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
img{ width:200px; height:200px; position:absolute;}
.box{ width: 5px; height: 5px; background: #000; position: absolute; display: none;}
</style> <script type="text/javascript">
window.onload = function(){ var oPic = document.getElementById("pic");
var iSpeedX = 0; //定义在X方向上的速度
var iSpeedY = 0; //定义在Y方向上的速度
var timer = null; oPic.style.width = 0;
oPic.style.height = 0;
var beginX = document.documentElement.clientWidth /2; //获取可视区在X方向上的中心点
var beginY = document.documentElement.clientHeight /2; //获取可视区在Y方向上的中心点
oPic.style.left = beginX + "px"; //初始化oPic的left值
oPic.style.top = beginY + "px"; //初始化oPic的Top值
console.log(beginX + " , " + beginY); toChange(200); function toChange(iTraget){
timer = setInterval(function (){
if(oPic.offsetWidth == iTraget){
clearInterval(timer);
startMove();
}else{//加载时显示oPic
oPic.style.width = oPic.offsetWidth + 10 + "px";
oPic.style.height = oPic.offsetHeight + 10 +"px";
oPic.style.left = beginX - oPic.offsetWidth /2 + "px";
oPic.style.top = beginY - oPic.offsetHeight /2 +"px";
} },30); }
oPic.onmousedown = function(ev){
var oEvent = ev || event;
var disX = oEvent.clientX - oPic.offsetLeft; //获取鼠标按下时在X方向上的的坐标位置
var disY = oEvent.clientY - oPic.offsetTop; //获取鼠标按下时在Y方向上的坐标位置
var preX = oEvent.clientX; //计算速度的第一个点-X
var preY = oEvent.clientY; //计算速度的第一个点-Y
clearInterval(timer);
document.onmousemove = function (ev){
var oEvent = ev || event;
iSpeedX = oEvent.clientX - preX; //速度-X
iSpeedY = oEvent.clientY - preY; //速度-Y
preX = oEvent.clientX;
preY = oEvent.clientY;
var l = oEvent.clientX - disX; //鼠标拖动时的坐标-X
var t = oEvent.clientY - disY; //鼠标拖动时的坐标-Y
//拖动时通过DOM来创建DIV计算速度
var oBox = document.createElement("div");
oBox.className = "box";
oBox.style.left = oEvent.clientX + "px";
oBox.style.top = oEvent.clientY + "px";
document.body.appendChild(oBox); oPic.style.left = l + "px"; //拖动时oPic的left或top值
oPic.style.top = t + "px"; //document.title = l + "," +t + "," + iSpeedX + "," + iSpeedY;
}
document.onmouseup = function (){
document.onmousemove = null;
startMove(); //回弹
} return false; }
function startMove(){
clearInterval(timer);
timer = setInterval(function (ev){
iSpeedY +=3;
var L = oPic.offsetLeft + iSpeedX;
var T = oPic.offsetTop + iSpeedY;
if(L < 0){
L = 0;
iSpeedX *= -1;
iSpeedX *=0.75;
}else if(L > document.documentElement.clientWidth - oPic.offsetWidth){
L= document.documentElement.clientWidth - oPic.offsetWidth;
iSpeedX *= -1;
iSpeedX *=0.75;
}
if(T < 0){
T = 0;
iSpeedY *=-1;
iSpeedY *=0.75;
}else if(T > document.documentElement.clientHeight - oPic.offsetHeight){
T = document.documentElement.clientHeight - oPic.offsetHeight;
iSpeedY *=-1;
iSpeedY *=0.75;
iSpeedX *=0.75;
}
oPic.style.left = L + "px";
oPic.style.top = T + "px"; console.log(L + " , " + T + " , " + iSpeedX + " , " + iSpeedY);
},30)
}
}
</script> </head> <body> <img src="f.jpg" id="pic"> </body>
</html>

- 有时候发现会有很多难点,有时候又发现没有难点。
- 各种坐标的获取。
- 根据坐标来计算各种值(比如:速度大小)
- 边界值的判断
- 速度*一个小数(0.nn)摩擦力
JS回弹原理-高级的更多相关文章
- JS垂直落体回弹原理
/* *JS垂直落体回弹原理 */ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...
- JS简单回弹原理
/* *JS简单回弹原理 */ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...
- Immutable.js 实现原理
Immutable.js 实现原理 Immutable collections for JavaScript v4.0.0-rc.12 released on Oct 31, 2018 https:/ ...
- js 深入原理讲解系列-Promise
js 深入原理讲解系列-Promise 能看懂这一题你就掌握了 js Promise 的核心原理 不要专业的术语,说人话,讲明白! Q: 输出下面 console.log 的正确的顺序? const ...
- js 深入原理讲解系列-事件循环
js 深入原理讲解系列-事件循环 能看懂这一题你就掌握了 js 事件循环的核心原理 不要专业的术语,说人话,讲明白! Q: 输出下面 console.log 的正确的顺序? console.log(' ...
- js 深入原理讲解系列-currying function
js 深入原理讲解系列-currying function 能看懂这一题你就掌握了 js 科里函数的核心原理 不要专业的术语,说人话,讲明白! Q: 实现 sum 函数使得以下表达式的值正确 cons ...
- js高级---js运行原理
概述 浏览器组成可分两部分:Shell+内核.浏览器内核又可以分成两部分:渲染引擎(layout engineer或者Rendering Engine)和JS引擎.渲染引擎功能作用 渲染引擎,负责对网 ...
- 浅谈JS中的高级函数
在JavaScript中,函数的功能十分强大.它们是第一类对象,也可以作为另一个对象的方法,还可以作为参数传入另一个函数,不仅如此,还能被一个函数返回!可以说,在JS中,函数无处不在,无所不能,堪比孙 ...
- 谈谈JS中的高级函数
博客原文地址:Claiyre的个人博客如需转载,请在文章开头注明原文地址 在JavaScript中,函数的功能十分强大.它们是第一类对象,也可以作为另一个对象的方法,还可以作为参数传入另一个函数,不仅 ...
随机推荐
- STM32CUBEMX使用操作记录
1.New Project 2.选择芯片型号 3.配置相关外设 4.例如选择了GPIO_Output 5.配置时钟树 灰色框点不了,这和你上一步相关外设配置有关,鼠标靠近灰色框,系统会给出提示 6.工 ...
- Comparable
为什么会有Comparable与Comparator接口? 引入策略模式 目录 引入 Comparable接口的来龙去脉 引入Comparator接口 什么是策略模式? 使用了策略模式有什么好处? ...
- ubuntu 安装 gd
最近装一套系统,提示没开启GD, 1.首先检查一下,是否安装 新建一个文件 <?php phpinfo(); ?> 如果安装了,会在页面显示 2.没安装当然没有了 这个安装也是根据php版 ...
- django模块导入/函数/中间件/MVC和MTV/CSRF
目录 一:模块导入 二:函数 三:中间件 四:MVC和MTV 五:csrf 一:模块导入 第一种:继承 这里的母版更像是一个架子,子板都是定义的内容(如果多个页面中 ,存在相同的页面:这样我们可以抽到 ...
- Android SDK Tools,Platform-tools,Build-tools分别有什么作用?
SDK Tools:是下载sdk最基础的,由它再来下载Platform-tools,Build-tools platform-tools包含开发app的平台依赖的开发和调试工具,包括 adb.fast ...
- 吴裕雄 python 神经网络——TensorFlow实现AlexNet模型处理手写数字识别MNIST数据集
import tensorflow as tf # 输入数据 from tensorflow.examples.tutorials.mnist import input_data mnist = in ...
- 安卓之滚动视图ScrollView
(1)垂直方向滚动时,layout_width要设置为match_parent,layout_height要设置为wrap_content (2)水平方向滚动时,layout_width要设置为wra ...
- Jenkins+Maven+Github+Springboot实现可持续自动部署(非常详细)
目前公司开发的项目已经部署到服务器上,部署项目的测试环境和生产环境,加上每个项目n个服务,于是我就 , 骚就是骚,但是就是太累了,于是花点时间研究了一下Jenkins. Jenkins的作用和它的lo ...
- 正确的上网姿势:ubuntu18.04使用clash
本文为本人将CFW(Clash For Windows)上的配置文件应用到ubuntu上面的操作备忘,仅供个人使用 首先下载已经打包的clash压缩包:https://github.com/Dream ...
- ROS及Ubuntu学习记录
1.ROS安装时出现 “无法获得锁的解决方法” 参考:https://www.jianshu.com/p/6868ed4b4aec 2.运行rviz时 要先在一个终端窗口运行roscore 3.虚拟机 ...