首页 > 移动开发 > ANDROID > 菠菜程序搭建如何做新人引导功能?
在端午节前碰到一个菠菜搭建需求:
「新人引导效果」针对第一次使用平台的菠菜用户进行主要功能引导。
具体引导路径为:点击“新增按钮”,对弹出的菠菜搭建商信息内容进行解释,并引导用户填充表单,最后提交表单。
下面为效果截图(
感兴趣的兄弟们可以自己实现一下,我用的
vue +
ElementUI):
我们打工人要的就是效率,我们不生产轮子,我们都是轮子的搬运工。
我试用了一下 introjs 和 driver.js,最后使用了 introjs 来实现,但是 两个库都有不如意的点。
introjs
pointer-events: none;user-select: none; + 引导中状态来自行实现的功能。driver.js
当然了,即使这么难,但还是有办法的。introjs 实现案例: http://jsrun.net/KAQKp/edit, 虽然兼容性有可能堪忧。
虽然有插件,但是我们也可以了解一下如何实现。我们来拆解一下
高亮功能&遮罩功能
fixed +
z-index 层级box-shadowborder + 位移
https://jsrun.net/cRQKp/edit
可以看到基本能满足,但是底部还是可单击的。而且并没有
分层。
通过增加遮罩层来实现分层功能,这样就可以阻止事件了。 https://jsrun.net/duQKp/edit
但是这里还是有一个问题的。
z-index 不能超过父级。所以我们需要增加多个层,来规避这个问题。
popper 的功能我们可以使用一些三方库来实现
自己通过 offsetParent 和 递归 parentNode 来实现。
absolute + event (pageY)
tooltip.style.position = 'absolute';
tooltip.style.top = `${e.pageY}px`;
tooltip.style.left = `${e.pageX}px`;fixed + event (clientY)
tooltip.style.position = 'fixed';
tooltip.style.top = `${e.clientY}px`;
tooltip.style.left = `${e.clientX}px`;absolute + 递归 offset
const getOffestValue = function getOffestValue(el, offsetLeft="offsetLeft"){ if(!el) return 0; return el[offsetLeft] + (getOffestValue(el.offsetParent, offsetLeft) || 0)
}
tooltip.style.position = 'absolute';
tooltip.style.top = `${getOffestValue(el, 'offsetTop') - 30}px`;
tooltip.style.left = `${getOffestValue(el) - 20}px`;
const {x,y} = el.getBoundingClientRect()
tooltip.style.position = 'fixed';
tooltip.style.top = `${y - 30}px`;
tooltip.style.left = `${x - 30}px`;可以通过 bus 或者 $emit 抛出。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69971860/viewspace-2898742/ ,如需转载,请注明出处,否则将追究法律责任。