返回顶部
首页 > 资讯 > 前端开发 > 其他 >JS+CSS快速实现新手引导效果
  • 386
分享到

JS+CSS快速实现新手引导效果

前端JavaScriptCSS 2023-05-14 22:05:03 386人浏览 泡泡鱼
摘要

本篇文章给大家带来了关于javascript的相关知识,其中主要跟大家介绍怎么通过简单的CSS及js实现一下新手引导效果,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。废话开篇:通过一些简单 CSS 及 JS 实现一下新手引导效果一、实

本篇文章给大家带来了关于javascript的相关知识,其中主要跟大家介绍怎么通过简单的CSSjs实现一下新手引导效果,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

废话开篇:通过一些简单 CSSJS 实现一下新手引导效果

一、实现效果

屏幕录制2023-02-16 下午2.09.24.gif

二、实现

实现其实很简单,mask蒙版就是平铺一个整屏的 div,设置背景颜色为透明 transparent ,然后,再设置 outline 为半透明及足够宽就可以了,再用同样的方式创建一个 箭头警告 标签。

1、用法

let maskIntroduceManage = new MaskIntroduceManage([
    new MaskIntroduceItem('one','人生若只如初见'),
    new MaskIntroduceItem('two','何事秋风悲画扇'),
    new MaskIntroduceItem('five','等闲却变故人心'),
    new MaskIntroduceItem('six','骊山语罢清宵半'),
    new MaskIntroduceItem('four','却道故人心易变'),
    new MaskIntroduceItem('finally','谢谢大家支持!')
])
maskIntroduceManage.benginIntroduce()

2、HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<style type="text/css">
*{
    padding: 0;
    margin: 0;
}
.content {
    padding: 0;
    display: flex;
    flex-direction: row;
    justify-content: space-between;
    align-items: center;
    width: 100%;
}
span {
    width: 60px;
    height: 60px;
    line-height: 60px;
    margin-left: 40px;
    margin-top: 140px;
    margin-bottom: 0px;
    text-align: center;
    display: block;
    background-color: antiquewhite;
}

.finally {
    width: 100px;
    height: 100px;
    background-color: cornsilk;
    border-radius: 50%;
    line-height: 100px;
    text-align: center;
    margin-top: 30px;
    margin-left: auto;
    margin-right: auto;
}
span:nth-of-type(1){
    margin-top: 30px;
}
span:nth-of-type(2){
    margin-top: 70px;
}
span:nth-of-type(3){
    margin-top: 160px;
}
span:nth-of-type(4){
    margin-top: 160px;
}
span:nth-of-type(5){
    margin-top: 70px;
}
span:nth-of-type(6){
    margin-top: 30px;
}
</style>
<body>
<div class="content">
    <span id="one">纳</span>
    <span id="two">兰</span>
    <span id="three">容</span>
    <span id="four">若</span>
    <span id="five">作</span>
    <span id="six">词</span>
</div>
<div class="finally" id="finally">
    谢谢
</div>
</body>
<script src="./maskIntroduce.js"></script>
<script>
let maskIntroduceManage = new MaskIntroduceManage([
    new MaskIntroduceItem('one','人生若只如初见'),
    new MaskIntroduceItem('two','何事秋风悲画扇'),
    new MaskIntroduceItem('five','等闲却变故人心'),
    new MaskIntroduceItem('six','骊山语罢清宵半'),
    new MaskIntroduceItem('four','却道故人心易变'),
    new MaskIntroduceItem('finally','谢谢大家支持!')
])
maskIntroduceManage.benginIntroduce()
</script>
</html>

3、JS

// 单元信息model
class MaskIntroduceItem {
    // 需要引导的dom的ID
    id
    // 需要引导的dom功能描述
    warming
    constructor(id,warming){
        this.id = id
        this.warming = warming
    }
}

// 遮罩操作类
class MaskIntroduceManage {
    // 消息展示类集合
    maskIntroduceItems
    // 遮罩层
    el
    // 遮罩层提示框
    warmingEl
    // 指引肩头
    guidanceEl
    // 展示的第几个
    currentShowIndex = 0
    // 记录window事件
    windowEvent = null
    
    constructor(maskIntroduceItems){
        this.maskIntroduceItems = maskIntroduceItems
    }
    
    // 添加消息展示类
    addIntroduceItem(introduceItem){
        this.maskIntroduceItems.push(introduceItem)
    }
    
    // body增加遮罩
    addMaskToBody(){
        //添加遮罩框
        this.el = document.createElement('div')
        this.el.style.cssText = 'position: fixed;background: transparent;outline:rgba(0, 0, 0, 0.5) 3500px solid;'
        let body = document.getElementsByTagName('body')[0]
        body.appendChild(this.el)
        //添加提示框
        this.warmingEl = document.createElement('div')
        this.warmingEl.style.cssText = 'position:fixed;width:100px;background:white;border-radius: 10px;padding: 30px;font-size: 14px;'
        body.appendChild(this.warmingEl)
        //添加指引箭头
        this.guidanceEl = document.createElement('div')
        this.guidanceEl.style.cssText = 'position:fixed;width: 14px; height: 13px; background-color: white;clip-path: polyGon(50% 0,100% 100%,0 100%);'
        body.appendChild(this.guidanceEl)
        //设置body禁止滚动
        body.style.overflow = 'hidden'
        //保留window事件
        if(window.onclick){
            this.windowEvent = window.onclick
        }
        window.onclick = ()=>{
            this.nextIntroduce()
        }
    }

    // 开始引导
    benginIntroduce(){
        this.addMaskToBody()
        this.nextIntroduce()
    }
    
    // 下一步
    nextIntroduce(){
        let maskIntroduceItem = this.maskIntroduceItems.length > 0 ? this.maskIntroduceItems[this.currentShowIndex] : null
        if(!maskIntroduceItem){
            return
        }
        let needIntroduceEl = document.getElementById(maskIntroduceItem.id)
        //遮罩层的镂空位置
        this.el.style.width = needIntroduceEl.offsetWidth + 'px'
        this.el.style.height = needIntroduceEl.offsetHeight + 'px'
        this.el.style.top = this.getElementPosition(needIntroduceEl).top + 'px'
        this.el.style.left = this.getElementPosition(needIntroduceEl).left + 'px'
        //设置对应倒角,但是由于背景颜色是透明的,所以,没有效果(???)
        //this.el.style.borderRadius = window.getComputedStyle(needIntroduceEl,null)['border-radius']
        this.currentShowIndex ++
        //指引箭头位置
        let guidanceElLeft = this.getElementPosition(needIntroduceEl).left + needIntroduceEl.offsetWidth / 2.0
        this.guidanceEl.style.top = this.getElementPosition(needIntroduceEl).top + needIntroduceEl.offsetHeight + 20 + 'px'
        this.guidanceEl.style.left = guidanceElLeft + 'px'
        //提示框的位置
        this.warmingEl.style.top = this.getElementPosition(this.guidanceEl).top + this.guidanceEl.offsetHeight - 4 + 'px'
        let warmingElLeft = this.getElementPosition(needIntroduceEl).left - ((this.warmingEl.offsetWidth - needIntroduceEl.offsetWidth) / 2.0)
        if(warmingElLeft < 0){
            warmingElLeft = this.getElementPosition(needIntroduceEl).left + 10
        }
        if(warmingElLeft + this.warmingEl.offsetWidth > document.getElementsByTagName('body')[0].offsetWidth){
            warmingElLeft = warmingElLeft - 10 - (this.warmingEl.offsetWidth - needIntroduceEl.offsetWidth) / 2.0
        }
        this.warmingEl.style.left = warmingElLeft + 'px'
        this.warmingEl.innerHTML = maskIntroduceItem.warming
        //最后一个展示完恢复window点击事件
        if(this.currentShowIndex >= this.maskIntroduceItems.length){
            setTimeout(() => {
                //移除当前遮罩
                this.el.remove()
                //移除当前提示框
                this.warmingEl.remove()
                //移除箭头
                this.guidanceEl.remove()
                //设置body可以滚动
                document.getElementsByTagName('body')[0].style.overflow = 'auto'
                //恢复window事件
                if(this.windowEvent){
                    window.onclick = this.windowEvent
                }
            }, 2000);
        }
    }

    // 获取元素在屏幕的位置
    getElementPosition(element){
        var top = element.offsetTop
        var left = element.offsetLeft
        var currentParent = element.offsetParent;
        while (currentParent !== null) {
            top += currentParent.offsetTop
            left += currentParent.offsetLeft
            currentParent = currentParent.offsetParent
        }
        return {top,left}
    }
}

三、总结与思考

实现原理特别简单,没有太多复杂的逻辑在里面,想通过当前“需要介绍”的标签的 borderRadius 来设置镂空部分的倒角值,但是背景颜色是透明的,因此设置了,可以生效但也没有效果。代码拙劣,大神勿笑~

以上就是JS+CSS快速实现新手引导效果的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: JS+CSS快速实现新手引导效果

本文链接: https://lsjlt.com/news/207103.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS+CSS快速实现新手引导效果
    本篇文章给大家带来了关于JavaScript的相关知识,其中主要跟大家介绍怎么通过简单的CSS及JS实现一下新手引导效果,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。废话开篇:通过一些简单 CSS 及 JS 实现一下新手引导效果一、实...
    99+
    2023-05-14
    前端 JavaScript CSS
  • JS+CSS如何快速实现新手引导效果
    今天小编给大家分享一下JS+CSS如何快速实现新手引导效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、实现效果二、实现...
    99+
    2023-07-05
  • 基于JavaScript如何实现新手引导效果
    这篇文章主要介绍了基于JavaScript如何实现新手引导效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于JavaScript如何实现新手引导效果文章都会有所收获,下面我们一起来看看吧。一、实现效果二、实...
    99+
    2023-07-05
  • Android 新手引导蒙层效果实现代码示例
    先上效果图: 这个效果一开始我是想直接让UI给个切图,后来发现这样不行,适配很差,达不到效果。所以就自己动手写代码,其实思路也很简单:在这个布局的父布局上面再手动添加一个v...
    99+
    2022-06-06
    示例 Android
  • 基于JavaScript简单实现一下新手引导效果
    目录一、实现效果二、实现1、用法2、HTML3、JS三、总结与思考一、实现效果 二、实现 实现其实很简单,mask蒙版就是平铺一个整屏的 div,设置背景颜色为透明 transpa...
    99+
    2023-03-07
    JavaScript实现新手引导效果 JavaScript实现新手引导 JavaScript新手引导
  • JS实现百度新闻导航栏效果
    本文实例为大家分享了JS实现百度新闻导航栏效果的具体代码,供大家参考,具体内容如下 最近在学Web前端,用js简单实现了百度新闻导航栏的效果。当鼠标移动到某一选项上方时,会有一个红...
    99+
    2024-04-02
  • iOS开发添加新手引导效果
    往往项目中经常出现此类需求 用户通过点击引导按钮可响应页面附带按钮的点击事件。 // // gzhGuideView.h // GuideView // // Created ...
    99+
    2022-05-25
    ios 新手引导
  • js+css实现换肤效果
    本文实例为大家分享了js+css实现换肤效果的具体代码,供大家参考,具体内容如下 效果图如下: 需求:点击对应小圆点,下面内容颜色跟着改变 主要思路: 1.在css中把对应的样式先...
    99+
    2024-04-02
  • 基于Html+CSS+JS实现手动放烟花效果
    目录效果展示实现代码HtmlCssJavaScript雷迪森安的乡亲们,欢迎来到老实人的前端课堂,上次写了一个新春小盲盒,这大过年的,我把烟花都给你们准备好了,今天我们来写个小烟花吧...
    99+
    2024-04-02
  • js实现新闻轮播效果
    本文实例为大家分享了js实现新闻轮播效果的具体代码,供大家参考,具体内容如下 原生js实现新闻轮播效果,附详细注释 <!DOCTYPE html> <html la...
    99+
    2024-04-02
  • JS 实现导航栏悬停效果
    JS-实现导航栏悬停 先布个局: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "ht...
    99+
    2022-11-15
    导航栏 悬停
  • JS前端使用Canvas快速实现手势解锁特效
    目录前言Demo需要实现的功能初始化数据和页面渲染touchstart 手指开始触摸事件touchmove 监听手指滑动事件touchend 监听手指触摸结束事件页面滚动处理连接的两...
    99+
    2024-04-02
  • CSS怎样实现导航效果
    这篇文章主要介绍CSS怎样实现导航效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! html <div <ul> <li><a href=...
    99+
    2024-04-02
  • js+css如何实现换肤效果
    本篇内容介绍了“js+css如何实现换肤效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果图如下:需求:点击对应小圆点,下面内容颜色跟着...
    99+
    2023-07-02
  • Android实现快速滚动FastScrollView效果
    先看效果图: public class FastScrollView extends ScrollView { private Rect mBarRect = ne...
    99+
    2024-04-02
  • 原生js实现波浪导航效果
    本文实例为大家分享了原生js实现波浪导航效果的具体代码,供大家参考,具体内容如下 展示效果: 源码展示: <!doctype html> <html> &l...
    99+
    2024-04-02
  • JS 实现导航栏悬停效果(续)
    上次【JS-实现导航栏悬停】说到,导航栏悬停的那个页面在IE上运行的时候,会出导航栏不停的抖动问题。解决方法如下: 将导航栏的定位方式由原来的absolute改为fixed,也不知道...
    99+
    2022-11-15
    导航栏 悬停
  • js如何实现手风琴效果
    这篇文章主要介绍js如何实现手风琴效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:图(1)初始图图(2)点击展开效果代码如下:<!DOCTYPE html&...
    99+
    2024-04-02
  • 原生js实现手风琴效果
    在实际网页开发中,手风琴出现频率也居高。 简单地做了一个手风琴,但觉得它的过渡效果没实现,内容列表出现得很突兀,效果图如下: 实现代码如下: <!DOCTYPE html...
    99+
    2024-04-02
  • js实现简单手风琴效果
    本文实例为大家分享了js实现手风琴效果的具体代码,供大家参考,具体内容如下 效果: 实现代码: <!DOCTYPE html> <html> <...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作