zoukankan      html  css  js  c++  java
  • 网站新功能引导镂空效果

    我们初次进入一个网站的时候,现在好多网站都有新功能指引步骤,点击就会出现下一步,这次只是做个例子。

    镂空效果之前没有想到过,看了http://www.zhangxinxu.com/wordpress/2016/03/better-black-mask-guide-overlay-method/张老师的博客有的启发

    遮罩部分并不是使用的背景,而是使用border-width对四个边进行填充,形成一个镂空效果,



    我们想点击一下,就会跳到下一步,一下就是这个过程的演示,不过代码还有一些问题,ie7上遮罩不是全屏,这个问题还没解决,大概的思路如下:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>镂空</title>
        <style>
            *{margin:0;padding:0;}
            .cover {
                position: absolute;
                left: 0;
                top: 0;
                right: 0;
                bottom: 0;
                border: 0 solid #000;
                opacity: .75;
                filter: alpha(opacity=75);
                z-index: 9;
                box-shadow: 0 0 0 100px #000;
                overflow: hidden;
                width: 120px;/*可见区域宽高*/
                height: 80px;
                border-width: 20px 2000px 2160px 20px;/*镂空周围填充的border*/
                transition:all 300ms;
                -webkit-transition:all 300ms;
                -moz-transition:all 300ms;
                -o-transition:all 300ms;
            }
            .cover::before {
                content: '';
                width: 100%;
                height: 100%;
                border-radius: 50%;
                border: 400px solid #000;
                position: absolute;
                left: -400px;
                top: -400px;
                box-shadow: inset 0 0 5px 2px rgba(0,0,0,.75);
            }
            .box1{width:100px;height:80px;border:solid 1px red;margin:20px 20px;}
            .box2{width:100px;height:100px;border:solid 1px red;margin:20px 20px;}
            .box3{width:200px;height:100px;border:solid 1px red;margin:20px 20px;}
            .box4{width:200px;height:200px;border:solid 1px red;margin:20px 20px;}
        </style>
    </head>
    <body>
    <div class="cover"></div>
    <div class="mask"></div>
    <div class="target box1">这是第一块需要指引的内容</div>
    <div class="target box2">这是第二块需要指引的内容</div>
    <div class="target box3">这是第三块需要指引的内容</div>
    <div class="target box4">这是第四块需要指引的内容</div>
    <div class="box5" style="500px;height:1000px;border:solid 1px red;">
        我们初次进入一个网站的时候,现在好多网站都有新功能指引步骤,点击就会出现下一步,这次只是做个例子。
        镂空效果之前没有想到过,看了http://www.zhangxinxu.com/wordpress/2016/03/better-black-mask-guide-overlay-method/张老师的博客有的启发
        遮罩部分并不是使用的背景,而是使用border-width对四个边进行填充,形成一个镂空效果,
        我们想点击一下,就会跳到下一步,一下就是这个过程的演示,不过代码还有一些问题,ie7上遮罩不是全屏,这个问题还没解决,大概的思路如下:
    </div>
    <script>
        //var cover=document.getElementsByClassName('cover')[0];  //ie6、7、8不兼容
        var cover = getClassNames('cover' , 'div')[0];//ie6、7、8兼容性处理
        //var target=document.getElementsByClassName('target');
        var target=getClassNames('target','div');
        operate();
        window.onresize=function(){
            operate();
        }
        function operate(){
            var swidth=document.body.clientWidth||document.documentElement.clientWidth;  //获取屏幕文档区域的宽度,兼容
            var sheight=document.body.clientHeight||document.documentElement.clientHeight;//获取屏幕文档区域的高度
            var i=0;//默认第一个元素
            var width1=target[i].clientWidth;//获取第一个指示元素的宽度
            var height1=target[i].clientHeight;//获取第一个指示元素的高度
            var left1=target[i].offsetLeft;//获取第一个指示元素距离屏幕左边的距离
            var top1=target[i].offsetTop;//获取第一个指定元素距离屏幕上边的距离
            var right1=swidth-width1-left1;//border-right
            var bottom1=sheight-top1-height1;//border-bottom
            cover.style.width=width1+'px';//设置覆盖区域镂空部分的宽度
            cover.style.height=height1+'px';//设置覆盖区域镂空部分的高度
            cover.style.borderWidth=top1+'px'+' '+right1+'px'+' '+bottom1+'px'+' '+left1+'px';//设置镂空区域的border-width
            document.body.onclick=function(){
                i++;
                if(i>3){i=0;}
                var width=target[i].clientWidth;
                var height=target[i].clientHeight;
                var left=target[i].offsetLeft;
                var top=target[i].offsetTop;
                cover.style.width=width+'px';
                cover.style.height=height+'px';
                var right=swidth-left-width;
                var bottom=sheight-top-height;
                cover.style.borderWidth=top+'px'+' '+right+'px'+' '+bottom+'px'+' '+left+'px';
            }
        }
        //document.getElementsByClassName()兼容性
        function getClassNames(classStr,tagName){
            if (document.getElementsByClassName) {
                return document.getElementsByClassName(classStr)
            }else {
                var nodes = document.getElementsByTagName(tagName),ret = [];
                for(i = 0; i < nodes.length; i++) {
                    if(hasClass(nodes[i],classStr)){
                        ret.push(nodes[i])
                    }
                }
                return ret;
            }
        }
        function hasClass(tagStr,classStr){
            var arr=tagStr.className.split(/s+/ ); //这个正则表达式是因为class可以有多个,判断是否包含
            for (var i=0;i<arr.length;i++){
                if (arr[i]==classStr){
                    return true ;
                }
            }
            return false ;
        }
        //ie7下还是有问题,border-width显示不了全屏
    </script>
    </body>
    </html>

     效果如下:

     
  • 相关阅读:
    怎样把echarts图表做成响应式的
    检测IE浏览器兼容Edge模式及IE11
    封装微信jssdk自定义分享代码
    C# json字符串 转换成数组、集合、相应对象 sansan
    ObjectC 正确使用内存的几条法则 sansan
    c# 利用反射设置属性值 sansan
    ie6不能识别option标签的selected属性解决方案 sansan
    sql server 2005/2008 设置 sql身份验证 和 sa空密码(像sql2000一样使用)(转载) sansan
    SqlServer 日期时间格式转换 sansan
    C#获取文件大小 sansan
  • 原文地址:https://www.cnblogs.com/zhaixr/p/6963510.html
Copyright © 2011-2022 走看看