浅谈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 给汉字排序实例代码
Jun 28 Javascript
js获取input标签的输入值实现代码
Aug 05 Javascript
弹出最简单的模式化遮罩层的js代码
Dec 04 Javascript
理解js对象继承的N种模式
Jan 25 Javascript
Bootstrap Fileinput文件上传组件用法详解
May 10 Javascript
浅谈jquery点击label触发2次的问题
Jun 12 Javascript
bootstrap 设置checkbox部分选中效果
Apr 20 Javascript
12个非常有用的JavaScript技巧
May 17 Javascript
探究react-native 源码的图片缓存问题
Aug 24 Javascript
解决npm管理员身份install时出现权限的问题
Mar 16 Javascript
详解如何在vue项目中使用lodop打印插件
Sep 27 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
Jun 04 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
收音机的保养
2021/03/01 无线电
ThinkPHP框架安全实现分析
2016/03/14 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
javascript 新浪背投广告实现代码
2009/07/07 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
bootstrap table服务端实现分页效果
2017/08/10 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
vue keep-alive 动态删除组件缓存的例子
2019/11/04 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
浅谈Python NLP入门教程
2017/12/25 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
python+mysql实现教务管理系统
2019/02/20 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
通用C#笔试题附答案
2016/11/26 面试题
Ejb技术面试题
2015/04/29 面试题
终止劳动合同协议书
2014/10/05 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
大学生十八大感想
2015/08/11 职场文书
如何写好闭幕词
2019/04/02 职场文书