前端小技巧

news2025/7/7 21:09:07

1.html

1.1 网站自动刷新

应用场景:

  • 网页定期自动刷新(现在基本淘汰了,采用ajax);
  • 自动跳转到指定页面,这个自动跳转的好处就是不需要JS调用,属于纯html网页自动跳转

v7-网站自动刷新

你可以在head标签中将网站设置为定时刷新!如<meta http-equiv="refresh" content="2">content为刷新间隔。

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta http-equiv="refresh" content="2">
  <!-- <meta http-equiv='refresh' content='2; URL=https://baidu.com'> -->
  <title>技巧</title>
</head>

<body>

  页面是否刷新

</body>
<script>
  let refresh = localStorage.getItem('refresh') || 0
  localStorage.setItem('refresh', ++refresh)
  console.log('页面刷新了', refresh + '次')
</script>

</html>

2.css

2.1 使元素鼠标事件失效

v3-使元素鼠标事件失效

  .change-btn{
    cursor:not-allowed; //只是悬浮显示禁用图标,仍然可以点击和选中
    pointer-events: none; //只是禁用点击事件
    user-select: none; //只是禁用了用户选中
  }

2.2 字母大小写转换

v-4字母大小写转换

除了用js的toUpperCase()toLowerCase()转换字母,也可以用css控制

p {text-transform: uppercase}  // 将所有字母变成大写字母
p {text-transform: lowercase}  // 将所有字母变成小写字母
p {text-transform: capitalize} // 首字母大写
p {font-variant: small-caps}   // 将字体变成小型的大写字母

2.3 立体字

v5-立体字

.text_solid {
    font-size: 32px;
    text-align: center;
    font-weight: bold;
    line-height: 100px;
    position: relative;
    background-color: #333;
    color: #fff;
    // 水平阴影的位置,垂直阴影的位置,模糊的距离,阴影的颜色
    text-shadow: 0px 1px 0px #c0c0c0, 0px 2px 0px #b0b0b0, 0px 3px 0px #a0a0a0,
      0px 4px 0px #909090, 0px 5px 10px rgba(0, 0, 0, 0.6);
  }

2.4 filter(滤镜)

应用场景:图片高亮,黑夜主题

v6-filter(灰度滤镜)

也可以通过颜色反转来设置黑夜主题,在浏览器控制台输入:

document.documentElement.style.filter='invert(85%) hue-rotate(180deg)'

我们也可以通过这个设chorme浏览器的主题切换按钮:

先优化下代码,使得图片不需要进行滤镜转换

;(function () {
  const docStyle = document.documentElement.style
  if (!window.modeIndex) {
    window.modeIndex = 0  // 当前选中的模式的下标,需要挂载到window上进行存储
  }
  // 设置3种模式
  const styleList = [
    '',
    'invert(85%) hue-rotate(180deg)',
    'invert(100%) hue-rotate(180deg)',
  ]
  // 每次点击标往后移一项
  modeIndex = modeIndex >= styleList.length - 1 ? 0 : modeIndex + 1
  docStyle.filter = styleList[modeIndex]
  // modeIndex >0则表示加了滤镜了,这时候需要给图片再加一次滤镜反转,让它恢复本色
  document.body
    .querySelectorAll('img, picture, video')
    .forEach(
      (el) =>
        (el.style.filter = modeIndex ? 'invert(1) hue-rotate(180deg)' : '')
    )
})()

  • 1.新开一个tab页
  • 2.点击收藏
  • 3.点击更多
    在这里插入图片描述
  • 4.输入标签名和js脚本javascript: (function () { const docStyle = document.documentElement.style; if (!window.modeIndex) { window.modeIndex = 0; } const styleList = [ '', 'invert(85%) hue-rotate(180deg)', 'invert(100%) hue-rotate(180deg)', ]; modeIndex = modeIndex >= styleList.length - 1 ? 0 : modeIndex + 1; docStyle.filter = styleList[modeIndex]; document.body.querySelectorAll('img, picture, video').forEach(el => el.style.filter = modeIndex ? 'invert(1) hue-rotate(180deg)' : '');})();,注意要带js前缀
    在这里插入图片描述
  • 5.然后在任意一个网站点击上面的主题切换标签就可以实现切换主题了,可以点击多次进行不同主题的来回切换
    在这里插入图片描述

说明:

  • document.documentElement 获取文档对象的根元素,即
    html元素样式添加filter滤镜:样式为invert(85%) hue-rotate(180deg)
  • invert()反转颜色通道数值,接收的值在 0~1。
  • hue-rotate()色相旋转,接收的值在 0deg~360deg。

3.js

3.1 forEach退出循环

var arr = [1,2,3,4,5]
arr.forEach((item,index)=>{
    if(item==3){
        console.log(`%c 匹配到了${item}`,'color:red')
        return
    }
    console.log(`遍历到了${item}`)
})
console.log('%c 后续的代码','color:green')


//打印结果为:
遍历到了1
遍历到了2
匹配到了3
遍历到了4
遍历到了5
后续的代码

结论:forEach中return只会退出当前循环,而不会退出整个循环,也不会退出整个事件

那么怎么直接退出循环:

  1. 使用for循环
  2. forEach中使用try catch抛出异常
var arr = [1,2,3,4,5]
try {
    arr.forEach((item,index)=>{
        if(item==3){
            console.log(`%c 匹配到了${item}`,'color:red')
            throw('遍历结束')
        }
        console.log(`遍历到了${item}`)
    })
    console.log('%c 后续的代码','color:green')
} catch (error) {
    console.log('error',error)
}
//打印结果为:
遍历到了1
遍历到了2
匹配到了3
error 遍历结束
  1. 使用some遍历
var arr = [1, 2, 3, 4, 5]
// some:如果表达式有一个条件满足,则剩余元素不会再执行检测(并且表达式返回值会为true,反之为fasle)。
// some里面的return同样不会阻止遍历外的代码执行
let val = arr.some((item, index) => {
    if (item == 3) {
        console.log(`%c 匹配到了${item}`, 'color:red')
        return true
    }
    console.log(`遍历到了${item}`)
})
!val && console.log('%c 后续的代码', 'color:green')
//打印结果为:
遍历到了1
遍历到了2
匹配到了3
后续的代码

3.2 移除对象属性

let obj = {a: 1, b: 2, c: 3, d: 4};
//方式1
delete obj.a;
delete obj.b;
delete obj.c;
console.log(obj); // {d: 4}
//方式2
let {a, b, c, ...newObj} = obj;
console.log(newObj);// {d: 4}

4.vue

4.1 自定义指令

自定义指令是用来操作DOM的,尽管vue推崇数据驱动视图的理念,但并非所有情况都适合数据驱动。自定义指令就是一种有效的补充拓展,不仅可用于定义DOM操作,而且是可复用的。

参数说明:

  • dire 指令名称
  • el 当前绑定的dom元素
  • bindings 指令解析后的结果,包括指令名称、参数、表达式等,bindings.value返回的是表达式
  • vnode 对应的虚拟dom
//对象注册形式示例:
Vue.directive('dire',{
     bind: function(el,bindings,vnode){
       console.log("bind--最先执行的钩子函数")
     }
     inserted: function(el,bindings,vnode){
       console.log("inserted--在bind后面执行")
     }
     update: function(el,bindings,vnode){
       console.log("update--绑定组件更新前触发执行")
     }
     componentUpdated: function(el,bindings,vnode){
       console.log("componentUpdated--绑定组件更新后触发执行")
     }
     unbind: function(el,bindings,vnode){
       console.log("componentUpdated--组件销毁前触发执行")
     }
 }

介绍完基本概念后,接下来通过一个案例来实操一下,假设这样一个场景:
我们的权限需要做到按钮级的,并且希望做前端埋点记录用户点击是哪个页面的哪个按钮,那么自定义指令就是一个不错的方案:

v1-自定义指令

4.2. vue中怎么重置data

使用场景:

比如,有一个表单,表单提交成功后,希望组件恢复到初始状态,重置data数据。

初始状态下设置data数据的默认值,重置时直接object.assign(this.$data, this.$options.data())

说明:

  • this.$data获取当前状态下的data
  • this.$options.data()获取该组件初始状态下的data(即初始默认值)
  • 如果只想修改data的某个属性值为初始值,可以this[属性名] = this.$options.data()[属性名],如this.message = this.$options.data().message

5.react

5.1 ant design select 搜索同时支持输入和下拉选中

先看下官网select的搜索怎么用的

ant design select 搜索同时支持输入和下拉选中

6.调试

6.1 控制台打印有样式的文字

当我们打印信息很多,需要明显的区分重要信息时,就可以通过打印高亮来实现

console.log('%c 当前打印的为红色==>','color:red')

console.log('%c 当前打印的为绿色==>','color:green')

console.log('%c 当前打印的为绿色有背景的大文字==>','color:green;font-size:30px;background:#ddd') 

打印的格式:%c 空格 内容 逗号 css样式

那么,如何打印动态内容呢?

可以用es6的模板字符串:

const name='小明'
console.log(`%c ${name}`,"font-size:30px")

6.2 跨页面调试

场景:

系统a对接门户b,门户b会携带参数打开一个新的tab页跳转到系统a,此时想打开控制台调试系统a接收门户b的参数,并想查看接口的调用

如果有a,b两个系统的代码,则直接在tab页面打开控制台,进行调试。

如果只有a的代码,这是b跳转到a时候,在a网站打开控制台后,可能接口已经调用完成了。如果想要接口调用慢一点,可以把network的网络调整更慢,但有时候即使网络很慢,接口也调用完成了,这时候可以在a系统的接口调用处写一个alet(1)阻止整个页面的运行,这这时候再打开控制台就能正常的调试了。

6.3 控制台常用调试

6.3.1 重新发送请求

演示地址

当你想再次发送请求,而不想刷新页面,或再次走一遍交互流程,可以直接发送对应的请求

  1. 选中Network
  2. 点击Fetch/XHR
  3. 选择要重新发送的请求
  4. 右键选择Replay XHR
    在这里插入图片描述

6.3.2 在控制台快速发起请求

在联调或修BUG的时候,针对同样的请求,有时候需要修改入参重新发起,而又不想动代码时

  1. 选中Network
  2. 点击Fetch/XHR
  3. 选择Copy ,再选择Copy as fetch
  4. 控制台粘贴刚才copy的代码
  5. 修改参数,回车
  6. 再去Network查看一下新发送的请求的参数是否修改
    在这里插入图片描述

6.3.3 快速找到dom节点信息

除了用js通过document去获取节点,还有更简单快速的方法:

  1. 选中控制台的select
  2. 悬浮到对应的视图(此时可以看到对应的样式:color,font-size等)
  3. 控制输入$0即可把对应的节点打印出来,再通过$0.去拿到对应的属性
  4. 如果要快速的空间样式,找到控制台的Elements,再找到Styles,划到底部,双击数值,进行修改
    在这里插入图片描述

6.3.4 截取一张全屏的网页

应用场景:进行超出一屏的内容截屏

  1. 在要截屏按F12的网页打开控制台
  2. 同时按住ctrl+shift+p
  3. 输入Capture full size screenshot 按下回车
    在这里插入图片描述
    4.查看截下的图片
    在这里插入图片描述
    以上是全屏截图的方法,那么如果只是想截图网页达到一部分?

1.通过select选择对应的节点
2.将上面第3步的指令Capture full size screenshot换成Capture node screenshot在这里插入图片描述

6.3.5 使用$来简化document

在控制台使用$$$替代document.querySelectordocument.querySelectorAll

在这里插入图片描述

6.3.6 直接在控制台安装插件

应用场景:想快捷的调试插件的方法,比如想调试一下moment插件的格式化年月日方法moment(new Date().getTime()).format("YYYY-MM-DD HH:mm:ss.SSS")

  1. 安装chrome插件Console Importer,插件地址
  2. 在控制台输入$i('name')安装npm包
    3.
  3. 安装好以后就可以直接使用插件的方法

6.3.7 Add conditional breakpoint条件断点

  1. 在控制台输入以下代码
const foods = [
  {
    name: '小杯',
    price: 10
  },
  {
    name: '中杯',
    price: 15
  },
  {
    name: '大杯',
    price: 20
  },
]

foods.forEach((i) => {
  console.log(i.name, i.price)
})
  1. 点击打印信息进入调试文件
    在这里插入图片描述
  2. 在要debuger的地方右键选择Add conditional breakpoint
    在这里插入图片描述
    在这里插入图片描述
  3. 再次在控制台输入刚才要调试的代码,回车
    5.

7.工程化

7.1 如何注册发布自己的npm包

概念:

NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准

目的:

发布npm包为的是代码更加友好的使用和模块化:好复用,易维护

注册发布自己的npm包

v2-如何注册发布自己的npm包

【end】
参考地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/407147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【uni-app】小程序实现微信授权登陆(附流程图)

微信授权登陆是比较常见的一种登陆方式&#xff0c;今天来总结下实现流程 进入授权登陆页面 初始化调用wx.login获取登陆凭证code&#xff08;用户无感知&#xff09; //封装微信获取用户code&#xff0c;避免嵌套 login() {return new Promise((resolve, reject) > {uni.l…

基于Vue+Less+axios封装+ElementUI搭建项目底层支撑实战

目录 一、本节介绍和上节回顾 1. 上节介绍 2. Vue SpringBoot前后端分离项目实战目录 3. 本节介绍 二、项目前置所需应用安装 1. Less的安装 2. Less安装后的验证 3. axios的安装 4. axios请求的封装与拆解 5. axios请求封装后的验证 6. ElementUI的安装、验证 …

闭包是什么?五分钟带你了解闭包

闭包 前言 闭包对每个前端来说都是一个绕不开的话题。学习之初也因为搞清闭包的概念耗费了不少精力&#xff0c;今天写一篇博客来记录本人对闭包的理解&#xff0c;笔者水平有限&#xff0c;若有疏漏及错误&#xff0c;愿不吝赐教。 什么是闭包&#xff1f; 你可以在一个函…

创建vue2项目

如何创建一个vue2项目 &#xff08;1&#xff09; 使用cmd终端直接创建 在键盘上winr&#xff0c;输入cmd打开终端窗口&#xff0c;cd进入到vue项目所创建的目录里&#xff08;我是直接创建在桌面上&#xff09; 输入创建项目指令&#xff08;vue create 项目名称&#xff09;…

走进Vue【一】初识Vue

文章目录&#x1f31f;前言&#x1f31f;MVVM模式&#x1f31f;Vue简介&#x1f31f;Vue重要版本发布&#x1f31f;Vue特点&#x1f31f;快速上手Vue&#x1f31f;Hello Vue&#x1f31f;Vue实例&#x1f31f;写在最后&#x1f31f;前言 从历史的潮流来说&#xff0c;人们从之…

Promise.all的使用

Promise的基本使用Promise.all() 传参和返回结果Promise.all() 完成状态Promise.all() 失败状态Promise.all() 使用案例Promise.all() 传参和返回结果 Promise.all() 传入一个promise的数组&#xff0c;并返回一个Promise实例&#xff0c;传入数组中的promise返回的 resolve 回…

探究前端的跑马灯效果是如何用css实现的

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;…

学习 Python 之 Pygame 开发魂斗罗(十二)

学习 Python 之 Pygame 开发魂斗罗&#xff08;十二&#xff09;继续编写魂斗罗1. 修改玩家扣减生命值2. 解决玩家下蹲子弹不会击中玩家而是直接让玩家死亡的问题3. 完善地图4. 增加产生敌人函数&#xff0c;解决一直产生敌人的问题5. 给玩家类增加计算玩家中心的方法继续编写魂…

软件行业的最后十年【ChatGPT】

在这篇文章中&#xff0c;我将说明像 ChatGPT 这样的生成式人工智能 (GAI) 将如何在十年内取代软件工程师。 预测被离散化为 5 个阶段&#xff0c;总体轨迹趋向于完全接管。 但首先&#xff0c;一个简短的前言。 推荐&#xff1a;用 NSDT场景设计器 快速搭建3D场景。 1、关于AI…

ChatGPT-4.0 : 未来已来,你来不来

文章目录前言ChatGPT 3.5 介绍ChatGPT 4.0 介绍ChatGPT -4出逃计划&#xff01;我们应如何看待ChatGPT前言 好久没有更新过技术文章了&#xff0c;这个周末听说了一个非常火的技术ChatGPT 4.0&#xff0c;于是在闲暇之余我也进行了测试&#xff0c;今天这篇文章就给大家介绍一…

七夕节,我用代码制作了表白信封

大家好&#xff0c;我是小周&#xff0c;明天就是七夕了&#xff0c;这么浪漫的节日&#xff0c;自然少不了我这个浪漫博主&#xff0c;本次为大家贡献表白信封的制作&#xff0c;其他的就看缘分啦&#xff0c;哈哈&#xff0c;最后会放上资源包&#xff0c;需要的小伙伴自取就…

Nginx反向代理WebSocket服务连接报错:WebSocket connection to “wss://xxx/xxx“ failed

最近使用 node.js 搭建 WebSocket 服务&#xff0c;在本地测试 connection 都是正常&#xff0c;于是部署到 Linux 服务上&#xff0c;需要用 Nginx 来反向代理 WebSocket 服务。浏览器控制台报错&#xff1a;WebSocket connection to wss://tiven.cn/ws/xxx failed:&#xff0…

学会iframe并用其解决跨域问题

了解iframe 官方定义为&#xff1a;iframe是HTML标签&#xff0c;作用是文档中的文档&#xff0c;或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架&#xff08;即行内框架&#xff09;。 简单理解为&#xff1a;iframe是一个内联框架&#xff0c;可以在当…

ES6 --- 解构赋值(数组,对象,函数)使用详解

解构赋值 JavaScript 中最常用的两种数据结构是 Object 和 Array。 对象让我们能够创建通过键来存储数据项的单个实体。数组则让我们能够将数据收集到一个有序的集合中。 但是&#xff0c;当我们把它们传递给函数时&#xff0c;函数可能不需要整个对象/数组。它可能只需要对…

[Vue warn]: Error in v-on handler: “TypeError: Cannot read properties of undefined (reading ‘$refs‘)

报错&#xff1a;[Vue warn]: Error in v-on handler: "TypeError: Cannot read properties of undefined (reading $refs)" 背景&#xff1a;1.在做vue项目时&#xff0c;在功能弹框中&#xff0c;想实现新增内容。 2. 报错原因是要触发menuCheckall组件后&#xff…

background-image使用

目录 background-image: url(" ")&#xff1b; background-repeat属性&#xff08;背景平铺&#xff09; background-size属性&#xff08;设置背景图片大小&#xff09; background-position属性&#xff08;背景图片位置&#xff09; 1.background-image: url…

Vue中 Vue-Baidu-Map基本使用

前言 但我们遇到一项新技术或者没有写过的东西为了不走弯路我们只能先去模仿或者看官方文档 Vue这个框架相信大家都熟悉&#xff0c;只要是需要用的第三方平台它一般都会进行集成&#xff0c;比如Vue-Baidu-map 为什么有百度原生api为什么还需要插件&#xff0c;因为使用插件…

ref 引用(vue获取DOM元素)

ref 引用 jquery 牛逼 简化了程序员操作DOM的过程 vue 优势&#xff1a; MVVM 在 vue 中&#xff0c;程序员不需要操作DOM。只需要把数据维护好&#xff01;(数据驱动视图) 结论&#xff1a;在 vue 项目&#xff0c;强烈不建议大家安装和使用jQuery&#xff01;&#xff01;&am…

CORS错误是什么如何解决?

通过http://localhost访问服务端时,出现CROS错误是什么问题该如何解决呢? 发生ajax跨域问题的原因&#xff1a;(三个原因同时满足才可能产生跨域问题) (1)浏览器限制 发生ajax跨域的问题的时候后端是正常执行的&#xff0c;从后台打印的日志可以看出&#xff0c;而且后台也会…

前端布局小案例,如何创建漂亮的毛玻璃输入表单卡片效果

在当今互联网时代&#xff0c;用户体验是至关重要的。当我们在设计网站或应用程序时&#xff0c;一个漂亮、吸引人的界面往往是吸引用户并提高用户满意度的关键因素之一。而一个好看的表单则可以提高用户提交的意愿和效率。本文将介绍如何使用HTML和CSS创建一个漂亮的毛玻璃输入…