浅谈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 相关文章推荐
javascript检查表单数据是否改变的方法
Jul 30 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
May 28 Javascript
jquery实现平滑的二级下拉菜单效果
Aug 26 Javascript
jQuery validate插件实现ajax验证重复的2种方法
Jan 22 Javascript
原生JavaScript实现Ajax的方法
Apr 07 Javascript
AngularJS变量及过滤器Filter用法分析
Nov 22 Javascript
jQuery模拟下拉框选择对应菜单的内容
Mar 07 Javascript
JavaScript表单验证实现代码
May 22 Javascript
BootStrap Select清除选中的状态恢复默认状态
Jun 20 Javascript
BootStrap selectpicker后台动态绑定数据的方法
Jul 28 Javascript
jQuery实现所有验证通过方可提交的表单验证
Nov 21 jQuery
vue+webpack实现异步组件加载的方法
Feb 03 Javascript
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
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
php简单统计中文个数的方法
2016/09/30 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
python与mysql数据库交互的实现
2020/01/06 Python
python中图像通道分离与合并实例
2020/01/17 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
2015年教学副校长工作总结
2015/07/22 职场文书
寒假生活随笔
2015/08/15 职场文书
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript
使用Redis实现分布式锁的方法
2022/06/16 Redis