当前位置: 首页 > Web前端 > HTML5

如何使用第三方库实现【前端引导页】功能

时间:2023-04-04 23:39:54 HTML5

.guide-modal{位置:固定;z-指数:999;左:0;右:0;顶部:0;底部:0;背景色:rgba(0,0,0,0.3);}.guide-box{宽度:150px;最小高度:10px;边界半径:5px;背景色:#fff;位置:abso琵琶;过渡:0.5s;填充:10px;text-align:center;}.btn{margin:20px5px5px5px;}前言随着应用功能越来越多,繁多详尽的功能用法和文档已经不能满足追求速度的时代需求,和引导页(或分步引导)本质是化繁为简,用更简单、更短、更清晰的文字引导用户使用相应的功能,尤其是对于ToB项目。各种新的功能需求迭代非常快,难免需要一个引导页功能来快速帮助用户引导。接下来,我们将从两个方面着重介绍一下【前端引导页】:有哪些第三方库可以直接使用快捷实现功能?如何自己实现前端引导页的功能?第三方库的选型如果你不知道如何进行技术选型,可以看看山岳老师的这篇文章。在前端,如何做出更好的技术选型?,下面简单列举几个相关库进行简单介绍,具体需求具体分析选择,其他和API使用,具体实现效果可以通过官方文档或者对应的README.md查看。vue-tourvue-tour是一款轻量级、简单且可定制的Tour插件。配置比较简单明了,但是只适用于Vue2项目。具体效果请参考上一链接中的相应内容。driver.jsdriver.js是一个强大的轻量级通用JavaScript引擎,可以在整个页面上驱动用户的注意力,大小只有4kb左右,并且没有外部依赖,不仅高度可定制,而且支持所有主流浏览器设备。shepherd.jsshepherd.js包含了很多API,大部分场景都可以通过其对应的配置获取。缺点是整体封装体积比较大,配置也比较复杂。一般复杂的配置内容需要打包两次,将可用的可变和不可变配置项提取出来,具体效果可以查看其官方文档。intro.jsintro.js是一个开源的vanillaJavascript/CSS库,用于添加分步介绍或提示。大小约为10kB。它是轻量级的,没有外部依赖。详情参见官方文档。实现引导页功能引导页的核心功能其实就是两点:一是高亮部分,二是引导部分。这两点其实并不难做到。引导部分无非是随着高亮部分一起移动,加上一些简单的动画或者过渡效果就可以了,也分为遮罩层引导和非遮罩层引导。这里有一个比较复杂的蒙版层指导。下面简单介绍两种简单的实现方案。cloneNode+position+transition的核心实现:高亮部分通过el.cloneNode(true)复制对应的目标元素节点,并将clone节点加入mask层并通过margin()实现clone节点与目标节点的位置ortranslate,position等)重合引导部分通过position:fixed实现定位效果,通过动态修改left和top属性实现引导弹窗跟随目标移动。转场动画通过转场实现位置的平滑移动。当页面位置/内容发生变化时(如:resize、scroll事件),需要重新计算位置信息。缺点:需要对目标节点进行深度复制,无法在引导的同时达到运行效果。演示:核心代码://核心配置参数constselectors=[{selector:"#btn1",message:"点击这里【新建】添加数据!",},{selector:"#btn2",message:"Be小心[删除]数据!”,},{选择器:“#btn3”,消息:“您可以通过此按钮[修改]数据!”,},{selector:"#btn4",message:"一键【完成】所有操作!",},];//Guide.vue.guide-modal{位置:固定;z-指数:999;左:0;右:0;顶部:0;底部:0;背景色:rgba(0,0,0,0.3);}.guide-box{宽度:150px;最小高度:10px;边界半径:5px;背景色:#fff;位置:abso琵琶;过渡:0.5s;填充:10px;text-align:center;}.btn{margin:20px5px5px5px;}复制代码z-index+position+transition核心实现:高亮部分由z-index的值控制,使得目标元素显示在遮罩层上。引导部分通过position:fixed实现定位效果,通过动态修改left和top属性实现引导弹窗随目标移动。过渡动画通过transition实现位置的平滑移动当位置/内容发生变化时(如:resize、scroll事件),需要重新计算位置信息缺点:当目标元素的父元素为position:fixed|绝对|sticky,目标元素的z-index不能超过遮罩层(可以参考shepherd.js的svg解决方案)效果演示:核心代码:.guide-modal{position:fixed;z-指数:999;左:0;右:0;顶部:0;底部:0;背景色:rgba(0,0,0,0.3);}.guide-box{宽度:150px;最小高度:10px;边界半径:5px;背景色:#ffff;位置:绝对;过渡:0.5s;填充:10px;解决z-index失效的问题?这里我们以shepherd.js为例。先看官方文档展示的demo效果:上面的效果已经做了一些验证:正常点击NEXT进入下一步引导,仔细观察相关SVG数据的变化等到引导部分当指向代码块的内容区域时,复制此时SVG中路径相关的参数返回第一步,此时可以明显看出高亮部分的高度小了,直接替换将当前SVG中路径相关的参数与上一步复制的参数进行对比,此时发现整体SVG高亮内容的宽高发生了变化。打印时,保留目标元素的高亮区域(即SVG不需要绘制这部分),解决了使用z-index可能失败的问题。最后,以上是一些简单的实现,但是还有很多细节需要考虑。比如侧边操作的实现,定位原因导致的图层显示问题等等,都还需要优化。相信大多数人的第一反应是:直接用第三方库实现功能就好了。没必要自己实现功能,功能不完整,可能不好用。对于这一点,前面看到一句话说的很好:理解底层实现原理比使用库本身更有意义。当然每个人的想法都不一样,但是想要开始理解原理,不能马上去挑战一些进阶的内容,为什么不从您感兴趣的不太复杂的功能开始呢?作者:熊的猫链接:https://juejin.cn/post/714263...来源:稀土掘金版权归作者所有。商业转载请联系作者授权,非商业转载请注明出处。