大文件分片上传
大文件上传 第一种:不考虑使用多线程。
1 | const inputFile = document.querySelector('input[type="file"]'); |
大文件上传 第二种:使用多线程(worker)。
1 | const inputFile = document.querySelector('input[type="file"]'); |
worker.js
1 | // import {createChunk} from './newcar.js' |
1 | const inputFile = document.querySelector('input[type="file"]'); |
1 | const inputFile = document.querySelector('input[type="file"]'); |
worker.js
1 | // import {createChunk} from './newcar.js' |
1 | <template> |
1 | <template> |
1 |
|
1 | <style> |
1 | var inputObj = document.querySelector("#videoFileInput"); |
1 | function captureFrame(vdoFile,time=0){ |
1 | const vdoInput = document.querySelector("#videoFileInput"); |
创建CSS
1 | //主题色设置 root代表默认主题色, html[data-theme]代表另一种主题色 |
设置好css 在main.js中引入
我们使用hooks来创建一个theme代替使用vuex
1 | import { ref, watchEffect } from "vue"; |
这里的思想就是从本地缓存中读取 theme 在他发生更改的时候设置html的 data-theme属性,从而能使用到我们的第一步设置的CSS
随便写一个更改主体的组件
1 | <template> |
title: 前端零碎知识点
date: 2023-05-22 14:13:23
tags: js
category: ‘js’
1 | /** |
1 | .header { |
1 | .clipPath { |
html
1 | <style> |
IntersectionObserver.js
1 | var ul = document.querySelector('ul') |
#
如果你使用的是VUE,REACT 这种方式和HASH路由有冲突1 | 可以使用 Element.scrollIntoView({ |
1 | <div class="ball"> |
1 | .test { |
1 | .miaobian { |
1 | <button id="popBtn">弹窗</button> |
filter: drop-shadow(里边的属性和box-shadow一致);
可以解决此类问题1 | html: |
1 | <div class="aspect-ratio-div"> |
1 | <div class="aspect-ratio-div"> |
1 | .rotateBorder { |
compositionstart
来解决中文输入法 实时搜索的问题1 |
|
1 | @keyframes move1 { |
1 |
|
compositionstart
来解决中文输入法 实时搜索的问题1 |
|
1 |
|
1 | /** |
1 | export default defineConfig({ |
1 | .cssVar { |
https://github.com/weibsgz/miniProgram
1 | "usingComponents": { |
components/safe-area/safe-area.wxss
中是处理安全区域的组件 使用不同的边距样式
externalClasses: [ 'i-button-class', 'i-button-special-class' ],
<view wx:if="{{!special}}"class="i-button i-button-class>
<c-button i-button-class="my-i-button-class">
.my-i-button-class {color: red !important;}
https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/extended/weui/
app.json中
1 | //mp-msg是某个组件 |
https://cloud.tencent.com/document/product/269/37411
https://www.npmjs.com/package/tim-wx-sdk
1 | npm init |
model/tim.js
中初始化TIM
1 | import TIM from 'tim-wx-sdk'; |
1 | import Tim from '../../model/tim' |
看到IDE的控制台打印出TIM的信息 代表引入成功
用sdkAppid 和 密钥生成签名 本项目中前端生成签名 (开发阶段)实际使用时候必须后端生成签名
前端生成签名方法:
libs/tim/两个文件
generate-test-usersig.js 里 配置你的 用sdkAppid和密钥
package.json
1 | // 配置以下这两个依赖信息 |
构建NPM
/store/tim.js
配置文件
page中调用
1 |
|
js中使用同样
1 | import { createStoreBindings } from "mobx-miniprogram-bindings"; |
在自定义组件中使用 用behaviors
1 | import { storeBindingsBehavior } from "mobx-miniprogram-bindings"; |
model/tim.js login方法里边可以知道我们的微信登录后获取接口给我们设置的用户ID (2573)
在conversation.js
中设置目标聊天人(weibsgz) 和本项目中登录的用户和weibsgz的聊天列表this.setTargetUserId('weibsgz')
1 | <!DOCTYPE html> |
animation-play-state
属性指定动画是否正在运行或已暂停。可以在CSS和JS中设置1 |
|
./css
, ./js
下 打包出来对应的文件在根目录下npm install --save-dev @babel/core @babel/cli @babel/preset-env
concurrently
可以同时运行多个命令 不必等待第一个命令完成。package.json
1 | { |
server.js
1 | const express = require('express') |
npm run dev
$ git reset --hard cc7b5be
git log
命令查看提交记录,可以看到 commitId 值, 这个值很长,我们取前 7 位即可。比如你已经commit过了 这时候可能又不想commit了 比如你想修改一下提交的信息
比如说当前提交,你已经推送到了远程仓库;现在你用 reset 撤回了一次提交,此时本地 git 仓库要落后于远程仓库一个版本。此时你再 push,远程仓库会拒绝,要求你先 pull.如果你需要远程仓库也后退版本,就需要 -f 参数,强制推送,这时本地代码会覆盖远程代码。
git reset HEAD^
git add . git commit -m '....'
revert 与 reset 的作用一样,都是恢复版本,但是它们两的实现方式不同。
简单来说,reset 直接恢复到上一个提交,工作区代码自然也是上一个提交的代码;而 revert 是新增一个提交,但是这个提交是使用上一个提交的代码。
因此,它们两恢复后的代码是一致的,区别是一个新增提交(revert),一个回退提交(reset)。
正因为 revert 永远是在新增提交,因此本地仓库版本永远不可能落后于远程仓库,可以直接推送到远程仓库,故而解决了 reset 后推送需要加 -f 参数的问题,提高了安全性。
说完了原理,我们再看一下使用方法:git revert -n [commitId]
https://github.com/weibsgz/vue3.2.8-
1 | <!DOCTYPE html> |
自己根据后端返回的权限字段,动态生成路由 需要用到addRoutes
慕课网项目 权限相关:https://www.imooc.com/wiki/vue3/elementAdmin8.html
路由需要公有路由 和 私有路由 我们处理的是根据返回的权限 来动态插入匹配到的私有路由(addRoutes方法)
本项目中
把私有路由分成几块(根据不同权限) ./store/modules
根据权限筛选路由 menus 是后端返回的权限字段 ["userManage", "roleList", "permissionList", "articleRanking", "articleCreate"]
privateRoutes是拆分好的私有路由集合 每个私有路由上的name和 menus中的字段对应
1 | filterRoutes(context, menus) { |
src/permission.js
(路由守卫) 中 使用addRoutes方法动态添加路由,最后添加404页面
1 |
|
退出登录时,添加的路由表并未被删除 需要退出时候重置路由表
1 | /** |