一、滑动菜单、图片

var iSpeed=0;
var left=0;
function startMove(obj,iTarg){
  clearInterval(obj.timer);//记得先关定时器
  obj.timer=setInterval(function(){
    iSpeed+=(iTarg-obj.offsetLeft)/5;
    iSpeed*=0.7;
    left+=iSpeed;//用一个变量left解决小数误差的问题

    if(Math.abs(iSpeed)<1 && Math.abs(iTarg-obj.offsetLeft)<1){
      obj.style.left=iTarg+'px';
    }else{
      obj.style.left=left+'px';//console.log(obj.offsetLeft+'/'+iTarg+'/'+iSpeed);
    }
  },30);
}

二、运动过界

function startMove(obj,iTarget){
  clearInterval(obj.timer);
  obj.timer=setInterval(function(){
    iSpeed+=(iTarget-height)/5;
    iSpeed*=0.7;

    if(Math.abs(iSpeed<1) && Math.abs(iTarget-height)<1){
      clearInterval(obj.timer);
    }else{
      height+=iSpeed;
    if(height<0){
      height=0;//如果不做处理,打印出的高度会为负值,这种情况就是运动过界,在IE下会报错
    }
    document.getElementById('txt1').value+=height+'\n';
    obj.style.height=height+'px';
    }
  },30);
}

三、碰撞+拖拽+重力

var iSpeedX=0;
var iSpeedY=0;
var timer=null;

function startMove(){
  clearInterval(timer);
  timer=setInterval(function(){
    var oDiv=document.getElementById('div1');
    iSpeedY+=3;//重力
    var l=oDiv.offsetLeft+iSpeedX;
    var t=oDiv.offsetTop+iSpeedY;

    if(l>=document.documentElement.clientWidth-oDiv.offsetWidth){
      iSpeedX*=-0.8;//反弹+摩擦力
      l=document.documentElement.clientWidth-oDiv.offsetWidth;
    }else if(l<=0){
      iSpeedX*=-0.8;//alert(iSpeedX+'--'+iSpeedY);
      l=0;
    }
    if(t>=document.documentElement.clientHeight-oDiv.offsetHeight){
      iSpeedY*=-0.8;
      iSpeedX*=0.8;//alert(iSpeedX+'--'+iSpeedY);
      t=document.documentElement.clientHeight-oDiv.offsetHeight;
    }else if(t<=0){
      iSpeedY*=-1;
      iSpeedX*=0.8;
      t=0;
    }
    if(Math.abs(iSpeedX)<1){
      iSpeedX=0;
    }
    if(Math.abs(iSpeedY)<1){
      iSpeedY=0;
    }
    if(iSpeedX==0 && iSpeedY==0 && t==document.documentElement.clientHeight-oDiv.offsetHeight){
      clearInterval(timer);alert(0);
    }else{
      oDiv.style.left=l+'px';
      oDiv.style.top=t+'px';//document.title=iSpeedX+'--'+iSpeedY;
    }

  },30);
}

window.onload=function(){
var oDiv = document.getElementById('div1');
//拖拽
var lastX=0;
var lastY=0;

oDiv.onmousedown=function(ev){
  var oEvent=ev||event;
  var disX=oEvent.clientX-oDiv.offsetLeft;
  var disY=oEvent.clientY-oDiv.offsetTop;

  document.onmousemove=function(ev){
    var oEvent=ev||event;
    var l=oEvent.clientX-disX;
    var t=oEvent.clientY-disY;

    oDiv.style.left=l+'px';
    oDiv.style.top=t+'px';

    iSpeedX=l-lastX;
    iSpeedY=t-lastY;

    lastX=l;
    lastY=t;//document.title=iSpeedX+'/'+iSpeedY;

    //div左上角轨迹,类似画笔
    /*var oBox=document.createElement('div');
    oBox.style.left=l+'px';
    oBox.style.top=t+'px';
    document.body.appendChild(oBox);//console.log(l+'--'+t);*/
  };
  document.onmouseup=function(){
    document.onmousemove=null;
    document.onmouseup=null;

    startMove();
  };
clearInterval(timer);
 };

}

js基础之弹性运动(四)的更多相关文章

  1. JS运动基础(三) 弹性运动

    加减速运动速度不断增加或减少速度减小到负值,会向反方向运动 弹性运动在目标点左边,加速:在目标点右边,减速根据距离,计算加速度 带摩擦力的弹性运动弹性运动+摩擦力 弹性:速度 += (目标点 - 当前 ...

  2. js基础学习笔记(四)

    4.1 什么是数组 我们知道变量用来存储数据,一个变量只能存储一个内容,存储多个值时,就需要用到数组. 数组是一个值的集合,每个值都有一个索引号,从0开始,每个索引都有一个相应的值,根据需要添加更多数 ...

  3. JS基础入门篇(四)—this的使用,模拟单选框,选项卡和复选框

    1.this的使用 this js中的关键字 js内部已经定义好了,可以不声明 直接使用 this的指向问题 1. 在函数外部使用 this指向的是window 2. 在函数内部使用 有名函数 直接调 ...

  4. JS基础入门篇(四十三)—ES6(二)

    1.对象简洁表示法 原来写法 var name = "lzf"; var gender = "male"; var fn = function(){consol ...

  5. js 运动函数篇(二) (加速度运动、弹性运动、重力场运动(多方向+碰撞检测+重力加速度+能量损失运动)拖拽运动)层层深入

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS写加速度运动.弹性运动.重力场运 ...

  6. [Js]弹性运动

    描述:像弹簧一样左右弹动,最后缓慢停下来 一.加减速运动 1.加速运动 var iSpeed=0;iSpeed++; 速度越来越快,最后冲出去 2.减速运动 var iSpeed=20;iSpeed- ...

  7. javascript每日一练(十四)——弹性运动

    一.弹性运动 运动原理:加速运动+减速运动+摩擦运动: <!doctype html> <html> <head> <meta charset="u ...

  8. JS学习之路,之弹性运动框架

    弹性运动:顾名思义,就如同物理中的加速减速运动,当开始时速度过大,到达终点时,速度不会立刻停下,而是再前进一段距离,而后再向相反方向运动,如此往复. var timer=null; var speed ...

  9. javascript运动系列第五篇——缓冲运动和弹性运动

    × 目录 [1]缓冲运动 [2]弹性运动 [3]距离分析[4]步长分析[5]弹性过界[6]弹性菜单[7]弹性拖拽 前面的话 缓冲运动指的是减速运动,减速到0的时候,元素正好停在目标点.而弹性运动同样是 ...

随机推荐

  1. ip地址的组成(网络位+主机位)

    IP地址子网掩码都是32位的2进制,为了方便记忆转成10进制,通过子网掩码来区分网络位和主机位,子网掩码跟IP地址一一对应,子网掩码为1的是网络位,为0的是主机位.如:192.168.1.2 掩码25 ...

  2. Python IDE专用编辑器PyCharm下载及配置安装过程(Ubuntu环境)

    这几天在折腾Python环境,显示把笔记本安装Ubuntu Linux环境系统,然后基本的Python环境都安装完毕之后需要安装传说中在其平台中最好的代码编辑和管理工具PyCharm,于是就根据网上的 ...

  3. 【Todo】Zookeeper学习

    首先,Zookeeper是基于Paxos来进行分布式选举管理的,Paxos的内容可以参考我另一篇文章:http://www.cnblogs.com/charlesblc/p/6037004.html ...

  4. Extjs4.2如何实现鼠标点击统计图时弹出窗口来展示统计的具体列表信息

    var pageSize = 20;//初始化每页数据条数 var winTitle = '';//初始化窗口标题 /** *点击统计图时,弹出一个窗口,显示统计的详情列表信息, *该方法为项目中所有 ...

  5. commonJS — 字符串操作(for String)

    for String github: https://github.com/laixiangran/commonJS/blob/master/src/forString.js 代码 /** * Cre ...

  6. 【转】 Android自定义捕获Application全局异常

    大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了 ...

  7. grep使用方法

    linux grep命令详解 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 ...

  8. linux笔记:目录处理命令ls,mkdir,cd,pwd,rmdir,cp,mv,rm

    linux命令的格式:命令 [-选项] [参数]例:ls -la /etc 命令:ls命令所在路径:/bin/ls功能:显示目录文件用法:ls [-aldh] []参数:-a 查看所有文件,包括隐藏文 ...

  9. python 练习 23

    python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语句…… 执行语句可以是单个语句或语句 ...

  10. left join与on,where 结合一起用的异同

    I.数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left join时,on和where条件的区别如下: 1. on条件是在生成临时表时使用 ...