js页面引导页的实现思路总结

 更新时间:2023年04月19日 10:01:55   作者:芹小妹_Jessica  
在同学们使用某些网站的新版本页面的时候,经常会出现一个类似于新手引导一样的效果,本文主要介绍了js页面引导页的实现思路总结,感兴趣的可以了解一下

实现思路1

采用png格式的方式,然后高亮部分镂空,其它部分采用,如下图所示,简单误差大

其效果如图所示,点击下一步等没法按照图片中的“下一步”按钮来操作,就算可以通过方法getBoundingClientRect来获取,也会存在很大误差。这个思路只能说是一种思路,不太推荐使用,方法简单但不够精确

实现思路2

通过组件包装,外层使用的时候传入对应的数据结构,我自己的页面如下所示,所以数据包含title/content/target/entry/leave等内容,这个可以根据实际情况配置,但是target是必须有的,它主要是需要将其高亮展示,同时在旁边挂上content内容引导。

  const stepData = [{
    title: '组件库和图标',
    content: '从基础组件、自定义业务组件、图标库中拖拽组件或图标到画布区域进行页面编排组装',
    target: '#editPageLeftSideBar',
    entry: () => void,
    leave: () => void
  }]

组件里实现下一步切换的公共逻辑,如果存在不是公共逻辑,可以将方法写在上面stepData里,在组件下一步方法里进行调用。

    const clearCls = () => {
        document.body.querySelectorAll('.guide-highlight').forEach(el => {
          el.classList.remove('guide-highlight')
        })
     }

    const addCls = (target) => {
       target.classList.add('guide-highlight');
    }

    const getTarget = () => {
        const currentStep = props.stepData[state.currentStepIndex]
        return document.querySelector(currentStep.target)
    }
    
    const onGoNext = () => {
        // 清除所有的高亮class, 因为我是通过class样式来控制的
        clearCls()

        // 查找下一步的目标对象
        const currentStep = props.stepData[state.currentStepIndex]
        const $stepTarget = getTarget()

        // 给target添加class
        addCls()

        // 执行其它方法,譬如上面的leave/entry方法
        if (typeof state.currentStep.leave === 'function') {
          state.currentStep.leave()
        }
        if (typeof currentStep.entry === 'function') {
          currentStep.entry()
        }

        // 计算引导容器的位置style

        const windowWidth = window.innerWidth
        const windowHieght = window.innerHeight
         const {
          top: targetTop,
          right: targetRight,
          bottom: targeBottom,
          left: targetLeft,
          width: targetWidth
        } = $stepTarget.getBoundingClientRect()
        const {
          width,
          height
        } = tipRef.value.getBoundingClientRect()
        let placement = 'left'
        if (width > height
          && targeBottom < 0.3 * windowHieght) {
          placement = targeBottom > 0.5 * windowHieght ? 'top' : 'bottom'
        } else {
          placement = targetLeft > 0.5 * windowWidth ? 'left' : 'right'
        }

        let styles = {}

        if (placement === 'bottom') {
          styles = {
            top: `${targeBottom + 10}px`,
            left: `${targetLeft + (targetWidth - width) / 2}px`
          }
        } else if (placement === 'top') {
          styles = {
            top: `${windowHieght - targetTop - height - 10}px`,
            left: `${targetLeft + (targetWidth - width) / 2}px`
          }
        } else if (placement === 'left') {
          styles = {
            top: `${targetTop}px`,
            right: `${windowWidth - targetLeft + 10}px`
          }
        } else if (placement === 'right') {
          styles = {
            top: `${targetTop}px`,
            left: `${targetRight + 10}px`
          }
        }
    }

插件

introjs/driver.js等第三方库

到此这篇关于js页面引导页的实现思路总结的文章就介绍到这了,更多相关js 引导页内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 微信小程序实现答题倒计时

    微信小程序实现答题倒计时

    这篇文章主要为大家详细介绍了微信小程序实现答题倒计时,自定义计时器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • javascript显示中文日期的方法

    javascript显示中文日期的方法

    这篇文章主要介绍了javascript显示中文日期的方法,涉及javascript针对日期与字符串操作技巧,需要的朋友可以参考下
    2015-06-06
  • JavaScript 读URL参数增强改进版版

    JavaScript 读URL参数增强改进版版

    网上有不少JavaScript 读 URL 参数的函数,但没考虑到 URL 中带 # 符的情况,我的可以处理这种情况,并使用了点对象写法,优化了些性能。
    2008-10-10
  • js实现轮播图的完整代码

    js实现轮播图的完整代码

    这篇文章主要为大家详细介绍了js实现轮播图的完整代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • 解析JavaScript中点号“.”的多义性

    解析JavaScript中点号“.”的多义性

    这篇文章主要介绍了JavaScript中点号“.”的多义性。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • JS扩展String.prototype.format字符串拼接的功能

    JS扩展String.prototype.format字符串拼接的功能

    这篇文章主要介绍了JS扩展String.prototype.format字符串拼接的功能,需要的朋友可以参考下
    2018-03-03
  • JavaScript获取文本框内选中文本的方法

    JavaScript获取文本框内选中文本的方法

    这篇文章主要介绍了JavaScript获取文本框内选中文本的方法,实例分析了javascript通过onclick获取文本框选中文本的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Bootstrap表单Form全面解析

    Bootstrap表单Form全面解析

    在进行自己的后台改版时,大体布局都使用了bootstrap,剩下的表单部分没理由不去使用它,对于表单的美化和布局,bootstrap做的也是很不错的。下文给大家介绍Bootstrap表单Form全面解析,感兴趣的朋友一起看下吧
    2016-06-06
  • JavaScript判断页面是否滚动到底部的技巧

    JavaScript判断页面是否滚动到底部的技巧

    在 JavaScript 中,我们可以通过一些技巧来判断页面是否滚动到底部,本文将介绍一些常用的方法,帮助你在项目中实现这一功能,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • typescript中高级类型Record详解

    typescript中高级类型Record详解

    这篇文章主要介绍了typescript中高级类型Record,ts文档上对Record的介绍不多,但却经常用到,Record是一个很好用的工具类型,本文给大家详细讲解需要的朋友可以参考下
    2022-11-11

最新评论