JavaScript基础

Javascript

概述

  • 概念: 一门客户端脚本语言 * 运行在客户端浏览器中的。每一个浏览器都有JavaScript的解析引擎 * 脚本语言:不需要编译,直接就可以被浏览器解析执行了
  • 功能: * 可以来增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户的体验。
  • JavaScript发展史:

    ​ 1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单的校验。命名为 : C-- ,后来更名为:ScriptEase

    ​ 1995年,Netscape(网景)公司,开发了一门客户端脚本语言:LiveScript。后来,请来SUN公司的专家,修改LiveScript,命名为 JavaScript

    ​ 1996年,微软抄袭JavaScript开发出JScript语言

    ​ 1997年,ECMA(欧洲计算机制造商协会),制定出客户端脚本语言的标准:ECMAScript,就是统一了所有客户端脚本语言的编码方式。

    JavaScript = ECMAScript + JavaScript自己特有的东西(BOM+DOM)
    
  • ECMAScript:客户端脚本语言的标准

  • DOM(Document Object Model):文档对象模型,操作元素。

  • BOM(Browser Object Model):浏览器对象模型,操作浏览器。

基本语法:

与html结合方式
内部式: 定义<script>,标签体内容就是js代码。
行内式: 定义标签内。

外部式:将JS代码写到一个扩展名为.js的文件中,再将该文件导入到指定的HTML文件中。

内嵌式:将JS代码写在<script>标签中。<script>可以写在页面任意位置。

<script>可以定义在html页面的任何地方。但是定义的位置会影响执行顺序。
<script>可以定义多个。

  • 注释
    • 单行注释://
    • 多行注释:// 内容 //
  • 数据类型:
    • 基本数据类型:
      • Undefined:值只有undefined,定义的变量未给初始值时,就是undefined。
      • Null:值只有null,Undefined是Null派生出来的。ECMAScript将之列为等值。
      • Number:任意数值
      • Boolean:布尔值
      • String:字符串
        • 查看变量名:valueof()
  • 变量
    • 变量:一小块存储数据的内存空间
    • Java是强类型语言,而JavaScript是弱类型语言
    • 强类型:在变量开辟内存空间时,定义了空间,将来存储数据的数据类型。只能存储固定类型的数据。
    • 弱类型:在变量开辟存储空间时,不定义空间为将来的存储数据类型,可以存放任意类型的数据。
  • 运算符
    • 算术运算符:+ - * / % ++ --
    • 赋值运算符:= += -= *= /= %=
    • 比较运算符:> >= <= < == !=
    • 逻辑运算符:&& || !
    • 条件运算符:?
      • var c = a > b ? 1 : 0(同Java)
  • 分支结构

    • 单分支:if
    • 双分支:if{ }else{ }
    • 多分支:if{ }else if{ }else{ }
    • 等值多分支:switch( ){ case: break}
  • 循环语句

    • while
    • do while
    • for
    • foreach(增强for循环)
  • JavaScript特殊语法

    • 语句以 “ ; ” 结尾,如果一行只有一条语句则 “ ; ” 可以省略。
    • 定义变量使用var 关键字,也可以不用
      • var a:定义的局部变量
      • a:定义的全局变量
  • 数组

    • 创建数组
    • 创建有长度的数组
    • 创建有初始值的数组
          /* 数组的初始化 */
          var arr = new Array();
          /*有长度的数组*/
          var arr1 = new Array(6);
          /*有初始值的数组*/
          var arr2 = ["one", "two", "three"];
    
  • Date对象

    • var date = new Date();
    • 方法:
      • toLocaleString():返回当前date对象对应的时间本地字符串格式
      • getTime():获取毫秒值。返回当前如期对象描述的时间到1970年1月1日零点的毫秒值差
  • Math
    • Math.方法名()
    • 方法:
      • random():返回 0 ~ 1 之间的随机数。 含0不含1
      • ceil(x):对数进行上舍入。
      • floor(x):对数进行下舍入。
      • round(x):把数四舍五入为最接近的整数。

JavaScript函数

  • 有参函数语法:

    function 函数名(){

    ​ 函数体

    }

  • 无参函数语法:

    function 函数名(形参1,形参2...){

    ​ 函数体

    }

  • 有返回值的函数语法:

    function 函数名(){

    ​ 函数体;

    ​ return ...;

    }

JavaScript事件及绑定

  • 常用:

    • onblur:元素失去焦点
    • onchange:域的内容被改变
    • onclick:当用户点击某个对象时调用的事件句柄
    • onfocus:元素获得焦点
    • onkeydown:某个键盘被按下
    • onkeyup:某个键盘的按键被松开
    • onmouseout:鼠标从某元素移开
    • onmouseover:鼠标移到某元素之上
    • onsubmit:确认按钮被点击
  • 事件绑定

    1. 直接在标签上使用对应的属性

      <input type="button" value="btn" onclick="show()" />
      
  1. 先找到要绑定事件的标签,再给它绑定事件

    var btn = document.getElementById("btn");
    btn.obclick = function(){
       alert("你点我!!!")
    }
    
  1. 焦点事件(通常对输入框使用)

    <input type="text" onfocus="getFocus()" onblur="getBlur()" />
    
  1. 鼠标事件

    var text = document.getElementById("text");
    text.onmouseout = function(){
        alert("鼠标移开了");
    }
    
    text.onmouseover = function(){
        alert("鼠标移上了");
    }
    
  1. 键盘事件

    <input type="text" onkeydown="down()" onkeyup="up()" />
    
  1. 内容改变事件(通常对下拉列表使用)

    <select name="city" id="city" onchange="Linkage()">
       <option value="河南">河南</option>
       <option value="上海">上海</option>
       <option value="北京">北京</option>
       <option value="四川">四川</option>
    </select>&nbsp;省
    

DOM查找元素

  • 常用方法
    • document.getElementById(“id”),通过id属性的值查找指定的元素
    • document.getElementsByName(“name”),通过name属性的值查找指定的元素,因为name属性值可以重复,所以返回的是元素数组
    • document.getElementsByClassName(“class”),通过class属性的值查找指定的元素,因为class属性值可以重复,所以返回的是元素数组
    • document.getElementsByTagName(“标签名”),通过标签名查找指定的元素,因为标签名可以重复,所以返回的是元素数组
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>JavaScript 表单选择器</title>
    </head>
    <body>
        <div class="content" style="margin: auto;padding-left: 45%;padding-top: 15%;">
            <form action="demo7.html" method="post" onsubmit="return validate()">
                <p>username:<input type="text"  id="username"  /></p>
                <p>password:<input type="text"  id="password"  /></p>
                <p><input type="submit" id="submit" value="login" /></p>
            </form>
            <br>
            <br>
            <p><input type="checkbox" name="hobby" value="全选" id="selectAll" />全选</p>
            <p><input type="checkbox" name="hobby" value="唱歌" />唱歌</p>
            <p><input type="checkbox" name="hobby" value="跳舞" />跳舞</p>
            <p><input type="checkbox" name="hobby" value="游泳" />游泳</p>
            <p><input type="checkbox" name="hobby" value="阅读" />阅读</p>
            <br>
            <br>
            <p id="text">冲冲</p>
            <p><input type="text" id="have" value="" /></p>
            <p><input type="button" id="change" value="修改" /></p>
        </div>
    </body>
    <script type="text/javascript">
        
        var submit = document.getElementById("submit");
        var selectAll = document.getElementById("selectAll");
        var change = document.getElementById("change");
        
        selectAll.onclick = function(){
            var hobbys = document.getElementsByName("hobby");
            for(var i = 0; i < hobbys.length; i++){
                hobbys[i].checked = this.checked;
            }
        }
        
        function validate(){
            var username = document.getElementById("username").value;
            var password = document.getElementById("password").value;
            
            if(username == null || username == ""){
                alert("username is null")
                return false;
            }
            
            if(password == null || password == ""){
                alert("password is null");
                return false;
            }
            
            return true;
        }
        
        change.onclick = function(){
            var text = document.getElementById("text");
            
            console.log(text.innerText);
            
            text.innerText = "修改后:" + document.getElementById("have").value;
        }
    </script>
</html>

DOM修改元素

  • 常用方法
    • innerHTML
    • innerText
    • 区别:
      • 取内容时:innerText只能获取纯文本;innerHTML既可以获取文本,也可以获取标签
      • 设置内容时:innerText只能设置纯文本,哪怕设置内容中有标签,也会以纯文本的形式放进去。innerHTML既能设置文本,也能放标签,放进去的标签会被浏览器解析。

BOM

2020-08-23_102700.jpg
  • frames:框架对象
  • location:地址对象
  • document:文档对象
  • history:历史对象
  • navigator:浏览器信息对象
  • screen:屏幕对象

Window定时器

  1. 周期定时器

    var timeid = window.setInterval(function,time)。每隔多少时间执行某函数

    <!DOCTYPE html>
    <html>
     <head>
         <meta charset="utf-8">
         <title>轮播图</title>
         <style type="text/css">
             #image{
                 display: none;
             }
         </style>
     </head>
     <body>
         <img src="../static/images/A%20(2).jpg" width="400px" height="400px" id="images" >
         <img src="../static/images/A%20(3).jpg" width="400px" height="400px" id="image" >
         
     </body>
     <script type="text/javascript">
         
         var  i = 1;
         
         function changeImg(){
             var img = document.getElementById("images");
             
             img.src = "../static/images/A%20(" + i + ").jpg";
             
             if(i < 5){
                 i++;
             }else{
                 i = 1;
             }
         }
         
         window.setInterval(changeImg, 1000);
         
         function show(){
             var img1 = document.getElementById("image");
             img1.style.display = "inline-block";
         }
         
         // 延迟加载
         window.setTimeout(show, 1000);
     </script>
    </html>
    
    
  1. 超时定时器

    var timeid = window.setTimeout(function,time);多少时间后执行某函数。

    <!DOCTYPE html>
    <html>
     <head>
         <meta charset="utf-8">
         <title>显示系统时间</title>
     </head>
     <style type="text/css">
         #time{
             width: 5rem;
             height: 2rem;
             background-color: #000000;
             color: #ffffff;
             font-size: larger;
         }
     </style>
     <body>
         <div id="time"></div>
         
         <p><input type="button" id="btn" value="停止刷新" />&nbsp;&nbsp;<input type="button" id="btn0" value="continue" /></p>
     </body>
     <script type="text/javascript">
         window.onload = showTime();
         
         var timed = window.setInterval(showTime, 1000);
          
         function showTime(){
             var today = new Date();
             var hour = today.getHours();
             
             var minute = today.getMinutes();
             
             var sencond = today.getSeconds();
             
             var time = document.getElementById("time");
             
             time.innerText = hour + ":" + minute + ":" + sencond;
         }
         
         // 清除周期定时器
         var btn = document.getElementById("btn");
         btn.onclick = function(){
             window.clearInterval(timed);
         }
         
         // 设置周期定时器
         document.getElementById("btn0").onclick = function(){
             timed =  window.setInterval(showTime, 1000);
         }
     </script>
    </html>
    

window弹窗

  1. 警告窗

  2. 确认窗

  3. 提示窗

    <!DOCTYPE html>
    <html>
     <head>
         <meta charset="utf-8">
         <title>window弹窗</title>
     </head>
     <body>
         <p><input type="button" id="btn1" value="alert()" /></p>
         <p><input type="button" id="btn2" value="confirm()" /></p>
         <p><input type="button" id="btn3" value="prompt()" /></p>
     </body>
     <script type="text/javascript">
         var btn1 = document.getElementById("btn1");
         var btn2 = document.getElementById("btn2");
         var btn3 = document.getElementById("btn3");
         
         btn1.onclick = function(){
             window.alert("警告 warning");
         }
         
         btn2.onclick = function(){
             var flag = window.confirm("你确定要删除吗?");
             
             if(flag){
                 alert("已删除");
             }else{
                 alert("您取消了删除。")
             }
         }
         
         btn3.onclick = function(){
             
             var username = window.prompt("请输入你的姓名:", "");
             if(username != null){
                 alert(username + ",欢迎你!")
             }
         }
     </script>
    </html>
    
    

window其他对象

  1. location对象

    location.href:返回当前页面的URL

    location.hostname:返回web主机域名

    location.pathname:返回当前页面的路径或文件名

    location.protocol:返回使用的web协议

    location.port:返回web主机的端口

  1. history对象

    history.back()

    history.forward()

  1. screen对象

    screen.availWidth():可用屏幕宽度

    screen.availHeight():可用屏幕高度

  2. Document对象

    document.body.offsetWidth:网页可见区域宽度(包括连线的宽)

    document.body.offsetHeight:网页可见区域高度(包括连线的高)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>动的小球</title>
        <style type="text/css">
            body {
                padding: 0;
                margin: 0;
                background-image: linear-gradient(to right, #ff8177 0%, #ff867a 0%, #ff8c7f 21%, #f99185 52%, #cf556c 78%, #b12a5b 100%);   
                overflow: hidden;
                height: 100%;
            }
            html{
                height: 100%;
            }

            #ball {
                width: 100px;
                height: 100px;
                /* 玛瑙灰 */
                background-color: #cfccc9;
                border-radius: 50%;
            }
        </style>
    </head>
    <body>
        <div id="ball"></div>
    </body>
    <script type="text/javascript">
        
        window.onload = function() {
            // 获取网页可见区域的宽度
            var width = document.body.offsetWidth;
            var height = document.body.offsetHeight;
            
            
            alert(height);
            
            var ball = document.getElementById("ball");

            var pinball1 = 0;
            var pinball2 = 0;


            turn_right();
            turn_bottom();

            function turn_left() {
                ball.style.marginLeft = pinball1 + "px";
                pinball1--;
                if (pinball1 <= 0) {
                    window.setTimeout(turn_right, 5);
                } else {
                    window.setTimeout(turn_left, 5);
                }
            }

            function turn_right() {
                ball.style.marginLeft = pinball1 + "px";
                pinball1++;
                if (pinball1 >= width - 100) {
                    window.setTimeout(turn_left, 5);
                } else {
                    window.setTimeout(turn_right, 5);
                }
            }

            function turn_top() {
                ball.style.marginTop = pinball2 + "px";
                pinball2--;
                if (pinball2 <= 0) {
                    window.setTimeout(turn_bottom, 5);
                } else {
                    window.setTimeout(turn_top, 5);
                }
            }

            function turn_bottom() {
                ball.style.marginTop = pinball2 + "px";
                pinball2++;
                if (pinball2 >= height - 100) {
                    window.setTimeout(turn_top, 5);
                } else {
                    window.setTimeout(turn_bottom, 5);
                }
            }
        }
    </script>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342