SunXinFei / sunxinfei.github.io

前后端技术相关笔记,已迁移到 Issues 中
https://github.com/SunXinFei/sunxinfei.github.io/issues
32 stars 3 forks source link

前端引导二三事 #29

Open SunXinFei opened 3 years ago

SunXinFei commented 3 years ago

引导在项目中属于增加用户体验类,通过下一步、下一步的方式来使用户能够很快的对产品上手,或对产品的一些交互逻辑进行了解。前端增加用户体验类的东西比如有:骨架屏、动画、引导。网上实现的引导方式有很多,现在将实现的方式进行总结。

整体流程

image

引导组成部分

如图所示,引导一般分为如下几部分构成:

  1. 阴影遮罩层
  2. 高亮区域
  3. 引导内容悬浮框(展示、操作、or自定义html)

image

SunXinFei commented 3 years ago

高亮区域

首先我们讨论高亮区域的定位问题,目前所有的开源项目里面,无一例外使用的是元素选择器,且只支持唯一值,而不是直接使用{ top:200px, left:100px},原因很简单,写死数值在不同分辨率下会出现区域位置错误的情况。 后面我们还会讨论高亮区域包含若干元素,如下图: image

关于如何实现在阴影遮罩中高亮透出一块区域的问题,这里有三种主要的实现方式,依次讨论

高亮的DOM元素(示例:)

image

高亮的白底区域(示例:)

image

通过polyfill的方式:修改intro.js的helper的宽高以及position的来实现异形高亮 image

相关的开源项目: https://github.com/usablica/intro.js https://github.com/kamranahmedse/driver.js


box-shadow


上下左右四块拼接


SVG的path

SVG的path属性如下,其中大写表示绝对位置,小写表示相对位置。 示例:https://jsfiddle.net/sunxinfei/rcboav85/3/

- M = moveto
- L = lineto
- H = horizontal lineto
- V = vertical lineto
- C = curveto
- S = smooth curveto
- Q = quadratic Belzier curve
- T = smooth quadratic Belzier curveto
- A = elliptical Arc
- Z = closepath

SVG蒙版(mask)

和上一个方法看起来很像,使用的svg,但是这个方法利用的是mask以及clipPath


mix-blend-mode

关于mix-blend-mode

在线示例: https://jsfiddle.net/sunxinfei/3kh1jezy/4/ image

相关的开源项目: https://github.com/gilbarbara/react-joyride

-webkit-mask

关于未来的属性-webkit-mask不做过多讨论,

http://jsfiddle.net/sunxinfei/hf4zmecq/3/ http://jsfiddle.net/break/8vrU7/

引导开源项目汇总

SunXinFei commented 3 years ago

css鼠标事件pointer-events

关于pointer-events我们着重讨论下pointer-events: none

元素永远不会成为鼠标事件的target。但是,当其后代元素的pointer-events属性指定其他值时,鼠标事件可以指向后代元素,在这种情况下,鼠标事件将在捕获或冒泡阶段触发父元素的事件侦听器。

作用:

css兼容性,由于是一个比较老的属性,几乎可以忽略兼容性。 image

Kun8018 commented 3 years ago

大佬在哪家大厂呀

YaoKaiLun commented 3 years ago

很赞,之前也研究过 intro.js 这个库,高亮和局部可点击这两个功能的实现令人惊喜。这里讲局部可点击漏了一个点,除了 pointer-event 之外,还行要动态给高亮元素设置 z-index,将其置于最前。