transform,transition,@keyframe的区别
1.transform对元素自身的改变。
包括:
平移:translate(X/Y)
翻转:rotate(20deg)
缩放:scale(X/Y)
倾斜/透视:skew(..)
2.transiton对元素css样式的改变(width,height,opacity。。。。),有动效, 包含起始和终止两个状态。
transition有四个属性:transition-property transition-duration transition-timing-function transition-delay
示例: transition: width 2s linear 1s
当元素的width属性发生变化时,该变化将在2s内以恒定的速度进行过渡,但在过渡开始前会有1s延迟
3.@keyframe annimation定义了一组关键帧,也就是几个状态。每个状态可以包含多个css样式
如:
1234567@keyframes mymove {0% {top:0px; left:0px; background ...
处理message组件重复弹窗
在实习中遇到了message组件重复弹出的问题。当一个页面请求多个接口时,message放在响应拦截器里,如果多个接口返回异常或者错误时,message组件会多次弹出。
这里对element-ui 的message组件做一层封装,防止此类问题出现
src/utils/resetMessage.js12345678910111213141516171819202122232425/**重置message,防止重复点击重复弹出message弹框 */import { Message} from 'element-ui';let messageInstance = null;const resetMessage = (options) => { if (messageInstance) { messageInstance.close() } messageInstance = Message(options)};['error', ...
es6中symbol的使用场景
Symbol是由ES6规范引入的一项新特性,它的功能类似于一种标识唯一性的ID。通常情况下,我们可以通过调用Symbol()函数来创建一个Symbol实例:
1let s1 = Symbol()
或者也可以在调用Symbol()函数时传入一个可选的字符串参数,相当于给你创建的Symbol实例一个描述信息:
1let s2 = Symbol('another symbol')
应用场景1:使用Symbol来作为对象属性名(key)在这之前,我们通常定义或访问对象的属性时都是使用字符串,比如下面的代码:
12345678910111213141516171819let obj = { abc: 123, "hello": "world"}obj["abc"] // 123obj["hello"] // 'world'而现在,Symbol可同样用于对象属性的定义和访问:const PROP_NAME = Symbol()const PROP_AG ...
三数之和
力扣-15.三数之和给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请
你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
12345678输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]解释:nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。注意,输出的顺序和三元组的顺序并不重要。
示例 2:
123输入:nums = [0,1,1]输出:[]解释:唯一可能的三元组和不为 0 。
示例 3:
123输入:n ...
前端笔试之Js-ACM模式
前言之前刷算法题都是用力扣。但是,力扣是核心代码模式,是不需要处理输入、输出的,只需要直接返回值就行。笔试、面试的时候,不一定是核心代码模式,也可能是ACM模式。如果没有了解过JavaScript的输入输出可能就寄了。下面是学习记录的两种JavaScript的ACM模式:V8模式,Nodejs模式
V8模式输出
console.log();
读取一行输入(read_line())
最多读取个字符,当还未达到1024个时如果遇到回车或结束符,提前结束。也有可能是readline()。牛客ACM模式就是readline()。
最重要的一个输入方法,可以通过该方法得到所有情况的输入,后面讲的其他输入方法,有可能没有。比如牛客的ACM模式,使用后面的输入,都会报错:xxx is not defined
read_line()返回输入的一行,字符串形式。需要通过split、parseInt等方法来得到真正的输入。
练习1. A+B(1)
1234567let linewhile(line = read_line()){ let nums = line.split( ...
用栈(队列)实现队列(栈)
力扣-232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
说明:
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
示例 1:
12345678910111213输入:["MyQueue", "push", "push", "peek", "pop", "empty"][[], [1], [ ...
复原IP地址
力扣-93.复原IP地址有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。
例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。
示例 1:
12输入:s = "25525511135"输出:["255.255.11.135","255.255.111.35"]
示例 2:
12输入:s = "0000"输出:["0.0.0. ...
岛屿数量
力扣-200.岛屿的数量给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
1234567输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1
示例 2:
1234567输入:grid = [ ["1 ...
最长回文子串
力扣-5.最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
123输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。
示例 2:
12输入:s = "cbbd"输出:"bb"
解题思路采用动态规划的思想,数组dp[i][j]用于表示从i到j的字符串是否为回文字符串。初始化dp[i][i]为true,因为单个字符必为回文字符串。随后确定j的取值范围为[1,length-1],i的取值范围为[0,length-2]。当s[i]!=s[j]时,dp[i][j]设为false。相等时判断如果 j - i < 3,即a,aa,aba这三种情况必为回文字符串,可以直接设dp[i][j]为ture。不满足j - i < 3,则dp[i][j]=dp[i+1][j-1]。
代码实现123456789101112131415161718192021 ...
正则表达式指南
在实习的过程中发现项目中大量使用到了正则表达式,同时正则表达式作为一种强大的字符串匹配、字符串查找、字符串替换等操作工具属于前端工程师的必备技能。
一、基本概念正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。搜索模式可用于文本搜索和文本替换。它用一系列字符定义搜索模式。
正则表达式的用途有很多,比如:
表单输入验证。
搜索和替换。
过滤大量文本文件(如日志)中的信息。
读取配置文件。
网页抓取。
处理具有一致语法的文本文件,例如 CSV。
正则表达式的语法如下:
1/正则表达式主体/修饰符(可选)1.
先来看一个最基本的正则表达式:/处/,它只匹配到了字符串中的第一个“处”:
这里,正则表达式的主体就是“处”,没有使用修饰符,我们会在后面来介绍正则表达式的修饰符。
二、创建方式创建正则表达式的方式有两种:
字面量:正则表达式直接放在/ /之中:
1const rex = /pattern/;
构造函数:RegExp 对象表示正则表达式的一个实例:
1co ...