zoukankan      html  css  js  c++  java
  • CSS、JavaScript 初心

    目录

    CSS篇

    • 引用外部样式表的方式
    • 选择器
      • 选择器类型
      • 群选择器(,)、通用选择器(*)
    • 伪类和伪元素
    • 页面的逻辑分区 -> div span

    JavaScript篇

    • 面对对象编程
    • 特殊函数和对象
    • AJAX 异步的JavaScript和XML
    • 跨域请求

    CSS篇

    引用外部样式表的方式

    1. 使用HTML链接样式表<link rel="stylesheet" href="uri_of_css">

    2. 使用CSS链接样式表<style> @import uri("uri_of_css") </style>

    <style>
        @import uri("uri_of_css")
    </style>
    

    选择器

    • 选择器类型
    1. 标签选择器        整体控制    *{}
    2. 类选择器        精准控制    *.class{}
    3. ID选择器        更精准的控制    *#id{}
    4. 派生选择器        根据HTML的DOM树族谱关系选择对象
    5. 伪选择器        选择伪类和伪元素
    
    • 群选择器(,)、通用选择器()
      群选择器,在选择一堆具有公共css样式属性的不同对象时,用逗号隔开即可
      通用选择器如其名,选择所有对象,事实上,.class{}等价于
      .class{}

    • DOM
      祖先标签/派生标签、父标签/子标签、同胞标签

    伪类和伪元素

    页面的逻辑分区 -> div span

    div, 即division,和span一样,它们将页面切割成一个个逻辑分区,不过div的display方式是block,span的display方式是inline

    JavaScript篇

    面对对象

    • 什么是对象

    每个对象都具有一系列属性, 还具有特定的可以执行的操作
    从而 field method 构成了对象

    • 三种方式构建对象
        // json -> 适合创建单个对象的场景
        var user = {
            name: "Unknown",
            age: 0,
            show: function () {
                log(`姓名: ${ this.name }, 年龄: ${ this.age }`)
            }
        }
    
        // 工厂方法
        function getUser(name, age) {
            var user = {
                name: name,
                age: age,
                show: function () {
                    log(`姓名: ${ this.name }, 年龄: ${ this.age }`)
                }
            }
            return user
        }
    
        // 构造函数, 构造函数能在lambda表达式中使用this关键字, 同时能捕获构造时的形参, 强烈推荐
        // 调用构造函数必须使用 new 关键字
        function User(name, age) {
            this.name = name
            this.age = age
            this.show = fun => {
                log(`姓名: ${ this.name }, 年龄: ${ this.age }`)
            }
        }
    

    特殊函数和对象

    • eval() 和 Function

    • 简单实现jQuery中的ready()函数
      有时我们需要在head中进行DOM操作,而此时DOM文档并未加载,所以找不到标签导致报错,这时就需要注册window.onload监听事件,把DOM操作放在事件中
      模拟一下$库

    var $ = window.$ || {
        inited: false,
    
        /** 打印日志 */
        log: function (any) {
            console.log(any)
            this.ready(function () {
                var divLog = document.getElementById("log");
                if (divLog !== null) divLog.innerHTML += any + "<hr>"
            })
        },
    
        init: function () {
            thiz = this
            this.ready(function () {
                // 设置inited字段
                thiz.inited = true
                // 设置viewport
                document.head.innerHTML += '<meta content="width=device-width,initial-scale=1.0" name="viewport">'
            })
            return true
        },
    
        ready: function (lambda) {
            if (this.inited) {
                return lambda()
            }
            window.addEventListener("load", lambda)
        },
    
        setTitle: function (title) {
            const nodeTitles = document.querySelectorAll("html head title")
            nodeTitles.forEach(
                function (e) {
                    document.head.removeChild(e)
                }
            )
            const nodeTitle = document.createElement("title")
            nodeTitle.innerText = title
            document.head.appendChild(nodeTitle)
        },
    }
    
    if (!$.init()) {
        alert("warning: init $ failed!")
    }
    

    AJAX 异步的JavaScript和XML

    • xhr: XMLHttpRequest
      AJAX主要通过XMLHttpRequest对象完成,一个简单的AJAX请求如下:
            function ls() {
                var xhr = new XMLHttpRequest();
                console.log(`${xhr.readyState} -> UNSET 对象创建完成`);
                xhr.open(method = "GET", url = "http://baidu.com:8888");
                xhr.timeout = 2000
                xhr.ontimeout = event => {
                    console.log("timeout")
                }
                console.log(`${xhr.readyState} -> OPENED 已设置open目标`);
                xhr.addEventListener(
                    "readystatechange", event => {
                        switch (event.target.readyState) {
                            case 2:
                                console.log(`${xhr.readyState} -> HEADERS_RECEIVED 已调用send方法`);
                                break;
                            case 3:
                                console.log(`${xhr.readyState} -> LOADING 接收response中`)
                                break;
                            case 4:
                                console.log(`${xhr.readyState} -> DONE response接收完毕`);
                                break;
                            default:
                                console.log("Unknown state")
                        }
                    }
                )
                xhr.send();
            }
    

    请求超时:

    0 -> UNSET 对象创建完成
    1 -> OPENED 已设置open目标
    4 -> DONE response接收完毕
    timeout
    

    请求完成:

    0 -> UNSET 对象创建完成
    1 -> OPENED 已设置open目标
    2 -> HEADERS_RECEIVED 已调用send方法
    3 -> LOADING 接收response中
    4 -> DONE response接收完毕
    

    跨域请求

    • 访问控制允许来源

    可变参数 arguments

    JavaScript具有强大的灵活性,字段的访问是通过String来匹配的,通过运算符[]来完成,这为可变参数的实现提供了便利
    可以这样遍历传入函数的参数:

    function f() {
      console.log(arguments)
      console.log(arguments.length)
      for (var key in arguments) {
        console.log(`${key} -> ${arguments[key]}`)
      }
    }
    
    f('a', 'b', 'c')
    
    // output:
    [object Arguments] {
      0: "a",
      1: "b",
      2: "c"
    }
    3
    "0 -> a"
    "1 -> b"
    "2 -> c"
    

    现在可以用arguments[0]、arguments['1']来依次获取第1、2个参数

    END

  • 相关阅读:
    软件产品案例分析(团队)
    Beta 冲刺 (2/7)
    Beta 冲刺 (1/7)
    机器学习笔记
    第一次作业
    机器学习第一个次个人作业
    软工实践个人总结
    第10组 Beta版本演示
    第10组 Beta冲刺(5/5)
    第10组 Beta冲刺(4/5)
  • 原文地址:https://www.cnblogs.com/develon/p/11725687.html
Copyright © 2011-2022 走看看