js css html三变叉的动画 侧边栏弹出具备遮挡层

2 篇文章 0 订阅

做一个响应式前台页面的时候需要这样的功能,下面的代码实现三 → X 动画同时弹出侧边栏 ,只是提供一个思路 ,个人练习还未运用到项目所以也还未包含响应式

演示:
三横线变叉的动画及弹出侧边栏

代码如下:

<!DOCTYPE html>
<html lang="zh-ch">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>测试三条线变叉的动画</title>
    <script src="./plugins/jquery/jquery.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            background-color: #2ecc71;
        }
        /* 整个 三/X 绝对定位到右上角 author: yincaiTA */
        .i-nav-toggle {
            position: fixed;
            top: 11px;
            right: 15px;
            z-index: 1000;
            height: 38px;
            cursor: pointer;
        }
        /* 中间的 一, 相对定位 */
        .i-nav-toggle i {
            position: relative;
            display: inline-block;
            width: 28px;
            height: 2.5px;
            color: #fff;
            font-weight: 700;
            font-size: 14px;
            background: #fff;
            -webkit-transition: .2s;
            transition: .2s;
        }
        /* 伪元素选择器 添加上下两个 一 */
        .i-nav-toggle i::after,
        .i-nav-toggle i::before {
            content: '';
            width: 28px;
            height: 2.5px;
            font-weight: 700;
            font-size: 14px;
            background: #fff;
            position: absolute;
            left: 0;
            -webkit-transition: .2s;
            transition: .2s;
        }
        /* 给上下两个 一, 控制各自的位置 before在下, after在上 top:0为中线 */
        .i-nav-toggle i::before {
            top: 9px;
        }
        .i-nav-toggle i::after {
            top: -9px;
        }
        
        /* 有两种方式: 
            1. 下逆时针 上顺时针
            2. 下顺时针 上逆时针*

            所以把下面的角度全部加上"-", 交叉方向就会改变; 类似可以更改before/after起始位置, 调整旋转方向
            设置top重置为0,旋转时都会向中线靠,所以只需考虑before/after起始上下位置和点击后旋转方向即可
        */
        /* 弹出层 打开时的样式 open 分别控制上下两个 一, 交叉 */
        .i-nav-toggle.open i::before {
            /* 下面的'一' top为0 重置到中线位置中心上移 同时搭配顺时针旋转 才有顺时针摆的感觉 (可以把top设置为9px transition时间设置久一点 搭配观察) */
            top: 0;
            height: 2px;
            -webkit-transform: rotateZ(45deg);
            -ms-transform: rotateZ(45deg);
            transform: rotateZ(45deg);
        }
        .i-nav-toggle.open i::after {
            top: 0;
            height: 2px;
            -webkit-transform: rotateZ(-45deg);
            -ms-transform: rotateZ(-45deg);
            transform: rotateZ(-45deg);
        }
        /* 中线淡化 */
        .i-nav-toggle.open i {
            height: 0;
        }

        /* 弹出层样式 author: yincaiTA */
        .i-shade {
            width: 100%;
            height: 100%;
            position: fixed;
            /* 60px是header的高 */
            top: 60px;
            left: 0px;
            background: #000000;
            -moz-opacity: 0.3;
            -khtml-opacity: 0.3;
            opacity: 0.3;
            display: none;
            z-index: 999;
        }

        /* 弹出的导航菜单样式(小屏幕 这里做演示 需要响应式自己在已有基础上额外添加) */
        .i-side-nav {
            /* 固定定位 */
            position: fixed;
            top: 60px;
            /* 侧导航菜单一直存在 只是在屏幕外 */
            right: -274px;
            height: 100%;
            width: 274px;
            z-index: 1000;
            background-color: dodgerblue;
            transition: .3s;
        }
        /* 打开时的样式 */
        .i-side-nav.open {
            right: 0;
        }

        header {
            height: 60px;
            background-color: #d35400;
        }
    </style>
</head>
<body>

<!-- 顶部区域 -->
<header id="header">
    <!-- X/三 toggle -->
    <div class="i-nav-toggle" id="i-nav-toggle">
        <a><i></i></a>
    </div>
    <!-- 大屏时菜单 -->
    <nav></nav>
</header>
<!-- 弹出层(小屏时 弹出的菜单) -->
<div class="i-side-nav" id="i-side-nav">
    我是侧面弹出的导航菜单
</div>
<!-- 遮盖层 -->
<div class="i-shade" id="i-shade">

</div>

<script>
    // jQuery v1.12.4 author: yincaiTA

    // 页面加载后执行
    $(function() {
        // 给 'X/三' 添加单击事件
        $(".i-nav-toggle").click(function(e) {
            // 加上阻止事件冒泡 让a标签和i标签受到的点击事件交给 div.i-nav-toggle 处理
            e.stopPropagation();

            // 增删 .open
            let toggle = $(".i-nav-toggle");
            // 这里分情况: 是为了点击其他位置关闭弹出层时, 不发生相互影响 
            if (toggle.hasClass("open")) {
                // 已经open就关上
                toggle.removeClass("open");
                $(".i-side-nav").removeClass("open");
                // 关闭全屏阴影
                $(".i-shade")[0].style.display = 'none';
            } else {
                // 没有open就打开(toggle按钮样式变化)
                toggle.addClass("open");
                // 侧边导航菜单打开
                $(".i-side-nav").addClass("open");
                // 打开全屏阴影 去除i-shadenav的display:none
                $(".i-shade")[0].style.display = 'block';
            }
        });

        // 添加点击弹出框之外的地方时 关闭弹出框
        $(document).click(function(e) {
            let target = e ? e.target : window.event.srcElement;
            // 点击不是弹出框或者toggle按钮 才关闭弹出框 (也不包含toggla按钮,是因为会扰乱toggle按钮自身增删.open的逻辑)
            if (target.id != "i-side-nav" && target.id != "i-nav-toggle" && target.id != "header") {
                $(".i-side-nav").removeClass("open");
                $(".i-nav-toggle").removeClass("open");
                $(".i-shade")[0].style.display = 'none';
            }
        });
    });
</script>
</body>
</html>
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现右键在侧边消息提示,可以使用HTMLCSS和JavaScript来实现。以下是一个简单的示例: 1. HTML代码 ```html <div class="sidebar"> <ul> <li><a href="#">菜单项1</a></li> <li><a href="#">菜单项2</a></li> <li><a href="#">菜单项3</a></li> <li><a href="#">菜单项4</a></li> </ul> </div> ``` 2. CSS代码 ```css .sidebar { position: fixed; top: 0; bottom: 0; left: 0; width: 200px; background-color: #f5f5f5; box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1); } .sidebar ul { list-style: none; margin: 0; padding: 0; } .sidebar li { border-bottom: 1px solid #ddd; } .sidebar li:last-child { border-bottom: none; } .sidebar a { display: block; padding: 10px 15px; color: #333; text-decoration: none; } .sidebar a:hover { background-color: #e7e7e7; } ``` 3. JavaScript代码 ```javascript // 获取侧边元素 const sidebar = document.querySelector('.sidebar'); // 在侧边上添加鼠标右键事件 sidebar.addEventListener('contextmenu', e => { // 阻止默认行为 e.preventDefault(); // 获取鼠标相对于浏览器窗口的位置 const x = e.clientX; const y = e.clientY; // 创建消息提示框元素 const messageBox = document.createElement('div'); messageBox.classList.add('message-box'); messageBox.textContent = '右键的消息提示'; // 设置消息提示框的位置 messageBox.style.left = x + 'px'; messageBox.style.top = y + 'px'; // 将消息提示框添加到body元素中 document.body.appendChild(messageBox); // 在消息提示框上添加鼠标单击事件,单击后隐藏消息提示框 messageBox.addEventListener('click', () => { document.body.removeChild(messageBox); }); }); ``` 4. CSS代码 ```css .message-box { position: fixed; padding: 10px 20px; background-color: #333; color: #fff; font-size: 14px; border-radius: 5px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); cursor: pointer; } ``` 这样,在侧边上右键单击时,会在鼠标位置一个消息提示框。单击消息提示框即可隐藏它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值