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中,函数的功能十分强大.它们是第一类对象,也可以作为另一个对象的方法,还可以作为参数传入另一个函数,不仅 ...
随机推荐
- C:字符数组 与 字符串
字符串与字符数组 C语言中没有字符串这种数据类型,可以通过char的数组来替代: 字符串一定是一个char的数组,但char的数组未必是字符串: 数字0(和字符'\0'等价)结尾的char数组就是一个 ...
- 如何利用wx.request进行post请求
1,method 是 get 方式的时候,会将数据转换成 query string method 为 post 时,header为{"Content-Type": " ...
- C语言与汇编的嵌入式编程:统计字符串中各字符出现的次数
原始C语言: #include<stdio.h> void main(){ ]; char pipei[] = "abcdefghijklmnopqrstuvwxyz" ...
- 安卓之button按钮
一.需求 短按按钮时显示 您点击了控件:Button 长按按钮时显示 您点击了控件:Button 二.布局xml文件 <?xml version="1.0" encodi ...
- SpringCloud全家桶学习之服务注册与发现及Eureka高可用集群搭建(二)
一.Eureka服务注册与发现 (1)Eureka是什么? Eureka是NetFlix的一个子模块,也是核心模块之一.Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故 ...
- Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
目录 0.前言 1.TemporalAccessor源码 2.Temporal源码 3.TemporalAdjuster源码 4.ChronoLocalDate源码 5.LocalDate源码 6.总 ...
- 兵贵神速!掌握这10个Python技巧,让你代码工作如鱼得水
主题 Python 1000个读者心中有1000个哈姆雷特,要问1000个程序员“什么才是最好的语言”,Java.Python.PHP.C++ 也都有自己的位置.但要问编程语言流行指数之王非,那真的非 ...
- vb.net从数据库中取数据
1.设置从Model中的Sub Main 启动 2.程序结构 3.Model1 Imports System.Windows.Forms.Application Module Module1 Sub ...
- windows远程linux的方法(不用xshell)
先cmd进入DOS,再输入命令ssh root@要远程的linux的ip 输入密码 即可进入linux后台.如下图,即为edr后台,可以见到unabackup服务了. 如果是多次远程不同IP,第二次远 ...
- 杭电 2013 猴子吃桃 递归解法&循环解法
题目估计看到过3次不止了,所以还是想复习下递归的运用. 奉上递归代码: #include <iostream> #include<math.h> #include <io ...