浅谈Javascript如何实现匀速运动


Posted in Javascript onDecember 19, 2014

网站上会经常用到Javascript 中的运动,这次与大家分享一下一些运动的基本应用 。 方便大家在开发中能够直接使用。

代码简单易懂,适用于初学者。最后会一步一步整理出一套自己的运动框架。

应用案例效果图:

浅谈Javascript如何实现匀速运动

鼠标移动到分享上 ,左边的div就会显示出来。移开会自己恢复。相信这个大家都会用到 很实用,下面看看代码是如何实现的。

<style type="text/css">

            #div1 {

                width: 150px;

                height: 200px;

                background: green;

                position: absolute;

                left: -150px;

            }

            #div1 span {

                position: absolute;

                width: 20px;

                height: 60px;

                line-height: 20px;

                background: blue;

                right: -20px;

                top: 70px;

            }

        </style>
<body>

        <div id="div1">

            <span>

                分享到

            </span>

        </div>

    </body>

以下是Javascript 代码

<script type="text/javascript">

            window.onload=function(){

                var oDiv=document.getElementById("div1");

                oDiv.onmouseover=function(){

                    startMove(0);

                };

                oDiv.onmouseout=function(){

                    startMove(-150);

                };

            }

            var time=null;

            function startMove(iTraget){

                var oDiv=document.getElementById("div1");

                clearInterval(time);

                time=setInterval(function(){

                    var speed=0;

                    if(oDiv.offsetLeft>iTraget){

                        speed=-10;

                    }else{

                        speed=10;

                    }

                    if(oDiv.offsetLeft==iTraget){

                        clearInterval(time);

                    }else{

                        oDiv.style.left=oDiv.offsetLeft+speed+'px';

                    }

                },30);

            }

        </script>

思路:

样式中初始的left是-150 这样div就是缩在里面,给0 就会显示出来。 那么我们只要变动这个值就可以了

startMove 中的参数 iTarget 是目标点 ,表示到哪个目标点会停下来。

控制speed 的大小 就能控制运动的快慢。如果达到目标点 就停止定时器 。

规律:

*  假设

*         left:30           iTarget:300     得出    往右  为正
*         left:600         iTarget:50       得出    往左  为负

* 通过当前位置left 与目标点的 关系 iTarget 推断出 速度的正负

注意: 一上来就要关了定时器,因为是每次移动到分享到,都会开个定时器,开的越多相对来说速度就越快,因为同时会有多个定时器执行。

所以每次要保证一个定时器工作。

遵循:函数功能一样,参数越少越好的原则 ,所以根据上面的规律把speed 并不是作为参数传入。

举个生活中的例子:你打车,告诉出租车司机已100码的速度到哪哪哪,一般是不可能的吧。打车你不可能告诉师傅你要跑多快

所以程序也是一样的,这里就把速度这个传参去掉了。

当然现在的这个运动框架还会有许多问题,在之后会陆续解决。下篇文章,我们来探讨下匀速运动如何停止。

Javascript 相关文章推荐
JQuery打造PHP的AJAX表单提交实例
Nov 03 Javascript
在表单提交前进行验证的几种方式整理
Jul 31 Javascript
jquery使用append(content)方法注意事项分享
Jan 06 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
May 01 Javascript
js实现iframe跨页面调用函数的方法
Dec 13 Javascript
Angularjs实现多个页面共享数据的方式
Mar 29 Javascript
分享一个插件实现水珠自动下落效果
Jun 01 Javascript
javascript表达式和运算符详解
Feb 07 Javascript
微信小程序如何获知用户运行小程序的场景教程
May 17 Javascript
jquery操作select常见方法大全【7种情况】
May 28 jQuery
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 Javascript
Jquery+javascript实现支付网页数字键盘
Dec 21 jQuery
Javascript添加监听与删除监听用法详解
Dec 19 #Javascript
Javascript 实现图片无缝滚动
Dec 19 #Javascript
使用JavaScript获取地址栏参数的方法
Dec 19 #Javascript
JS获取各种宽度、高度的简单介绍
Dec 19 #Javascript
JQuery右键菜单插件ContextMenu使用指南
Dec 19 #Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
Dec 19 #Javascript
jQuery多级弹出菜单插件ZoneMenu
Dec 18 #Javascript
You might like
DSP接收机前端设想
2021/03/02 无线电
php中判断文件空目录是否有读写权限的函数代码
2012/08/07 PHP
PHP的基本常识小结
2013/07/05 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
PHP时间函数使用详解
2019/03/21 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python中每次处理一个字符的5种方法
2015/05/21 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
python numpy存取文件的方式
2020/04/01 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
优秀技术工人先进材料
2014/02/17 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
优秀校长事迹材料
2014/12/24 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
党员个人年度总结
2015/02/14 职场文书
食堂管理制度范本
2015/08/04 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL