Home

Element UI FormItem 自定义子组件怎么进行规则校验

背景:业务方觉得 Element UI 的 Input 密码输入框不能一直显示小眼睛图标,不太好看,提出了想一直显示的需求。 需求:看了 Element UI 的文档,没办法通过传递属性来实现,于是需要自己对 Input 密码输入框进行二次封装。 要实现的功能: 对 <ElInput> 组件进行二次封装,支持一直显示小眼睛图标,并且可以切换明文和密码两种模式 通过 <ElFormItem> 组件嵌套的时候能支持像 <ElInput> 组件的自动校验 当使用组件时,支持像 <ElInput> 组件的传参 TS 提示 方案: Vue $attrs 可以拿到所有的属性和事件,但是组件在消费的时候,没有 <E...

Read more

Array.sort() 排序

在 JavaScript 中,我们会使用 Array.sort() 来进行排序,一般的用法如下: array.sort((a, b) => a - b); // 升序 array.sort((a, b) => b - a); // 降序 问题是:为什么 a - b 得到的是升序,而 b - a 却能得到降序呢,因为 a - b 和 b -a 都存在结果为正或负的情况,内部到底是怎么计算的呢? 在新版本的的 V8 引擎中,使用的是 TimSort 算法,我们主要看旧版本的 V8 引擎中的排序算法。 在旧版本的 V8 引擎中,会根据数组的长度来决定使用什么排序,如果数组的长度大于 22(各版本不一致) 则会使用快速排序,否则使用插入排序。 插入排序的大致逻辑: v...

Read more

怎么在保留 hover 类的情况下设置字体颜色?

在使用 UI 框架进行业务开发时,UI 框架一般都是内置一套 CSS 样式,当我们需要对特定的组件修改样式时,一般会覆盖框架内置的 CSS 样式,但是有时候我们想保留一些框架内置的 CSS,例如:在按钮悬浮的时候保留框架内置的悬浮态,但是修改正常状态下的颜色。此时我们在设置元素的 color 属性是会同时把框架内置的 :hover 伪类下的颜色也覆盖掉,为了避免这种情况,可以使用 :is() 选择器配合 :not() 选择器实现: .father :is(.son:not(:hover)) { // 样式 } :is() 伪类选择器没有权重,所以在上面的例子中,权重 = .father 类,然后在 is() 中选中子元素,同时子元素必须不是处于鼠标悬浮状态,此样式才有效。 ...

Read more

Three.js 之纹理

纹理(Texture) 通过纹理可以给 mesh 添加图片,颜色,视频等。 bumpMap:给纹理设置深度效果 normalMap:在一个 points 比较少的 mesh 中,展示比较详细的纹理 displacementMap:让纹理有扭曲效果,但是对 points 比较少的 mesh 效果不明显 aoMap:通过 aoMap 可以提高 mesh 被灯光照射时阴影计算的性能,可以控制部分阴影的强度 lightMap:通过 lightMap 可以设置 mesh 的阴影 metalnessMap:一种摸起来更加有质感的纹理 roughnessMap:一种摸起来更加光滑的纹理 alphaMap: 透明的纹理 emissiveMap:一种看着像发光的纹理,配合 emiss...

Read more

Three.js 创建组和 mesh

THREE.Group 使用 Three.Group 对多个 mesh 进行管理,同一个组内的 mesh 的位置都是相对于它的父级。 如果需要创建大量的 mesh,使用 Three.Group 会有性能影响,可以使用 Three.InstancedMesh THREE.InstancedMesh THREE.InstancedMesh 和 THREE.InstancedBufferGeometry 可以对具有相同的几何体的的 mesh 的渲染进行性能优化,能够显著减少性能消耗 BufferGeometryUtils.mergeBufferGeometries 如果大量的 mesh 的几何体不一样的话,可以使用 BufferGeometryUtils.mergeBufferG...

Read more

Three.js 之点

点和精灵(Point and Sprite) 使用点(Three.Points)可以创建一个云团,云团由很多个点组成。 也开始使用 THREE.Sprite 创建点,点是一个二维的,并且永远朝着相机。 使用 sizeAttenuation 属性可以控制点是否有透视效果(近大远小),但是在正交相机下无效。 使用 map 属性可以给点添加贴图,贴图可以通过 THREE.Texture(canvas) 获取 Canvas 的图案显示,也可以通过 THREE.TextureLoader().load(image) 来加载图片,图片的宽高最好是 2 的倍数。 使用 velocity 属性对点的位置进行移动。

Read more

Three.js 之动画

通过 THREE.RayCaster 获取某个坐标是否在 mesh 上 通过 RayCaster 可以判断当前鼠标是否悬浮在某一个 mesh 上面: const raycaster = new THREE.Raycaster(); raycaster.setFromCamera(pointer, camera); const intersects = raycaster.intersectObjects(cubes, false); 通过 DragControls 拖拽 mesh import { DragControls } from 'three/addons/controls/DragControls.js'; import { OrbitControls } fro...

Read more