浅谈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 延迟加载技术(lazyload)简单实现
Jan 17 Javascript
Javascript判断对象是否相等实现代码
Mar 18 Javascript
javascript学习笔记(二)数组和对象部分
Sep 30 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
Apr 17 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
Feb 03 Javascript
jQuery如何获取动态添加的元素
Jun 24 Javascript
TypeScript学习之强制类型的转换
Dec 27 Javascript
使用jQuery,Angular实现登录界面验证码详解
Apr 27 jQuery
Vue组件中prop属性使用说明实例代码详解
May 31 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
Oct 29 Javascript
js实现右键弹出自定义菜单
Sep 08 Javascript
vue 防止页面加载时看到花括号的解决操作
Nov 09 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
PHP与SQL注入攻击[二]
2007/04/17 PHP
php echo 输出字符串函数详解
2010/05/13 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
以一段代码为实例快速入门Python2.7
2015/03/31 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
NULL是什么,它是怎么定义的
2015/05/09 面试题
思想汇报格式
2014/01/05 职场文书
校园新闻广播稿
2014/01/10 职场文书
机械个人求职信范文
2014/01/24 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
项目经理任命书内容
2014/06/06 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
幼师自荐信范文
2015/03/06 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
倡议书范文大全
2015/04/28 职场文书
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript