初探JavaScript(三)——JS带我碰壁带我飞

  已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入。到目前为止已经看完《JavaScript Dom 编程艺术》(ps:看过书评,网友对其褒贬不一,个人感觉还是不错的,适合初学者。不是每本书都能得到所有读者的认可,只能让部分适合的读者对其称赞,而我,就是其中一个)。

  前面介绍了JavaScript的一些常用方法,如何与DOMHTML配合完成一些交互。今天主要介绍JavaScript在动画效果方面的处理,以及通过自己在书中例子的一个延伸来视觉感受下JavaScript的动画效果。

  序言:一个网页或网站的组成就前端呈现来说,也是有其结构、章法可循的。涉及到的技术或元素主要有:HTMLDOMJavaScriptCSS等。按照结构来分,可以分为以下三个部分:

    1.结构层:一个网页的结构层主要由HTML或XHTML之类的标记语言负责创建。成对出现的标记如“<h1></h1>”用于描述网页内容。

    2.表示层:网页的表示层由CSS负责创建,CSS主要用于解决网页中的元素如何显示的问题,比如字体、颜色、位置。

    3.行为层:网页的行为层主要有今天提到的JavaScript和DOM负责,用于解决网页元素对事件的反应

  除去一些CSS伪类不说,如果我们希望实现随着事件的变化不断操控网页元素的样式,这个活就非JavaScript莫属了。JavaScript脚本能够按照预定的时间间隔重复调用一个函数。

  书中通过一个setTimeout()函数来演示JavaScript如何让元素随时间而动。

<html>
<head>
</head>
<body>
<p id = "message">Don‘t laugh, I can move, really!!!</p>
<script>

function positionMessage(){
var rows = document.getElementById("message");
    alert("1");
    rows.style.position = "absolute";
    rows.style.left = "100px";
    rows.style.top = "100px"
    movement = setTimeout("moveMessage()",10);
}
function moveMessage(){
    alert("2");
    if(!document.getElementById) return false;
    if(!document.getElementById("message")) return false;
    var elem = document.getElementById("message");
    var xpos = parseInt(elem.style.left);//将字符串转换为整型,如"100px"->100
    var ypos = parseInt(elem.style.top);
    if(xpos == 200 && ypos == 200){
        return false;//书中是return true,但是会出现<p>位置达到200时还会弹出js提示框的情况,写成return false就不会。
    }
    if(xpos < 200){
        xpos++;
    }
    if(xpos > 200){
        xpos--;
    }
    if(ypos < 200){
        ypos++;
    }
    if(ypos > 200){
        ypos--;
    }
    elem.style.left = xpos + "px";
    elem.style.top = ypos + "px";
    movement = setTimeout("moveMessage()",10);//每隔10毫秒,调用一次moveMessage()函数
}
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != ‘function‘) {
        window.onload = func;
    } else {
        window.onload = function() {
        oldonload();
        func();
        }
    }
}
addLoadEvent(positionMessage);
addLoadEvent(moveMessage);
</script>
</body>
</html>

  

  其中:addLoadEvent()函数主要用于加载函数,使得这些被加载进来的函数在网页加载后执行(防止因为在JS使用了页面元素,但是页面又没有完成加载,无法找到相应元素的情况);positionMessage()函数设定了一个初始位置;moveMessage()函数用于监控<p>元素的位置并不断更新其位置。

  执行过程图如下:

  (1)起始位置:

  (2)执行positionMessage后的位置:

  (3)执行完moveMessage后的最终位置:

  延伸:写完这段代码,不禁要想,如果让这段“Don‘t laugh,I can move,really”文字一直移动会是什么效果,能不能做个反弹,这样就可以想见是一个屏保程序的模型了,先上代码。

 1 <html>
 2 <head>
 3 <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
 4 <title>Just Move</title>
 5 <style>
 6 #rectanle {width:50px;height:50px;border:5px blue solid;position:absolute;}
 7 </style>
 8 </head>
 9 <body>
10 <div id="rectanle""></div>
11 <script>
12 var flagX = true;
13 var flagY = true;
14 function addLoadEvent(func){
15     var oldonload=window.onload;
16     if(typeof window.onload!=‘function‘){
17         window.onload=func;
18     }else{
19         window.onload=function(){
20             oldonload();
21             func();
22         }
23     }
24 }
25 function positionMessage(){
26     var para = document.getElementById("rectanle");
27     alert("Go");
28     para.style.position = "absolute";
29     para.style.left = "50px";
30     para.style.top = "50px";
31
32 }
33 function moveMessage(){
34     var para = document.getElementById("rectanle");
35     var xpos = parseInt(para.style.left);
36     var ypos = parseInt(para.style.top);
37     var width = document.body.clientWidth-100;
38     var height = document.body.clientHeight-100;
39     if(flagX){
40         if(xpos <= width){
41             xpos++;
42         }
43         else{
44             flagX = false;
45         }
46     }else{
47         if(xpos>0){
48             xpos--;
49         }
50         else{
51             flagX = true;
52         }
53     }
54     if(flagY){
55         if(ypos <= height){
56             ypos++;
57         }
58         else{
59             flagY = false;
60         }
61     }else{
62         if(ypos > 0){
63             ypos--;
64         }else{
65             flagY = true;
66         }
67     }
68     para.style.left = xpos + "px";
69     para.style.top = ypos + "px";
70     moment = setTimeout("moveMessage()",10);
71 }
72 addLoadEvent(positionMessage);
73 addLoadEvent(moveMessage);
74 </script>
75 </div>
76 </body>
77 </html>

  

  相比上面的例子,这里:

  1.将文字的<p>标记换成一个<div>版的框,加了一个CSS样式

  2.在moveMessage添加了两个布尔变量,用于控制方框在达到边界时可以反弹,朝相反的方向移动,自己一开始的代码如下:

if(xpos < 55){
    xpos++;
}
if(xpos > 55){
    xpos--;
}

if(ypos < 55){
    ypos++;
}
if(ypos > 55){
    ypos--;
}

  

  这是一种没法实现碰壁反弹效果的代码。通过debug调试我们可以发现,假设当前位置是x:50 y:50,当执行到xpos也ypos都为55的时候就会一直在55上下徘徊,在网页中表现就是一直停滞在x:55 y:55的位置,究其原因还是缺少一个控制变量作为一个开关,控制方框在反弹后相应的x或y轴上坐标会增加或减少(不知道我有没有讲清楚,不行的话自己写代码,然后debug)。

  程序的执行过程图部分如下:

  后续要向AngularJS挺近啦!!!

  本文链接:《初探JavaScript(三)——JS带我碰壁带我飞

  如果对你有用,欢迎点赞哦,也欢迎加群讨论。

时间: 2024-10-11 12:16:37

初探JavaScript(三)——JS带我碰壁带我飞的相关文章

初探JavaScript(四)——JS另类的作用域和声明提前

前言:最近恰逢毕业季,千千万万的学生党开始步入社会,告别象牙塔似的学校生活.往往在人生的各个拐点的时候,情感丰富,感触颇深,各种对过去的美好的总结,对未来的展望.与此同时,也让诸多的老“园”工看完这些小年轻的文章后感触良多,不禁也要写上几笔,所以就出来了很多类似“毕业两年小记”.“毕业五年有感”…… 可能就是某篇博文的一句话,某碗心灵鸡汤就拨动了你心里的那根尘封已久的弦,让你情不自禁的点了个赞,还忍不住的要在下面评论区留下自己此刻心潮澎湃的印记. 我今天不是来送鸡汤的,鸡汤虽好,可不要贪杯哦.

初探JavaScript(二)——JS如何动态操控HTML

除去五一三天,我已经和<JavaScript Dom编程艺术>磨合了六天,第一印象很好.慢慢的,我发现这是一块排骨,除了肉还有骨头.遇到不解的地方就会多看几遍,实在不懂的先跳过,毕竟,初次接触JS,没有必要花费过多时间去钻死胡同,先混个脸熟,以后再来拜访也未尝不可嘛.就这样,踉踉跄跄.囫囵吞枣似的已经过五关斩六将,到达第十一章. 书中有几个章节并没有从语法.技术等层面介绍JavaScript,而是站在一个全局的角度,立足编程原则和习惯道破了我们该如何看待和使用这门语言,主要有以下几点: Jav

初探JavaScript(一)——也谈元素节点、属性节点、文本节点

Javascript大行其道的时候,怎么能少了我来凑凑热闹^_^ 基本上自己对于js的知识储备很少,先前有用过JQuery实现一些简单功能,要论起JS的前世今生,来龙去脉,我就一小白.抱起一本<Javascript Dom编程艺术>,开始慢慢走近JS,与它套近乎,今天是第三天了,从目前来看,比较好相处.就此动笔,是一个回忆复习的过程,权当是自己的一份读书笔记. JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型,已经被广泛用于Web应用开发,常用来为网

第十二篇 JavaScript(简称JS) 实现显示与隐藏

JavaScript JavaScript简称JS.JS是脚本语言,它是一种轻量级的编程语言,是可以插入HTML页面的编程代码,几乎所有现代浏览器都是支持的. 理论老师不行,我就抄袭手册上的一些关键字段给大家,然后我们写代码来学习. JS也和CSS一样,是可以外部引用的,但是CSS用的是link标签,而JS用的则是script标签,和CSS一样,要写在head标签里哦,引用文件都要写在这里的. 我们来写一个看看: <head lang="en"> <script sr

JavaScript(1) -- JS入门

1.   JavaScript介绍 JavaScript是属于HTML与Web的解释性编程语言,也是一种以函数优先的弱类型轻量级的脚本语言,无需进行预编译即可与HTML前端页面进行行为交互,支持跨平台运行,可在多种平台下(如Windows.Linux.Mac.Android.iOS等).目前JavaScript被广泛地应用于Web前端Html实现页面交互.实现浏览器页面事件响应.前端数据验证.检验访客浏览器信息.控制cookies的创建与修改.基于Node.js技术进行服务器端编程. 2.  

JavaScript学习笔记 -- 带参数arguments的函数的用法

JavaScript函数有带参数与不带参数两种形式,不带参数情况如下: function myFunction() { alert('HelloWorld!') } 在这种类型的函数中,输出值是确定的,即明确清楚或可以直接看出输出结果.那么带参数的函数的情况呢,什么时候需要用到参数,为什么要用,好处在哪里?首先我们来看一个简单设置边框颜色的函数,如下: <!DOCTYPE html> <html lang="en"> <head> <meta

轻松学习JavaScript三:JavaScript与HTML的结合

HTML中的JavaScript脚本必须位于<script>与</script>标签之间,JavaScript脚本可被放置在HTML页面的 <body>标签和<head>标签中,这种视情况而定,一般放在<head>标签内. 一<script> 标签 如需在HTML页面中插入JavaScript脚本,请使用<script>标签.<script>和</script>会告诉JavaScript在何处开始

css和js带参数(形如.css?v=与.js?v= 或 .css?version=与.js?version=)

1 <span style="font-size:14px;">css和js带参数(形如.css?v=与.js?v= 或 .css?version=与.js?version= ) 2 3 <script type=”text/javascript” src=”jb51.js?version=1.2.6″></script> 4 <link rel=’stylesheet’ href=’base.css?version=2.3.3′ type=’

【JavaScript】JS跨域设置和取Cookie

cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 来创建和取回 cookie 的值.本文主要JS怎样读取Cookie以及域的设置. AD: 在Javascript脚本里,一个cookie 实际就是一个字符串属性.当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称和值.每个cookie除了 name名称和value值这两个属性以外,还有四个属性.这些属性是: