美文网首页
前端新手项目练习50projects50days——悬停板(ho

前端新手项目练习50projects50days——悬停板(ho

作者: 简单一点点 | 来源:发表于2021-11-02 17:48 被阅读0次

    本项目介绍如何实现一个悬停板,鼠标悬停在指定区域时,对应地方的网格会改变颜色,实现悬停效果。鼠标移走后过一段时间效果消失。

    hoverboard.png

    html 部分比较简单,主要是一块类名为container的显示区域。

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <!-- 字符编码 -->
            <meta charset="UTF-8" />
            <!-- 虚拟窗口设置,宽度为设备宽度,缩放比例为1.0-->
            <meta name="viewport" content="width=device-width, initial-scale=1.0" />
            <!-- 引入css -->
            <link rel="stylesheet" href="style.css" />
            <!-- 标题 -->
            <title>Hoverboard</title>
        </head>
        <body>
            <!-- 实际显示区域-->
            <div class="container" id="container"></div>
            <!-- 引入js -->
            <script src="script.js"></script>
        </body>
    </html>
    

    js部分主要是将显示区域划分为一个一个的小方块网格,然后为每个网格添加鼠标移入和移出的两个监听事件。当鼠标移入后为网格添加背景色和阴影,鼠标移出之后再取消,这样就实现了悬停板的效果。

    // 显示区域元素
    const container = document.getElementById('container')
    // 颜色
    const colors = ['#e74c3c', '#8e44ad', '3498db', '#e67e22', '#2ecc71']
    // 网格大小
    const SQUARES = 500
    
    // 将显示区域分割成一个一个小方块网格
    for(let i = 0; i < SQUARES; i++) {
        const square = document.createElement('div')
        square.classList.add('square')
        // 添加鼠标移入元素时的事件
        square.addEventListener('mouseover', () => setColor(square))
        // 添加鼠标移出元素时的事件
        square.addEventListener('mouseout', () => removeColor(square))
    
        container.appendChild(square)
    }
    
    // 设置网格颜色
    function setColor(element) {
        const color = getRandomColor()
        // 背景颜色
        element.style.background = color
        // 阴影
        element.style.boxShadow = `0 0 2px ${color}, 0 0 10px ${color}`
    }
    
    // 移出网格颜色
    function removeColor(element) {
        element.style.background = '#1d1d1d'
        element.style.boxShadow = ` 0 0 2px #000`
    }
    
    //从颜色数组随机获取一个颜色
    function getRandomColor() {
        return colors[Math.floor(Math.random() *colors.length)]
    }
    

    CSS部分代码如下,整体采用了弹性布局,其中代表小方块网格的 square 类添加了一个简单的过渡效果,并且在鼠标悬浮上去的时候会结束过渡动画。

    * {
        box-sizing: border-box; /* 采用 border-box 方式计算元素宽高*/
    }
    
    body {
        background-color: #111; /* 背景颜色 */
        display: flex;  /* 布局方式采用弹性布局 */
        align-items: center; /* 元素在容器垂直方向居中对齐,用于display: flex中 */
        justify-content: center; /* 元素在容器水平方向居中对齐,用于display: flex中 */
        height: 100vh; /* 高度为视口高度 100% */
        overflow: hidden; /* 元素溢出部分隐藏 */
        margin: 0; /* 元素外边距为0 */
    }
    
    .container {
        display: flex; /* 布局方式采用弹性布局 */
        align-items: center; /* 元素在容器垂直方向居中对齐,用于display: flex中 */
        justify-content: center; /* 元素在容器水平方向居中对齐,用于display: flex中 */
        flex-wrap: wrap; /* 元素在必要时候可以换行,用于display: flex中 */
        max-width: 400px; /* 元素最大宽度 */
    }
    
    .square {
        background-color: #1d1d1d; /* 背景颜色 */
        box-shadow: 0 0 2px #000; /* 阴影 */
        height: 16px; /* 高度 */
        width: 16px; /* 宽度 */
        margin: 2px; /* 外边距 */
        transition: 2s ease; /* 过渡效果持续2s,使用ease(先快后慢) */
    }
    
    .square:hover { /* 鼠标悬浮到类square上 */
        transition-duration: 0s; /* 过渡效果改为0s */
    }
    

    就这样通过一个简单的小项目实现了一个漂亮的悬停板。

    hoverboard1.gif

    相关文章

      网友评论

          本文标题:前端新手项目练习50projects50days——悬停板(ho

          本文链接:https://www.haomeiwen.com/subject/ohkfzltx.html