day38—JavaScript的运动基础-匀速运动

转行学开发,代码100天——2018-04-23

一、运动基础框架

JavaScript的运动可以广义理解为渐变效果,直接移动效果等,图网页上常见的“分享到”,banner,透明度变化等。其实现的基本方法就是利用前面学到的定时器。

通过学习,总结一下基本的运动实现——运动框架。

运动框架可以理解为实现元素运动的流程。比如让一个div盒子运动起来,即给其left样式加一个定时器即可。

<input type="button" value="开始运动" id="btn">
    <div id="div1"></div>
<script type="text/javascript">
    var timer =null;
    window.onload = function () {
        var speed =6;//设置移动速度
        var oDiv = document.getElementById(‘div1‘);
        var oBtn = document.getElementById(‘btn‘);
        oBtn.onclick =function(){
            clearInterval(timer);  //运动前需要关闭其他所以定时器
            timer =  setInterval(function(){
                if(oDiv.offsetLeft>300) {  //在指定范围内移动
                    clearInterval(timer);
                }else
                oDiv.style.left = oDiv.offsetLeft+speed+"px";
            },200);
        }
    }
</script>

注意:

1、实现运动时,往往要设置一个速度变量speed,用来控制物体的运动速度。

2、这里能实现在指定范围内的移动,但这里存在一个移动的问题,按照 距离= 速度x时间 ,往往不会恰好在指定位置停止。所以需要设置好停止条件。

3、如果在按钮事件—开始运动之时,连续点击"开始运动“,若没有关闭其他定时器,DIV盒子会越来越快,这就不符合设计要求了。所以在运动前需要添加

clearInterval(timer);

4、这种固定速度的运动方式可以成为匀速运动。5、运动的实现,需要物体绝对定位。position:absolute;top:0;left0;

二、应用案例

2.1 网页“分享到”“反馈”等侧边栏效果。

当鼠标移动到“分享到”区域时,div盒子向左伸出,移开鼠标时,回到原位。

按照前面对运动框架的分析,我们同样需要写一个运动的框架,将其放置到鼠标onmouseover和onmouseout事件中。

CSS样式设置:

*{margin: 0;padding: 0;}

#div1{width: 160px;height: 260px;background: #666;position: absolute;top: 200px;left: -160px;}
 #div1 span{width: 20px;height: 60px;font-size:12px;color:#fff;background: blue;line-height:20px;position: absolute;left:160px; top: 120px;}
        //左移
        function startMove1(){
            var odiv = document.getElementById("div1");
            clearInterval(timer);
            timer= setInterval(function(){
                if (odiv.offsetLeft==0) {
                    clearInterval(timer);
                }else
                {
                    odiv.style.left = odiv.offsetLeft+10+"px";
                }
            },200);
        }
            //右移
            function startMove2(){
                var odiv = document.getElementById("div1");
                clearInterval(timer);
                timer= setInterval(function(){
                    if (odiv.offsetLeft==160) {
                        clearInterval(timer);
                    }else
                    {
                        odiv.style.left = odiv.offsetLeft-10+"px";
                    }
                },200);
            }

然后在鼠标事件中添加事件

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

              //鼠标移入
              oDiv.onmouseover = function(){
                  startMove1();
              };
              //鼠标移出
              oDiv.onmouseout = function(){
                  startMove2();
              };

这样就实现了这个侧边栏的移出移进的动作。

但这并不意为着代码的结果,观察“左移”和“右移”的代码,高度相似,不同之处仅仅在于“偏移量”和“移动速度”。因此,可以考虑将这两种实现方式通过传参来进行优化。

增加参数1:iTarget 目标位置 ;参数2:speed 移动速度

 var timer = null; //设置定时器变量
        var speed = 10; //设置速度变量
        function startMove(iTarget,speed){
            var odiv = document.getElementById("div1");
            clearInterval(timer);
            timer= setInterval(function(){
                if (odiv.offsetLeft==iTarget) {
                    clearInterval(timer);
                }else
                {
                    odiv.style.left = odiv.offsetLeft+speed+"px";
                }
            },200);
        }
             //鼠标移入
              oDiv.onmouseover = function(){
                  // startMove1();
                  startMove(0,10);
              };
              //鼠标移出
              oDiv.onmouseout = function(){
                  // startMove2();
                  startMove(-160,-10);
              };

如此,既能满足基本的功能效果,又能大量优化代码。

原文地址:https://www.cnblogs.com/allencxw/p/8921725.html

时间: 2024-08-29 19:08:21

day38—JavaScript的运动基础-匀速运动的相关文章

Javascript运动基础

javascript的运动非常实用,通过控制需要运动块的实际距离与要到达的距离的关系,结合定时器来控制小方块的各种运动. 运动框架 <!DOCTYPE html><html><head> <title></title> <style type="text/css"> #div1{ width: 100px; height: 100px; position: absolute; top: 50px; left: 50

第八节 JS运动基础

运动基础 让Div运动起来 速度--物体运动的快慢 运动中的Bug 不会停止 速度取某些值会无法停止 到达位置后再点击还会运动 重复点击速度加快 匀速运动(速度不变) 运动框架及应用: 运动框架: 在开始运动时,关闭已有定时器 把运动和停止隔开(if/else) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JS运

【javascript】ajax 基础 --本文转载

[javascript]ajax 基础 什么是 ajax ajax 即"Asynchronous JavaScript and XML"(异步 JavaScript 和 XML),也就是无刷新数据读取. http 请求 首先需要了解 http 请求的方法(GET 和 POST). GET 用于获取数据.GET 是在 URL 中传递数据,它的安全性低,容量低. POST 用于上传数据.POST 安全性一般,容量几乎无限. ajax 请求 ajax 请求一般分成 4 个步骤. 1.创建 a

【JavaScript】02.基础语法学习

[JavaScript]02.基础语法学习 引言: 老农认为(老农是我对自己的昵称),学习任何一门计算机程序语言都要先从它的语法知识开始.计算机程序语言由一堆预定义的字符和书写这些字符的规则组成.这些预定义的字符在语言里面叫做关键字或者保留字,书写这些字符的规则叫做语法. 计算机语言(Computer Lnguage),是指用于人与计算机之间通讯的语言.语言分为自然语言与人工语言两大类.自然语言是人类在自身发展的过程中形成的语言,是人与人之间传递信息的媒介.人工语言指的是人们为了某种目的而自行设

JavaScript之基础-1 JavaScript(概述、基础语法)

一.JavaScript 概述 JavaScript 概念 - JavaScript 是一种运行于 JavaScript解释器/引擎中的解释型脚本语言 - JavaScript 解释器作为JS脚本的运行环境,有如下两种呈现方式 - 独立安装的 JavaScript 解释器; - 嵌入在浏览器内核中的 JavaScript 解释器; - 目前 PC .平板.手机.机顶盒中安装的主要浏览器全部支持JavaScript JavaScript 发展史 - 1992年,Nombas公司为自己的CEnvi软

javascript之正则表达式基础知识小结

javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料. 元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要用“\”来进行转移. 如果记不清楚那些标点符号需要转移,可以在使用标点符号时都使用反斜杠“\” 简单匹配 1.直接量 /javascript/ 匹配带有“javascript”的字符串 比如“javascript is an object-oriented scripting language” 2.[

Javascript的面向对象基础

今天学习了一些关于javascript面向对象的基础,之前在网上也陆续接触过一些,不过都感觉理解的不够透彻,所以今天做一个小结. 首先javascript的面向对象还要从何为对象说起,所谓对象可以看作是一个黑盒子,你并不清除它内部实现功能的原理,但是你只要了解它是如何使用的,并且能够用它自带的功能完成自己想要做的事情,基本上来说这就是面向对象的思想.其实面向对象的思想生活中随处可见,电视机,电冰箱,空调等等,都可以看作是对象,拿一般人来说,无需知道它们的工作原理,但只要按说明书去使用即可. 回归

JavaScript程序设计:基础&#183;PHP&#183;XML

这篇是计算机类的优质首发推荐>>>><JavaScript程序设计:基础·PHP·XML> 内容简介 <华章程序员书库·JavaScript程序设计:基础 PHP XML>从计算机的基础知识开始介绍,涵盖程序设计的基础知识.JavaScript基础知识.JavaScript的循环结构.选择结构.表单.函数和源文件.数组.搜索和排序.文件对象模型和XML.PHP概述及相关知识.<华章程序员书库·JavaScript程序设计:基础 PHP XML>充

运动基础

示例:点击按钮,Div开始移动,当到达特定位置时,停止运动 1,运动的要素是什么 比如 position:absolute; left:0px,改变left使其运动 2,让“物体”持续性的运动,依靠什么 定时器 setInterval() 3,停止的条件是什么 比如offsetLeft==300时,停止运动 要点:关闭定时器 Bug: (1),速度不是距离倍数时,运动过界 如速度为7时,它就是301,它就继续运动下去 解决:>=300 (2),运动停止时,继续点击按钮,物体继续运动 解决:把运动