浅谈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 相关文章推荐
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
Jun 14 Javascript
AngularJS模块管理问题的非常规处理方法
Apr 29 Javascript
jQuery实现网站添加高亮突出显示效果的方法
Jun 26 Javascript
Bootstarp风格的toggle效果分享
Feb 23 Javascript
谈一谈js中的执行环境及作用域
Mar 30 Javascript
BootStrap入门教程(一)之可视化布局
Sep 19 Javascript
javascript入门之数组[新手必看]
Nov 21 Javascript
layui实现点击按钮给table添加一行
Aug 10 Javascript
VUE v-model表单数据双向绑定完整示例
Jan 21 Javascript
微信小程序实现卡片左右滑动效果的示例代码
May 01 Javascript
layui对工具条进行选择性的显示方法
Sep 19 Javascript
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
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
发布一个用PHP fsockopen写的HTTP下载的类
2007/02/22 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python中的rjust()方法使用详解
2015/05/19 Python
Python3搜索及替换文件中文本的方法
2015/05/22 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
python决策树之C4.5算法详解
2017/12/20 Python
Python使用OpenCV进行标定
2018/05/08 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
python-opencv颜色提取分割方法
2018/12/08 Python
Python理解递归的方法总结
2019/01/28 Python
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
python支付宝支付示例详解
2019/08/22 Python
opencv python图像梯度实例详解
2020/02/04 Python
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
研究生自荐信
2013/10/09 职场文书
工程力学硕士生的自我评价范文
2013/11/16 职场文书
农救科工作职责
2013/11/27 职场文书
个人整改方案范文
2014/10/25 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript