学习心得分享/高级特效开发个人总结

一、Rem

1、设置rem 为单位的长宽 或 字体大小

2、寻找一个标准 iphone5 320 / 16

3、比例公式 :标准屏幕宽度 / 标准字体大小 = 新屏幕宽度 / 新的字体大小

        新屏幕宽度 = window.innerWidth

        新的字体大小 = window.innerWidth / (320 / 16)

4、监听窗口大小改变 window  的 'resize' 监听事件 

        监听窗口加载 window 的 'load' 监听事件

5、将新字体的大小设置给html标记

二、等比例缩放

        paddingTop使用百分比作为参数,那么这个百分比主要针对父容器的宽度 

        比例原理:父元素的第一个子元素的paddingTop百分比就是父元素宽度的百分比

三、bootstrap

        是一个用于制作页面界面的框架

1、安装

1. 通过`npm i bootstrap`
在html中引入

<link rel="stylesheet" href="./node_modules/bootstrap/dist/css/bootstrap.css" />
<script src="./node_modules/bootstrap/dist/js/bootstrap.bundle.js"></script>

2. 通过官网下载对应的dist的安装包
 解压后里面有css和js文件

2、布局

<body>
  <!-- 响应式 -->
  <!-- <div class="box"></div> -->

  <!-- 断点 -->
  <!-- container-{breakpoint} -->
  <!-- bg:background -->
  <div class="container bg-danger"> XS (Extra Small) </div>
  <div class="container-sm bg-warning"> SM (Small) </div>
  <div class="container-md bg-info"> MD (Medium) </div>
  <div class="container-lg bg-danger"> LG (Large) </div>
  <div class="container-xl bg-warning"> XL (Extra Large) </div>
  <div class="container-xxl bg-info"> XXL (Extra Extra Large) </div>
  <div class="container-fluid bg-danger"> fluid (Fluid) </div>
</body>

设置断点的列

        col 加断点后,会根据断点的区间切换比例大小

<div class="container-fluid">
			<div class="row">
				<div class="col-sm-6 col-lg-4 bg-danger">1</div>
				<div class="col-sm-6 col-lg-4 bg-warning">2</div>
				<div class="col-sm-6 col-lg-4 bg-info">3</div>
			</div>
		</div>

网格布局

        网格(table=> container tr=> row td => col) 

        网格布局的一行最多只能有 12 列

flex

        父元素设置位置 align-items-{start|center|end|baseline}

        子元素设置位置 align-self-{start|center|end}

        flex-{column|row}          flex:1 = flex-grow:1 + flex-shrink:1

浮动

        float-{breakpoint}-{start:end} 浮动

        float-none 消除浮动影响

color

        text-{color}

        bg-{color}

        btn-{color}

        link-{color}

sizing 尺寸

        w:width  h:height         25 50 75 100 auto

网页全窗口

        vh: viewport(视口) height 100%

        vw: viewport(视口) width 100%

spacing


  <!-- 

      m    margin
      p    padding
      ___
      t    top
      b    bottom
      s    start
      e    end
      x    left & right
      y    bottom & top
      ___
      0
      1
      2
      3
      4
      5
      auto
-->

 3、常见的组件

button、button-group、cards、dropdown、modal、Navbar

dropdown 组件

        dropdown 弹出效果 需要bootstrap.bundle.js

dropdown-menu 菜单列表

4、表单验证

原生的表单验证

        required 必填项的属性

        minlength 最小字符输入个数

        maxlength 最多字符输入个数

        min 数值的最小要求

        max 数值的最大要求

        pattern 要求正则表达式格式

<input type="text" id="stuName" class="form-control" required minlength="2" maxlength="3" />
<input min="16" max="30" type="number" id="stuAge" class="form-control"/>
<input pattern="stu[0-9]{5}" type="text" id="stuID" class="form-control"/> 

自定义原生表单验证

validity 每个表单元素(input select)的验证状态的对象
  validity.valid 只有当表单元素通过校验,valid = true 否则为false
  
  validity.patternMismatch 表单中正则表达式pattern不匹配 返回true
  validity.rangeOverflow 表单中要求数值超出max不匹配 返回true
  validity.rangeUnderflow 表单中要求数值低于min不匹配 返回true
  validity.tooLong 表单中输入的内容超出了maxlength,返回为true
  validity.tooShort 表单中输入的内容低于minlength,返回为true
  validity.typeMismatch 与表单中输入要求type 不匹配,返回为true(type="email" 输入电话)
  validity.valueMissing 如果表单中有required限制,但步步输入 返回为true

bootstrap自动验证

        novalidate 屏蔽掉原生的校验提示,使用bootstrap中的校验提示

        1.对表单标记进行校验属性设置(required min max...)

        2.在表单标记的后方 class为 valid-feedback 的div :当校验成功时,会显示的内容

        3.在表单标记的后方 class为 invalid-feedback 的div :当校验不成功时,会显示的内容

        4.在js中设置表单的事件监听 button form

        5.阻止form事件对象的默认行为 以及冒泡

        6.为form标记添加was-validated class属性

四、懒加载

        

懒加载就是页面中看不到时,就不去加载它,当页面中出现该内容时再去加载

懒加载多用于图片和媒体文件

好处:

        好处在于用户看不见的东西就不用使用浏览器去下载了

        还可以让页面加载更快

// 当 container.scrollTop > img.offsetTop - innerHeight 时,应该加载图片


    let img = document.querySelector('img')
    let container = document.querySelector('.container')

    // 给容器绑定滚动事件
    container.addEventListener('scroll', ev => {
        console.log('scroll')
        // container.scrollTop
        // 当滚动高度足够大,即将显示图片时
        if (container.scrollTop > img.offsetTop - innerHeight) {
            // 取出data-src赋值给图片的src
            img.src = img.getAttribute('data-src')
        }
    })

五、React

React 是一个用于构建用户界面的`JavaScript库`。
用户界面: HTML页面(前端)
React主要用来写HTML页面,或`构建Web应用`
如果从MVC的角度来看, React仅仅是视图层(V ) , 也就是只负责视图的渲染,而并非提供了
完整的M和C的功能

1、JSX(是JS的预编译语言,需要通过babel处理成JavaScript)

1、JSX中的元素的属性需要用驼峰法命名

2、class在JSX中为className for为htmlFor

3、没有子节点的React元素可以用`/>` 结束

4、推荐:使用`小括号包裹JSX`,从而避免JS中的自动插入分号陷阱

5、所有React组件名称均用驼峰法命名

2、渲染

1、条件渲染

// if else 条件渲染
  let isLoading = false
  function Content(){
    if(isLoading){
      return (<h2>正在加载...</h2>)
    }else{
      return (<h2>加载完成</h2>)
    }
  }

// 逻辑与,参与布局中的脚本设置
function Content4(){
    return (<div className="content3">
      {isLoading && (<h2>正在加载...</h2>)}
      </div>)
}

2、列表渲染

const students = [
    {id:1, name:'张三'},
    {id:2, name:'李四'},
    {id:3, name:'王五'}
  ]

  // 将数组渲染至列表中
  function List(){
    return (
      <ul>
        {students.map((item,index) => <li key={index}>{item.name}</li>)}
      </ul>
    )
  }

3、组件的定义方式

  组件的定义方式:1、函数定义组件  2、class定义组件

1、函数组件定义方式: 

        首页字母大写、

        return 返回React元素或者null,返回null时就不显示内容
  注意:return的React元素有且只有一个父级元素作为容器

2、类组件的定义方式:

        使用class 定义一个类,类名必须首字母大写

        使用extends 继承React.Component

        定义一个render函数,作为渲染组件的函数

        在render函数定义return返回值,返回React元素

函数组件又被称为“无状态组件” 类组件又被称为“有状态组件”

4、事件

事件绑定的基本格式 on + 事件名称

        事件名称 用驼峰法命名 比如 onClick onFocus onMouseDown

        在类中调用函数,要使用 this.函数

5、生命周期

意义:组件的生命周期有助于理解组件的运行方式、完成更复杂的组件功能,分析组件错误原因等

         - 组件的生命周期:组件从被创建到挂载到页面中运行,再到组件不用时卸载的过程  

        - 生命周期的每个阶段总是伴随着一些方法调用,这些方法就是生命周期的钩子函数。  

        - 钩子函数的作用:为开发人员在不同阶段操作组件提供了时机。   

        - 只有"类组件"才有生命周期

1、创建时

constructor -> render -> componentDidMount

渲染页面完成前        constructor(1、初始化state,2、绑定事件函数)

渲染页面       render : setState 一旦修改成功,render会执行一次

                        注:render中不能用setState (因为会陷入死循环)

渲染页面完成后         componentDidMount(1、发送网络请求 :ajax axios fetch...

                                                                2、DOM操作: document.querySelector()...)

2、更新时

shouldComponentDidMount->render -> componentDidUpdate

更新时触发条件:

        1、有新的props传入

        2、setState方法被调用(只有组件本身的setState,才能触发组件本身更新事件,不会更新其他组件的更新事件)

        3、forceUpdate(强制重新渲染)执行

3、卸载

卸载生命周期

        一旦组件消失就会调用这个函数

6、Fragments

1、组件中去掉最外层的React元素包裹

2、只留下内部的React元素渲染至指定区域中

 function App(){
    return (
      // <div> 
      //   <h2>组件</h2> 
      //   <h2>组件</h2> 
      // </div>
      <React.Fragment>
        <h2>组件</h2> 
        <h2>组件</h2> 
      </React.Fragment>
      )
  }

7、refs

Ref 主要作用,访问React DOM 结构(非受控组件)

ref在 类组件中的使用

        1、通过React.createRef 创建Ref对象的变量

        2、在指定的React元素中设置ref属性,属性值为上述的变量

        3、通过 变量.current 访问React 元素以及其中内容

函数组件 中的ref使用

        1、通过React.useRef() 创建一个变量

        2、设置React元素中的ref属性,其属性值是上述变量

        3、通过 变量.current 访问React 元素以及其中内容

在React 元素中的ref属性,可以设置一个回调函数

ref = {(el) => {}}        上述的el就是 "变量.current" 就是设置ref属性的React元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值