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中,函数的功能十分强大.它们是第一类对象,也可以作为另一个对象的方法,还可以作为参数传入另一个函数,不仅 ...
随机推荐
- T114048 [RC-02] yltx数对 (打表)
这题如果全部打表的话,文件大小会有65kb,超了,所以只打出一半,前一半用程序算就可以了,并不会超时. 如果算法优化的好,其实可以打的更少. #include <bits/stdc++.h> ...
- 吴裕雄 PYTHON 神经网络——TENSORFLOW 无监督学习处理MNIST手写数字数据集
# 导入模块 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt # 加载数据 from tensor ...
- MyBatis逆向工程的使用(非插件方式)
一.概述 MyBatis是目前流行的优秀持久层框架,其逆向工程更是大大缩减了开发时间.所谓逆向工程,指的是mybatis根据数据库设计好的表,自动生成对应model.mapper及mapper.xml ...
- SSIS 从oracle 转数据回MS SQL
SSIS 从oracle 转数据回MS SQL,转每月的销售记录,大概15000以内,在开发机器上没问题,部署到生产环境出现各种状况“ SSIS 无法从连接伺服器的OLE DB提供者BULK 提取资料 ...
- 让你的逼格瞬间提升的十个Python语法!
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手.不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了.本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并 ...
- 用myeclipse快速搭建hibernate实现数据库访问
前言 hibernate使用的大致过程为引入jar包.配置主配置文件.配置映射文件.编写实体类.编写dao.但是每一步都需要知道的内容都相对不少,造成困难.如果使用myeclipse提供的支持将非常容 ...
- java 日志的数据脱敏
思路 1.在 model层进行处理,直接重写get方法,在写一个getPlain 获取明文方法.(缺点:数据库写入和json序列化传递时使用的都是密文) 2.利用 日志组件过滤 特定的key,去进行脱 ...
- Cisco AP-如何调整LAP信道
GUI方法: CLI的方法:根据对应的接口去调整信道,信道带宽,传输功率等信息吧.(Cisco Controller) >config slot 0 antenna Configures the ...
- idea 配置JVM参数
-Dfile.encoding=UTF-8 -Xms512m -Xmx3072m -XX:PermSize=512m
- leetcode: 0204 完成的
目录 大纲:0204 完成的 notes ✅1051 高度检查器 ✅ 728 自除数 brute c解答: java switch 语句 java api: array 直接有 length 属性 , ...