前端学习篇 -- 基础学习

1、基础

1.1 用户片段

// html.json
{
    
    
  "Print to console": {
    
    
    "prefix": "mh",
    "body": [
      "<!DOCTYPE html>",
      "<html lang=\"zh-CN\">",
      "<head>",
      "\t<meta charset=\"UTF-8\">",
      "\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0,user-scalable=no\">",
      "\t<meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">",
      "\t<meta http-equiv=\"apple-mobile-web-app-capable\" content=\"no\">",
      "\t<meta http-equiv=\"format-detection\" content=\"telephone=no\">",
      "\t<title>Document</title>",
      "</head>",
      "<body>",
      "\t$0",
      "</body>",
      "</html>"
    ],
    "description": "The full sample code - html5."
  },
  "html:5": {
    
    
    "prefix": "h5",
    "body": [
      "<!DOCTYPE html>",
      "<html lang=\"zh-CN\">",
      "<head>",
      "\t<meta charset=\"UTF-8\">",
      "\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
      "\t<meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">",
      "\t<title>Document</title>",
      "</head>",
      "<body>",
      "\t$0",
      "</body>",
      "</html>"
    ],
    "description": "HTML5"
  },
  "script tag": {
    
    
    "prefix": "scr",
    "body": [
      "<script>",
      "\t$0",
      "</script>"
    ],
    "description": "script tag"
  },
  "style tag": {
    
    
    "prefix": "sty",
    "body": [
      "<style>",
      "\t$0",
      "</style>"
    ],
    "description": "style tag"
  }
}
// javascript.json
{
    
    
  "zhushi": {
    
    
    "prefix": "/*",
    "body": [
      "/**",
      " * \t$0",
      " */"
    ],
    "description": "注释"
  }
}
// vue.json
{
    
    
  "vue": {
    
    
    "prefix": "vue",
    "body": [
      "<template>",
        "\t$0",
      "</template>\n",
      "<script>",
      "export default {",
      // "  data() {",
      // "    return {\n",
      // "    }",
      // "  },",
      "  name: '$TM_FILENAME_BASE',",
      "}",
      "</script>\n",
      "<style scoped>\n",
      "</style>"
    ],
    "description": "创建一个自定义的vue组件代码块"
  }
}

1.2 通用属性

1.2.1 meta 标签与 icon
<head>
  <meta charset="UTF-8"> 	字体集gb2312 ,gbk,UTF-8
  <meta name="Generator" content="EditPlus?"> 制作工具是
  <meta name="Author" content=""> 作者是
  <meta name="Keywords" content=""> 关键字,便于搜索
  <meta name="Description" content=""> 网站描述文字
  <title>Document</title>
</head>
<link rel="shortcut icon" href="favicon.ico" />
1.2.2 文本元素
1.<b>加粗文字</b><br>
2.<strong>加粗文字</strong><br>

3.<i>文字倾斜</i>
4.<em>文字倾斜</em>

5.<del>删除文字</del>
6.<s>删除文字</s>

7.<u>文字加下划线</u>
8.<ins>文字加下划线</ins>

9.<sub>下标</sub>
10.<sup>上标</sup>

11.<q>加""</q>
12.英雄ying xiong<ruby>英雄<rt>ying xiong</rt></ruby>
13.<bdo dir="rtl/*从右到左*/">向方子文</bdo>
14.<mark>黄色背景
1.2.3 HTML实体集
不断行的空白           &nbsp;  &#160; 
半个空白(1个字符宽度)  &ensp;  &#8194;	
一个空白(2个字符宽度)  &emsp;  &#8195;		
<     &lt;    &#60;
>     &gt;    &#62;
>     &       &amp;   &#38;4、绝对路径和相对路径
1.2.4 iframe内联框架

主要属性:src;name/id;width;height

<a href="http://www.taobao.com" target="myframe">淘宝</a><br />

<iframe src="http://www.baidu.com" frameborder="1" width="50%" height="50%" name="myframe"></iframe>

1.3 服务器配置

1.3.1 一般步骤
  1. 购买服务器
    • 独立服务器
    • vps主机
    • 虚拟主机
  2. 上传FTP
    • IP地址
    • FTP账号
    • 密码
  3. 网页上传
  4. 申请域名
  5. 域名解析
1.3.2 免费服务器

http://free.3v.do

  1. 注册账号
  2. 记录主机名、用户名、密码、域名
  3. 利用cutftp上传
  4. 在浏览器输入域名,就能访问
1.3.3 github 发布
  1. 仓库名改为 .github.io 后缀
  2. github pages 选第一个,后面的链接就是网址

2、移动web

2.1 新增的h5标签

1.article标签:定义一个独立内容区块:一篇文章、一个视频文件
2.section标签:定义一个区域,如文章的章节等
3.nav标签:定义目录导航
4.aside标签:定义侧边栏
5.figure/figcaption标签:定义一组媒体内容以及它们的标题
6.header/footer标签:定义一个头部/底部
7.hgroup标签:标题分组
8.address标签:地址、联系信息等

2.2 屏幕视口认识

在PC端中,视口就是我们浏览器的大小。

在移动设备上,视口不再受浏览器窗口大小影响。
允许开发者自定义视口大小,通常设备都会有一个默认的视口大小

2.2.1 像素密度(PPI)

所谓像素密度,就是每英寸能够容纳多少个像素。
像素密度越大,那么画面越精细(例如我的82年的iphone)
像素密度越小,那么画面越渣(来,拿出你们的诺基亚)

2.2.2 设备独立像素

设备独立像素,本质上是一个不同设备的像素比例关系,但是注意,不同的设备比例是不一样。而且不由开发者决定,这是屏幕硬件在一开始就设定好的。

可以通过js方法:window.devicePixelRatio 获取

常见苹果设备独立像素比例

设备名 屏幕分辨率 CSS像素 比例关系
iphone 3G 320 * 480 320 * 480 1:1
Iphone 4 640 * 960 320 * 480 2:1
Iphone6/7/8 750*1334 667 * 375 2:1
Iphone plus 1080*1920 414*736 3:1

如果像素比例是1的设备,那就是低清屏幕。
如果像素比例是2的设备,那就是高清屏幕。(第一个视网膜屏幕R屏)
如果像素比例是3的设备,那就是更加高清的,甚至成为超清屏幕。
pc端默认的比例是1:1,但是可以通过滚轮缩放来调整这个比例。

2.2.3 2倍图概念

因为不同设备的像素比例不一样,所以同一张图片在不同设备中显示会有失真效果,变模糊。

为了保证在不同设备中都要清晰的显示,那么就有了多倍图的概念。

例如当一张50 * 50的图片在比例为1的设备上显示的时候,可以正常清晰显示。
但如果这个时候把图片放到比例为2的设备上时,相当于把图片进行了放大,那这个时候就会失真。
所以,一般项目开发中会准备不同规格的图片,也就是1x图,2x图,3x图。
通过js代码判断是什么比例的屏幕,就对应使用什么倍数的图片。

2.3 媒体查询

多媒体查询语法

@media not|only mediatype and (expressions) {     
   CSS 代码...; 
}

not: 用来排除掉某些特定的设备的,比如 @media not print(非打印设备)
only: 用来定某种特别的媒体类型

mediatype >>
all 用于所有多媒体类型设备
print 用于打印机
screen 用于电脑屏幕,平板,智能手机等

expressions >>
最小最大宽度

外联式语法

当浏览区域宽度大于800px的时候,使用link中的css文件

<link rel="stylesheet" href="css/index.css" media="screen and (min-width: 800px)">

内嵌式语法

@media screen and (min-width: 500px) {
    /* 当页面宽度大于500px时,设置背景颜色为红色 */
    body {
        background-color: red;
    }
}

判断最小屏幕,从小到大写,后面会覆盖前面的

判断最大屏幕,从大到小写,后面会覆盖前面的

2.4 防抖和节流

2.4.1 防抖

顾名思义,防止抖动,以免把一次事件误认为多次,敲键盘就是一个每天都会接触到的防抖操作

  1. 登录、发短信等按钮避免用户点击太快,以致于发送了多次请求,需要防抖
  2. 调整浏览器窗口大小时,resize 次数过于频繁,造成计算过多,此时需要一次到位,就用到了防抖
  3. 文本编辑器实时保存,当无任何更改操作一秒后进行保存
// 非立即执行,当用户停止输入一段时间(比如500ms)后才执行发送请求

function debounce (func, time) {
    
    
  let timer = null
  return function (...args) {
    
    
    timer && clearTimeout(timer)
    timer = setTimeout(() => {
    
    
      func.apply(this, args)
    }, time)
  }
}

input.onkeypress = debounce(function () {
    
    
  console.log(input.value) // 事件处理逻辑
}, 500)

// 立即执行
function debounce (func, time) {
    
    
  let timer = null
  let flag = true
  return function (...args) {
    
    
    timer && clearTimeout(timer)
    if (flag) {
    
    
      func.apply(this, args)
      flag = false
    }
    timer = setTimeout(() => {
    
    
      flag = true
    }, time)
  }
}

// 合并版
function debounce (func, time = 500, isImmediate = false) {
    
    
  let timer = null
  let flag = true
  // isImmediate = true 立即执行
  if (isImmediate) {
    
    
    return function (...args) {
    
    
      timer && clearTimeout(timer)
      if (flag) {
    
    
        func.apply(this, args)
        flag = false
      }
      timer = setTimeout(() => {
    
    
        flag = true
      }, time)
    }
  }
  // isImmediate = false 非立即执行
  return function (...args) {
    
    
    timer && clearTimeout(timer)
    timer = setTimeout(() => {
    
    
      func.apply(this, args)
    }, time)
  }
  
}

2.4.2 节流

顾名思义,控制水的流量。控制事件发生的频率,如控制为1s发生一次,甚至1分钟发生一次

  1. scroll 事件,每隔一秒计算一次位置信息等
  2. 浏览器播放事件,每个一秒计算一次进度信息等
  3. input 框实时搜索并发送请求展示下拉列表,没隔一秒发送一次请求 (也可做防抖)
function throttle (f, wait) {
    
    
  let timer = null
  return (...args) => {
    
    
    if (timer) return
    timer = setTimeout(() => {
    
    
      f.apply(this, args)
      timer = null
    }, wait)
  }
}

2.4.3 总结

防抖:防止抖动,单位时间内事件触发会被重置,避免事件被误伤触发多次。代码实现重在清零 clearTimeout

节流:控制流量,单位时间内事件只能触发一次,如果服务器端的限流即 Rate Limit。代码实现重在开锁关锁 timer=timeout; timer=null

2.5 触屏事件

2.5.1 事件类型

touchstart: 开始触摸屏幕

touchmove: 手指移动

touchend: 手指离开

webkitTransitionEnd: 过渡效果完成后触发

touchcancel: 触摸意外中断(如突然打来电话)

2.5.2 事件对象
  1. touches:位于屏幕上的所有手指
  2. targetTouches:位于元素上的所有手指(常用)
  3. changedTouches:touchstart 刚接触的触点,touchend 离开的触点
e.targetTouches[0] //记录第一个手指

2.5.3 手指对象的坐标获取
  1. screenX / screenY: 触点距离屏幕左上角的位置
  2. clientX / clientY: 触点相对当前视口的位置(常用)
  3. pageX / pageY: 相对当前页面内容(包含滚动条)
e.targetTouches[0].v //记录第一个手指的位置

2.6 预处理语言

Sass、Less 、Stylus

2.6.1 Less
  1. 使用

    • 装插件 Easy Less ,保存自动编译

    • npm 安装

      > npm install less
      > lessc styles.less styles.css  //编译
      
      
  2. 语法

    • 变量,只能定义一次,不能重复使用

      @color: #999;
      @bgColor: skyblue;//不要添加引号
      
      
      • 选择器变量

        @Wrap: wrap;
        //变量名 必须使用大括号包裹
        #@{Wrap}{  
            color:#666;
        }
        /* 生成的 CSS */
        #wrap{
            color:#666;
        }
        
        
      • 属性变量

        @borderStyle: border-style;
        @Soild:solid;
        #wrap{
        //变量名 必须使用大括号包裹
            @{borderStyle}: @Soild;
        }
        /* 生成的 CSS */
        #wrap{
            border-style:solid;
        }
        
        
    • 嵌套

      • &,代表的上一层选择器的名字

      • 媒体查询

        #main {
            //something...
            @media screen {
                @media (max-width:768px){
                    width:100px;
                }
            }
            @media tv {
                width:2000px;
            }
        }
        /* 生成的 CSS */
        @media screen and (maxwidth:768px) {
            #main {
                width:100px; 
            }  
        }
        @media tv {
            #main{
                width:2000px;
            }
        }
        
        
  • 属性拼接方法

    +_ 代表的是 空格;+ 代表的是 逗号

       .boxShadow() {
           box-shadow+: inset 0 0 10px #555;
       }
       .main {
           .boxShadow();
           box-shadow+: 0 0 20px black;
       }
       /* 生成后的 CSS */
       .main {
           box-shadow: inset 0 0 10px #555, 0 0 20px black;
       }
    
    
  • 继承

       .animation {
           transition: all .3s ease-out;
           .hide{
               transform:scale(0);
           }
       }
       #main {
           &:extend(.animation);
       }
       #con {
           &:extend(.animation .hide);
       }
       /* 生成后的 CSS */
       .animation,
       #main {
           transition: all .3s ease-out;
       }
       .animation .hide , #con {
           transform: scale(0);
       }
    
    
    • 继承全部

         #main {
             width: 200px;    
             &:after {
               content:"Less is good!";
             }
         }
         
         #wrap:extend(#main all) {}
         
         /* 生成的 CSS */
         #main,
         #wrap {
             width: 200px;
         }
         #main:after, 
         #wrap:after {
             content: "Less is good!";
         }
      
      
  • 导入

       @import "main";
       //等价于
       @import "main.less";
    
    
2.6.2 Sass
  1. Sass 和 Scss 其实是同一种东西,我们平时都称之为 Sass,写法上存在些不同

    • sass 不使用花括号和分号, 所以不被广为接受

      // sass
      #sidebar 
        width: 30%
        background-color: #fff
      
      
    • scss 其语法完全兼容 CSS3,并且继承了 Sass 的强大功能。也就是说,任何标准的 CSS3 样式表都是具有相同语义的有效的 SCSS 文件

      // scss
      #sidebar {
        width: 30%
        background-color: #fff
      }
      
      
  2. 使用

    • 装插件 Easy Sass ,保存自动编译

    • npm 安装

      npm install -g sass //全局安装
      
      
  3. 语法

    • 变量,只能定义一次,不能重复使用

      $color: #fff;
      
      
    • 嵌套

      nav {
        a {
          color: red;
          &:hover {
            color:green;
          }
        }  
      }  
      
      
    • 混合宏

      //声明
      @mixin border-radius{
          -webkit-border-radius: 3px;
          border-radius: 3px;
      }
      //调用
      button {
          @include border-radius;
      }
      
      
    • 继承

      .btn {
          border: 1px solid #ccc;
          padding: 6px 10px;
          font-size: 14px;
      }
      
      .btn-primary {
          background-color: #f36;
          color: #fff;
          @extend .btn;
      }
      
      
    • 导入

      @import "variables"
      //等同于
      @import "variables.scss";
      
      

3、表单

3.1 form 标签

用来定义表单 类似于定义表格的table

3.1.1 form属性

action: 指定表单的发送地址(服务器地址)
method:表单数据发送至服务器的方法,常用的有两种:get/post

3.1.2 get和post的区别

get方法提交,数据会附在网址之后主动提交给服务器
post方法提交,数据不会附在网址后

3.2 input 元素

用来设置表单的内容,比如文本框,按钮等
不仅可以布置在表单中,也可以在表单之外使用

3.2.1 input属性
type属性:指定输入内容的类型,默认为text:单行文本框
name属性:输入内容的识别名称
value属性:默认值
size属性:设置文本框宽度
maxlength属性:输入的最大字数
readonly属性:只读属性,设置内容不可变更,提交时会发送至服务器
formaction:重写表单的action属性
disabled属性:设置为不可用(不可操作)
required属性:设置该内容为必填项,否则无法提交
placeholder属性:设置默认值,当文本框获得焦点是被清空
autofocus属性:自动获得焦点
accesskey属性:指定快捷键,按Alt+“快捷键”,便获得焦点
tabindex属性:指定按Tab键,项目间的移动顺序
autocomplete属性:是否开启浏览器记忆功能
    on/off  

3.2.2 type属性
text:  默认
submit:提交按钮,点击将数据发送至服务器 //只有submit可以提交,而且只提交带有name属性的表单          
reset: 重置按钮
button:普通按钮,默认type属性为submit
image: 图片式提交按钮
    格式:<input type="img" src="1.jpg" />
    
hidden:隐藏字段,该内容不会显示在页面上
    一般为网页设计者设置的变量数据,提交时,隐藏内容会提交到服务器

email:表示要输入一个电子邮箱
url:  表示要输入一个网址
tel:  表示要输入一个电话号码

number:允许输入的最大值/最小值/步长/默认值
    min/max/step/value
    
range:活动条,与number类似

时间类:datetime/time/date/week/month/datetime-local

color:可以建立一个有颜色的文本框
seacrch:建立一个搜索框

file:建立一个文件选取的输入框
    accept: 规定选取类型
    multipe:设定一次允许选择多个文件

cheakbox:建立一个复选框(可以多项选择)
    checked: 默认选择
    name:    属性一定要相同
    
radio:建立一个单选框
    checked:默认选择
    name属性一定要相同

3.3 select 标签

建立一个下拉菜单选项列表
其具体列表项要通过option建立

option属性

selected 默认选定

optgroup:对option元素进行分组
size:定义列表显示的列表项
multiple:定义是否可以多选
可以添加disabled和autofocus属性

3.4 lable 标签

用来为input元素定义标注,建立一个与之关联的标签

//for 属性关联
<label for="A">平面设计</label>
<input type="checkbox" id="A"/> 

//直接包裹
<label><input type="checkbox" />平面设计</label>

optgroup的分组名称

<select>
    <optgroup label="网页设计系列">
        <option value="HTML5">HTML5</option>
        <option value="CAD">CAD</option>
        <option value="ASP.NET">ASP.NET</option>
    </optgroup>
    <optgroup label="编程开发系列">
        <option value="Java">Java</option>
        <option value="JavaScript">JavaScript</option>
    </optgroup>
</select>

3.5 新增的表单属性

3.5.1 form属性

定义所属的一个或多个表单

<form action="demo-form.php" id="form1">
    First name: <input type="text" name="fname"><br>
    <input type="submit" value="提交">
</form>

Last name: <input type="text" name="lname" form="form1">  //所属 form1 表单

3.5.2 formmethod属性

定义表单提交的方式,定义在 type=“submit” 身上

<input type="submit" formmethod="post" formaction="demo-post.php" value="使用 POST 提交">

3.5.3 formtarget属性

指定一个名称或一个关键字来指明表单提交数据接收后的展示,定义在 type=“submit” 身上

<form action="demo-form.php">
    First name: <input type="text" name="fname"><br>
    Last name: <input type="text" name="lname"><br>
    <input type="submit" value="正常提交">
    <input type="submit" formtarget="_blank"
    value="提交到一个新的页面上"> //跟超链接 target 相似,formtarget 默认是_self
</form>

3.5.4 textarea元素

建立多行输入文本框

name/disabled/readonly/...
rows:设置多行文本的行数
cols:设置多行文本的每行显示的字数(宽度)
css属性 resize: none; //防止拖拽文本域

3.5.5 button元素

建立一个按钮,是一个双标签,其内部可以配置图片和文字
type属性:可以设置三个值 submit/reset/button与input元素含义相同,默认是submit

3.5.6 output元素

设置不同的数据输出

<form oninput="num.value=parseInt(num1.value)+parseInt(num2.value)">
    <input type="number" id="num1" />+
    <input type="number" id="num2" />=
    <output name="num" for="num1 num2"></output>
</form>

3.5.7 progress元素

建立一个进度条

max:进度的最大值
value:默认显示值
form:定义所属的一个或多个表单
<progress max="100" value="10"></progress>

3.5.8 meter元素

建立一个度量条,用来表示度量衡的评定

value:默认显示值
max:规定最大值,默认值为1
min:规定最小值,默认值为0
low:规定被视作低的标准
high:规定被视作高的标准
form:定义所属的一个或多个表单
<meter max="100" min="10" low="20" value="20"></meter>

3.5.9 fieldset元素

可将表单内的相关元素分组,通常会有一个边框

<fieldset>
    <legend><h3>用户注册:</h3></legend>
    用户名:<input type="text" />
    密码:<input type="password" />
    <input type="submit" />
</fieldset>

3.5.10 details元素
<details>
    <summary>用户点击</summary><br />
    <meter max="10000" value="8000" low="100" high="1000"></meter><br /><br />
    <meter max="10000" value="5000" low="100" high="1000"></meter><br /><br />
</details>

4、audio 与 video

4.1 audio

<audio controls="controls">
    <source src="video.mp3" type="audio/mp3" />
    <source src="video.webm" type="audio/wav" />
    <source src="video.ogg" type="audio/ogg" />
</audio>

4.2 video

<video controls="controls">
    <source src="video.mp4" type="video/mp4" />
    <source src="video.webm" type="video/webm" />
    <source src="video.ogg" type="video/ogg" />
</video>

4.3 source元素

src:要播放的视频的url地址
controls:controls 向用户显示控件,比如播放按钮
width:
height:
poster:url:视频播放前预览图片
muted:muted 视频自动静音播放
autoplay:autoplay 自动播放 //谷歌禁止,放弃使用
loop:循环播放

this.$refs.audio.volume = 0.2 //音量大小

play:正在播放事件

pause:停止播放事件

5、canvas

设置起点:moveTo(x坐标,y坐标)
设置终点:lineTo(x坐标,y坐标)
开始绘制:stroke()

指定线宽:lineWidth=数值
指定颜色:strokeStyle=“颜色值”

beginPath():用来创建新的路径
closePath():从当前点回到起始点的来封闭路径
fill():绘制一个实心的图形
指定颜色:fillStyle=“颜色值”

绘制矩形

1.rect(x,y,w,h)
2.strokeRect(x,y,w,h)无填充
3.fillRect(x,y,w,h)绘制“被填充”的图形
4.stroke()绘制已定义的路径

绘制圆弧

arc(x,y,r,开始角度,结束角度,true/false)

绘制文字

1.strokeText(“文字”,x,y,maxWith) 绘制空心文字
2.fillText(“文字”,x,y,maxWith) 绘制实心文字
3.字体样式:font=""

绘制渐变色

1.createLinearGradient()创建线性渐变

createLinearGradient(x1,y1,x2,y2)–颜色渐变的起点坐标和终点坐标

addColorStop(位置,“颜色值”)–0表示起点…插入点…1表示终点

2.createRadialGradient(x1,y1,r1,x2,y2,r2) 创建放射状/环形的渐变

绘制阴影

1.shadowOffsetX 设置阴影的水平偏移距离
2.shadowOffsetY 设置阴影的垂直偏移距离
3.shadowBlur 设置阴影的模糊系数
4.shadowColor 设置阴影的颜色

6、跨域解决小办法

1.在电脑上新建一个目录,例如:C:\MyChromeDevUserData

2:创建一个谷歌浏览器的快捷方式

3.在快捷方式上点击右键==》属性==》目标输入框里最后加上 --disable-web-security --user-data-dir=C:\MyChromeDevUserData,–user-data-dir的值就是刚才新建的目录。

3.点击应用和确定后关闭属性页面,并打开chrome浏览器。

再次打开chrome,发现有“–disable-web-security”相关的提示,说明chrome又能正常跨域工作了

猜你喜欢

转载自blog.csdn.net/weixin_44257930/article/details/109011611
今日推荐