基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件

基于 ant-design-vue 和 Vue 3 的功能强大的表格组件,支持列自定义、排序、本地化存储、行选择等特性。 当前组件继承了Ant-Design-Vue Table组件的所有列属性和方法,并在此基础上进行扩展。 演示地址:https://table.nicen.cn Github:https://github.com/friend-nicen/table 🚀 基于 ant-design
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件

Electron 使用方法,从入门到精通

官方文档:https://www.electronjs.org/zh/docs 在 Electron 中,主进程和渲染进程之间可以通过 IPC(Inter-Process Communication,进程间通信) 来传递数据。Electron 提供了 ipcMain 和 ipcRenderer 模块来实现这种通信。 主进程通过 webContents.send 方法向渲染进程发送消息: const
Electron 使用方法,从入门到精通

EdgeIt.JS 自动提取透明图片的图像轮廓,并进行描边

基于Canvas的智能图片描边处理库,自动提取透明图片的图像轮廓,并进行描边 | 在线演示 | 在线文档 智能边缘检测算法 抗锯齿描边渲染 零依赖,纯原生实现 npm install edgeit.js # 或 yarn add edgeit.js const processor = new EdgeIt({ strokeColor: \'#ff3b30\', // 描边颜色 strokeWidth:
EdgeIt.JS 自动提取透明图片的图像轮廓,并进行描边

DIY.JS – Canvas 图形库,为个性化定制而生

DIY.JS 是一款基于原生 Canvas 开发的业务级图形库,专注于为商品定制提供强大的图形交互功能,帮助开发者轻松实现商品的个性化设计,适用于 T 恤、手机壳、抱枕等多种商品的定制场景。 DIY.JS 自带许多安装即用的功能,开发者无需从零开始构建,能够快速集成到项目中并投入使用。 Github:https://github.com/friend-nicen/diy.js 文档: https:
DIY.JS – Canvas 图形库,为个性化定制而生

一次循环引用导致的内存泄漏分析,重新认识JavaScript

内存泄漏的事情遇到的也不少,但是感觉问题蛮大,这是第一次。🤦‍♂️🤦‍♂️🤦‍♂️ 前段时间自己开发了一个基于Canvas的专用于DIY的图形编辑器:https://douyin.nicen.cn/m.html 兢兢业业写了许久(目前300多次提交),从零开始,完成了许多以前没敢想的功能。 自以为快要小成了,今天突然想着分析一下内存。好家伙!这一波分析下来,发现了大问题,😂😂😂。 回顾了一下自己的
一次循环引用导致的内存泄漏分析,重新认识JavaScript

Three.js 基础知识,Three.js 学习笔记

Three.js 相关教程:http://www.webgl3d.cn/ Three.js 是一个基于 WebGL 的 JavaScript 库,它允许你在浏览器中创建和显示3D图形。 在Three.js中通常涉及以下几个基本组件: 场景(Scene):场景是所有对象、灯光和相机的容器。它是3D世界中所有可见元素的集合。 相机(Camera):相机定义了观察场景的视角。Three.js中最常用的相
Three.js 基础知识,Three.js 学习笔记

前端Server-Sent Events、EventSource接口相关知识点总结,什么是EventSource?

转自:http://www.ruanyifeng.com/blog/2017/05/server-sent_events.html 严格地说,HTTP 协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息(streaming)。 也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来
前端Server-Sent Events、EventSource接口相关知识点总结,什么是EventSource?

前端事件总线(Event Bus)是什么?前端事件总线的简单介绍

参考文章:https://www.pipipi.net/questions/13598.html 事件总线是对发布-订阅模式的一种实现,它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。 发布订阅模式定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。 发布订阅模式主要有两个角色: 发布方(Publ
前端事件总线(Event Bus)是什么?前端事件总线的简单介绍

Eslint该如何配置?Eslint使用以及相关配置说明

Eslint在过往接触过的很多开源项目内都有它的身影,习惯一个人写代码了,总觉得它可有可无,但是归根结底,好处还是很多的。 可强制规范团队编码规范,让新旧组员编码习惯得到一致提升 可灵活定制团队编码风格,让预设规则符合新旧组员心理预期 增加项目代码的可维护性和可接入性,让新组员能快速适应项目的架构与需求 保障项目整体质量,可减少无用代码、重复代码、错误代码和漏洞代码的产生几率 中文官网:https
Eslint该如何配置?Eslint使用以及相关配置说明

网页元素相交监测:Intersection Observer API

参考文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Intersection_Observer_API Intersection Observer API 提供了一种异步检测目标元素与祖先元素或 viewport 相交情况变化的方法。 过去,要检测一个元素是否可见或者两个元素是否相交并不容易,很多解决办法不可靠或性能很差。然而,随着互联网的发
网页元素相交监测:Intersection Observer API

JS实用函数收集,持续记录

function getBase64(file) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => resolve(reader.result); reader.onerror = e
JS实用函数收集,持续记录

JS定时器清除之后,已经开始但是没有运行完的函数还会继续运行吗?

最近使用定时器的时候遇到这样一种情况,定时器清除了,功能仍然在跑(遍历数组,同步定时网络请求)。 排查了一下代码,发现逻辑确实没问题。后来一想,是不是函数没运行完,仍然在跑,于是上代码测试了一下: let timer = setInterval(async () => { console.log(\"开始\") await new Promise((resolve) => { setTim
JS定时器清除之后,已经开始但是没有运行完的函数还会继续运行吗?

前端Mockjs学习笔记,持续记录

相比于自己写一个模拟数据返回的后端接口,好像还是这个来的更加方便。 让前端攻城师独立于后端进行开发。不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。 基于对window的xhr对象的二次封装,增加了用于拦截的逻辑。 npm install mockjs Mock.setup({ timeout: 400 }) M
前端Mockjs学习笔记,持续记录

WebRTC开发经验总结,持续记录

volume 音量约束 sampleRate: 采样率 sampleSize: 采样大小,采样的位数 echoCancellation: 回音消除 autoGaincontrol: 增加音量 noiseSuppression: 降噪 latency : 延迟大小 channelCount: 切换声道 deviceID: 多个音频输入输出设备的进行切换 groupId: 同一个物理设备,是一个分组,
WebRTC开发经验总结,持续记录

《千锋最新前端webpack5》学习笔记,持续记录

视频地址:https://www.bilibili.com/video/BV1YU4y1g745 webpack文档:https://webpack.docschina.org/concepts/ 了解一下CMD模块化规范。(module.export={}相关规范) Require.js不通过config方法配置模块路径时,也可以做require时指定完整的引入路径(require(
《千锋最新前端webpack5》学习笔记,持续记录

JS的异步编程过程中的问题集锦、echarts使用记录。

为了方便维护,在JS里的把html模板和业务逻辑做了分离,在业务逻辑里向模板对象传递指定的data对象返回生成好的html,以往的数据对象是用户交互产生的,今天需要改成从接口拉取。 按照以往的逻辑,获取用户的交互数据,传递给模板。基本上是同步的,今天修改的时候为了不触碰原有的代码,把网络请求单独放在了其他对象里,业务流程变成了,调用网络请求函数产生的返回值作为数据对象传递给模板对象。 一切看似没问
JS的异步编程过程中的问题集锦、echarts使用记录。

Es6学习笔记,持续记录

解构:https://www.runoob.com/w3cnote/deconstruction-assignment.html ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成 Set 数据结构。 const s = new Set(); .forEach(x => s.ad
Es6学习笔记,持续记录

记录一下Jquery日常使用过程中的一些经验

find()可以在所有后代元素里查找,而children()只会查找子代元素(不包括第二层级)。 not() 从匹配元素集合中删除元素。从包含所有段落的集合中删除 id 为 \"selected\" 的段落: $(\"p\").not(\"#selected\") is() 方法用于查看选择的元素是否匹配选择器。 $(selector).is(selectorElement,function(index,el
记录一下Jquery日常使用过程中的一些经验

JS学习笔记,持续记录

回调函数内的this指向了dom对象本身,注意JQ的内存问题,删除dom时自定义的事件会继续存在。 $(\".select li\").click(function (event){ $(\".select li\").removeClass(\"current\"); $(event.target).addClass(\"current\"); }) $(\".btn\").click(function(e){ /
JS学习笔记,持续记录

Layui学习笔记,一起加油!

Layui(谐音:类 UI) 是一套开源的 Web UI 解决方案,采用自身经典的模块化规范,并遵循原生 HTML/CSS/JS 的开发方式,极易上手,拿来即用。 全局对象 layui,一切从它开始。 建立模块入口,并通过 layui.use() 方式来加载该入口文件,加载指定目录下的index.js文件内的模块。 <script> layui.config({ base: \'/res
Layui学习笔记,一起加油!

JS模块化编程以及AMD、CMD规范、Webpack

先想一想,为什么模块很重要? 随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作、模块复用、单元测试等等一系列复杂的需求。 因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。 但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的
JS模块化编程以及AMD、CMD规范、Webpack

记录一些以前没见过的JS语法

《ES6标准入门 第3版 .pdf》看了一遍,时间长了没怎么用,也没记住多少,嗯,那只好在实践中学习。 1. js中函数的两种命名方式,即表达式和声明式。 :函数的声明式写法为:function foo(){/*...*/},这种写法会导致函数提升,所有function关键字都会被解释器优先编译,不管是声明在什么位置,都可以调用它,但是它本身不会被执行,定义只是让解释器知道其存在,只有在被调用的时
记录一些以前没见过的JS语法

JS浏览器环境下各种实用API记录

常见的不做记录,在这记录自己以前没见过的。 Clipboard API 是下一代的剪贴板操作方法,比传统的document.execCommand()方法更强大、更合理。 它的所有操作都是异步的,返回 Promise 对象,不会造成页面卡顿。而且,它可以将任意内容(比如图片)放入剪贴板。 const clipboardObj = navigator.clipboard; /*返回 Clipboar
JS浏览器环境下各种实用API记录

Ajax文件上传时:Formdata、File、Blob的关系

“Formdata”接口提供了一种表示表单数据的键值对 key/value 的构造方式,并且可以轻松的将数据通过XMLHttpRequest.send() 方法发送出去。 实现了 FormData 接口的对象可以直接在for...of(遍历属性值,for...in 则是遍历属性名)结构中使用,而不需要调用entries()返回可迭代对象(iterator) : for (var p of myFo
Ajax文件上传时:Formdata、File、Blob的关系

当鼠标按下时拖动元素,简单的JS实现

监听需要移动元素的键盘按下、松开事件和文档对象的鼠标移动事件, 通过一个布尔值作为是否移动的标志,按下时为TRUE,代表跟随移动,鼠标松开为FALSE,代表不跟随移动,鼠标移动时改变元素偏移量。 <!DOCTYPE html> <html lang=\"en\"> <head> <meta charset=\"UTF-8\"> <meta name=\"
当鼠标按下时拖动元素,简单的JS实现