首页
学习
活动
专区
工具
TVP
发布

前端开发随记

专栏成员
84
文章
120431
阅读量
10
订阅数
JS对象到原始值的转换
JS对象到原始值转换的复杂性 主要由于某些对象类型存在不止一种原始值的表示 对象到原始值转换的三种基本算法 在解释三种算法前需要了解toString valueOf这两个方法 toString 返回对象的字符串表示 Array类的toString方法会将每个元素转换为字符串,再使用逗号作为分隔符拼接起来 Function类的toString方法将定义的函数转换为JS源代码的字符串 Date类型的toString方法返回一个人类友好(且JS可解析)的日期和时间字符串 RegExp类定义的toStrin
peng_tianyu
2023-02-13
4.3K0
图片懒加载之判断图片进入可视区域
Dom结构 <div style="background-color: blue;width:100vw;height:5000px"></div> <div id="img" style="background-color: blueviolet;width:100vw;height:500px"></div> 使用 clientHeight scrollTop offsetTop 判断 document.addEventListener('scroll', () => { // 屏幕可视区域的高度
peng_tianyu
2022-12-24
7630
使用URLSearchParams类获取地址栏参数
解析地址栏的参数并返回一个参数对象 function getUrlParams() { const searchParams = new URLSearchParams(window.location.search); const params = {}; for(const [key, value] of searchParams) { params[key] = value; } return params; } Usage const params = getUrlParams() 参
peng_tianyu
2022-12-23
9520
从0到1 Webpack搭建Vue3开发、生产环境
起步 创建项目目录 mkdir webpack-vue3-demo 初始化 package.json npm init -y 参考文档 安装 webpack webpack-cli webpack-dev-server webpack-merge npm install webpack webpack-cli webpack-dev-server webpack-merge --save-dev 创建配置文件 mkdir build cd build touch webpack.b
peng_tianyu
2022-12-15
1K0
简易版websocket封装及本地启动socket服务
使用node启动本地socket服务 创建项目目录 mkdir server 初始化 npm npm init -y 安装依赖库 npm i nodejs-websocket -S 创建服务文件 const ws = require('nodejs-websocket'); const server = ws.createServer(connect => { connect.on("text", data => { console.log("received: "+data); connect
peng_tianyu
2022-12-15
1.2K0
HTML5离线存储原理
使用HTML5,通过创建cache manifest文件,可轻松创建web应用的离线版本;HTML5引入了应用程序缓存,这意味着web应用可进行缓存,并可在没有网络时进行访问。
peng_tianyu
2022-12-15
2.8K0
JS实现全屏模式
代码实现 <template> <button @click="handleClick">切换全屏模式</button> </template> const handleClick = () => { if(document.fullscreenElement) { document.exixFullscreen() } else { document.documentElement.requestFullscreen() } } 事件监听 // 方式1 document.onfulls
peng_tianyu
2022-12-15
4K0
使用事件总线(eventbus)或自定义事件的问题
事件总线、自定义事件关键点 先监听事件再触发事件 考虑组件生命周期顺序 组件通信 <!-- 组件A --> <template> <div> <button @click="jump">跳转B</button> {{msg}} </div> </template> <!-- 组件B --> <template> <div> <button @click="back">返回</button> </div> </template> // A jump () { t
peng_tianyu
2022-12-15
5890
react hook开发遇到的一些问题
问题一 使用 useState改变值后 拿到的值不是最新值 const [isFocus, setIsFocus] = useState<boolean>(false) const changeFocus = () => { setIsFocus(!isFocus) } useEffect(() => { console.log(isFocus) // do something }, [isFocus]) 因为setState是异步的 所以调用setState之后无法立刻拿到最新的值 使
peng_tianyu
2022-12-15
3680
electron中使用webview
使用webview标签 <webview src="https://www.baidu.com" preload="./preload.js"></webview> 向webview注入JS // preload.js const { contextBridge } = require('electron') contextBridge.exposeInMainWorld('apiKey', { fn: () => {} }) // 在webview页面使用 window.apikey.fn()
peng_tianyu
2022-12-15
1.1K0
JS浅拷贝
浅拷贝 浅拷贝创建一个新对象,这个对象仅对原对象的属性进行拷贝,属性值是基本类型时,拷贝的是原数据,属性值是引用类型时,拷贝的是指针 实现浅拷贝的几种方法 Object.assign let person = { name: 'swt', age: 20 } let people = Object.assign({}, person) people.name = 'pty' console.log(person) // { name: 'swt', age: 20 } console.
peng_tianyu
2022-12-15
8350
uniapp开发微信小程序连接mqtt
下载mqtt npm i mqtt@2.18.8 存储mqtt客户端到vuex // mqtt module import mqtt from 'mqtt' const CONNECT_MQTT = 'CONNECT_MQTT' const SERVER_IP = '' const SERVER_PORT = '' const SERVER_PATH = 'mqtt' // 连接地址 const SERVICE = `${SERVER_IP}:${SERVER_PORT}/${SERVER_PAT
peng_tianyu
2022-12-15
1.6K0
Vue自动化全局注册基础组件
前言 项目中有许多通用的组件,为了避免在每个组件都引入一个长列表,可在入口函数注册基础组件 准备 安装 lodash 库 npm i lodash --save 入口文件 import Vue from 'vue' import { camelCase, upperFirst } from 'lodash/string' const requireComponent = require.context( // 组件目录的相对路径 './components', // 是否查询其子目录
peng_tianyu
2022-12-15
4380
发布自己的npm包
注册npm账户 ---- 注册地址 用户名,密码,邮箱后面发布会用到 注册完需要验证邮箱 会发送邮件至你注册的邮箱 按指示完成验证即可 新建项目 ---- 创建目录 mkdir package 切换目录 cd package 初始化npm npm init -y 后续可在 package.json 文件中增加更改配置 安装ESlint ---- 安装 npm i eslint 初始化配置 eslint --init 配置 Commitlint ---- 安装 Commitlint 脚手架和
peng_tianyu
2022-12-15
4920
没了解过的Web API
getBattery getBattery方法提供了系统的电量信息,返回一个promise对象 navigator.getBattery().then(res => { console.log(res) /** 四个属性 charging 是否在充电 chargingTime 充满电所需时间 dischargingTime 当前电量可使用时间 level 剩余电量 */ /** 添加事件 onchargingchange 监听充电状态改变
peng_tianyu
2022-12-15
4780
CSS属性font-smoothing
在浏览大屏demo时发现样式中这两行代码 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; 对字体进行抗锯齿渲染使字体看起来更清晰 -webkit-font-smoothing: none | subpixel-antialiased:默认值 | antialiased:抗锯齿 -moz-osx-font-smoothing: inherit | grayscale:抗锯齿
peng_tianyu
2022-12-15
3530
JavaScript深入之手写call、apply、bind
模拟实现call 将函数设为对象的属性 执行该函数 删除该函数 Function.prototype.myCall = function(context = window, ...args) { if(this === Function.prototype) { return undefined } context = context || window const fn = Symbol() context[fn] = this const result = conte
peng_tianyu
2022-12-15
2200
广度优先搜索和深度优先搜索的实现
前言 ---- 广度优先搜索和深度优先搜索都是对图进行搜索的算法 广度优先搜索 广度优先搜索广泛搜索子节点,将其子节点放进候选节点中;操做候选节点时是按顺序取出候选节点,因此使用队列存储候选节点。关于队列的实现可参考队列的实现 声明广度优先搜索函数,参数为要搜索的树形图和要查找的节点 实例化队列,声明目标节点的深度,初始化0 遍历队列 获取队列第一个元素,判断是否和目标节点相等,相等返回深度 判断当前节点是否有子节点,并将子节点添加到队列中 删除当前队列第一个元素 function breadthF
peng_tianyu
2022-12-15
4000
实现图
邻接表的问题:计算有向图的入度非常麻烦(入度:指向自己的数量,出度:指向别人的数量)
peng_tianyu
2022-12-15
3010
红黑树
前言 ---- 红黑树顾名思义数中的节点只能是黑色或红色,是自平衡二叉树 实现思路 红黑树的规则 节点只能是红色或黑色 根节点是黑色 叶子节点都是黑色的NIL空节点 每个红色节点的两个子节点都是黑色(每个叶子节点到根节点的路径不能有两个连续的红色节点) 任意节点到叶子节点的路径包含黑色节点的数量相同 插入节点的情况 声明N代表插入节点默认红色,P代表父节点,U代表父节点的兄弟节点,G代表祖节点 根节点为空 父节点是黑色 父节点是红色,叔节点是红色,祖节点是黑色 父节点是红色,叔节点是黑色,祖节点是黑色,插入
peng_tianyu
2022-12-15
4090
点击加载更多
社区活动
AI代码助手快速上手训练营
鹅厂大牛带你玩转AI智能结对编程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档