欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js頁面引導(dǎo)頁的實現(xiàn)思路總結(jié)

 更新時間:2023年04月19日 10:01:55   作者:芹小妹_Jessica  
在同學(xué)們使用某些網(wǎng)站的新版本頁面的時候,經(jīng)常會出現(xiàn)一個類似于新手引導(dǎo)一樣的效果,本文主要介紹了js頁面引導(dǎo)頁的實現(xiàn)思路總結(jié),感興趣的可以了解一下

實現(xiàn)思路1

采用png格式的方式,然后高亮部分鏤空,其它部分采用,如下圖所示,簡單誤差大

其效果如圖所示,點擊下一步等沒法按照圖片中的“下一步”按鈕來操作,就算可以通過方法getBoundingClientRect來獲取,也會存在很大誤差。這個思路只能說是一種思路,不太推薦使用,方法簡單但不夠精確

實現(xiàn)思路2

通過組件包裝,外層使用的時候傳入對應(yīng)的數(shù)據(jù)結(jié)構(gòu),我自己的頁面如下所示,所以數(shù)據(jù)包含title/content/target/entry/leave等內(nèi)容,這個可以根據(jù)實際情況配置,但是target是必須有的,它主要是需要將其高亮展示,同時在旁邊掛上content內(nèi)容引導(dǎo)。

  const stepData = [{
    title: '組件庫和圖標(biāo)',
    content: '從基礎(chǔ)組件、自定義業(yè)務(wù)組件、圖標(biāo)庫中拖拽組件或圖標(biāo)到畫布區(qū)域進(jìn)行頁面編排組裝',
    target: '#editPageLeftSideBar',
    entry: () => void,
    leave: () => void
  }]

組件里實現(xiàn)下一步切換的公共邏輯,如果存在不是公共邏輯,可以將方法寫在上面stepData里,在組件下一步方法里進(jìn)行調(diào)用。

    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()

        // 查找下一步的目標(biāo)對象
        const currentStep = props.stepData[state.currentStepIndex]
        const $stepTarget = getTarget()

        // 給target添加class
        addCls()

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

        // 計算引導(dǎo)容器的位置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等第三方庫

到此這篇關(guān)于js頁面引導(dǎo)頁的實現(xiàn)思路總結(jié)的文章就介紹到這了,更多相關(guān)js 引導(dǎo)頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • qq懸浮代碼(兼容各個瀏覽器)

    qq懸浮代碼(兼容各個瀏覽器)

    qq懸浮代碼(兼容各個瀏覽器)。需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • js返回上一頁并刷新代碼整理

    js返回上一頁并刷新代碼整理

    返回上一頁并刷新在此功能有利于用戶的體驗,是每一個web開發(fā)人員所必備的一項,長話短說,今天介紹實現(xiàn)此功能的一個方法,需要了解的朋友可以參考下
    2012-12-12
  • 原生JS實現(xiàn)文件上傳

    原生JS實現(xiàn)文件上傳

    這篇文章主要為大家詳細(xì)介紹了原生JS實現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • bootstrap里bootstrap動態(tài)加載下拉框的實例講解

    bootstrap里bootstrap動態(tài)加載下拉框的實例講解

    今天小編就為大家分享一篇bootstrap里bootstrap動態(tài)加載下拉框的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 微信小程序?qū)崿F(xiàn)自動播放視頻模仿gif動圖效果實例

    微信小程序?qū)崿F(xiàn)自動播放視頻模仿gif動圖效果實例

    這篇文章主要給大家介紹了關(guān)于微信小程序?qū)崿F(xiàn)自動播放視頻模仿gif動圖效果的相關(guān)資料,通過本文介紹的方法可以實現(xiàn)自動播放視頻,視頻無控制條無聲音且自動循環(huán)播放,需要的朋友可以參考下
    2021-07-07
  • JavaScript創(chuàng)建對象的寫法

    JavaScript創(chuàng)建對象的寫法

    JavaScript 有Date、Array、String等這樣的內(nèi)置對象,功能強(qiáng)大使用簡單,人見人愛,但在處理一些復(fù)雜的邏輯的時候,內(nèi)置對象就很無力了,往往需要開發(fā)者自定義對象
    2013-08-08
  • js實現(xiàn)電子時鐘效果

    js實現(xiàn)電子時鐘效果

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)電子時鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • JS實現(xiàn)給數(shù)組對象排序的方法分析

    JS實現(xiàn)給數(shù)組對象排序的方法分析

    這篇文章主要介紹了JS實現(xiàn)給數(shù)組對象排序的方法,結(jié)合實例形式分析了javascript數(shù)組對象排序相關(guān)實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2019-06-06
  • 15分鐘深入了解JS繼承分類、原理與用法

    15分鐘深入了解JS繼承分類、原理與用法

    這篇文章主要介紹了JS繼承分類、原理與用法,結(jié)合實例形式較為詳細(xì)的總結(jié)分析了javascript原型鏈繼承、構(gòu)造函數(shù)繼承、組合繼承、原型式繼承、寄生式繼承和寄生組合式繼承等相關(guān)原理及使用方法,需要的朋友可以參考下
    2019-01-01
  • JS使用Date對象實時顯示當(dāng)前系統(tǒng)時間簡單示例

    JS使用Date對象實時顯示當(dāng)前系統(tǒng)時間簡單示例

    這篇文章主要介紹了JS使用Date對象實時顯示當(dāng)前系統(tǒng)時間,涉及javascript基于定時器動態(tài)操作Date對象相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08

最新評論