丝滑的动态Dock栏设计:交互式网页元素的实现

news2024/11/16 21:41:51

动态Dock栏设计:交互式网页元素的实现

在这里插入图片描述

在现代网页设计中,交互性是一个关键要素,它能够提升用户体验并使网页更加生动。本文将深入分析一个交互式Dock栏的设计案例,它通过CSS自定义属性和JavaScript事件处理,实现了一个随着鼠标移动而动态缩放的Dock栏。

HTML结构基础

我们的案例从一个简单的HTML结构开始,定义了页面的基本布局:

<div class="glass">
    <ul class="dock">
        <li>😄</li>
        <li>😡</li>
        <li>😍</li>
        <!-- 更多表情符号列表项 -->
    </ul>
</div>

这里,.glass作为一个容器,内部包含了一个无序列表.dock,列表中的每个<li>元素代表Dock栏的一个项目,这里使用了表情符号作为内容。

CSS样式与布局

CSS部分负责定义页面的视觉样式和布局。我们使用了flex布局来实现一个简洁且响应式的界面:

body {
    display: flex;
    min-height: 100vh;
    margin: 0;
    padding: 0;
}

.glass {
    width: 80%;
    height: 5rem;
    background-color: rgba(231, 173, 173, 0.2);
    border-radius: 30px;
    justify-content: center;
    margin: 0 auto;
    position: relative;
    bottom: 13px;
}

.dock {
    list-style: none;
    display: flex;
    justify-content: center;
    align-items: center;
}

.dock li {
    font-size: calc(4rem * var(--scale));
    padding: 0 0.5rem;
    cursor: default;
}

上述CSS代码中,.glass类定义了一个半透明的背景和圆角边框,同时使用margin: 0 auto实现水平居中。.dock类通过display: flex实现了子元素的水平排列和垂直居中。

CSS变量与动态计算

CSS变量--scale在这里扮演了关键角色,它允许我们在运行时动态调整元素的样式。初始时,我们将其设置为1,表示没有缩放:

.dock {
    --scale: 1;
}

然后,我们使用calc()函数结合--scale变量来动态计算<li>元素的font-size

.dock li {
    font-size: calc(4rem * var(--scale));
}
JavaScript交互实现

JavaScript为Dock栏添加了交互性。当鼠标在<li>元素上移动时,会触发mousemove事件,根据鼠标位置计算缩放比例,并动态调整相邻元素的缩放:

document.querySelectorAll('.dock li').forEach(li => {
    li.addEventListener('mousemove', e => {
        let item = e.target;
        let itemRect = item.getBoundingClientRect();
        let offset = Math.abs(e.clientX - itemRect.left) / itemRect.width;
        let scale = 0.6;

        restScale();

        if(pre) {
            pre.style.setProperty('--scale', 1 + scale * Math.abs(offset - 1));
        }
        item.style.setProperty('--scale', 1 + scale);
        if(next) {
            next.style.setProperty('--scale', 1 + scale * offset);
        }
    });
});

document.querySelector('.dock').addEventListener('mouseleave', e => {
    restScale();
});

function restScale() {
    document.querySelectorAll('.dock li').forEach(li => {
        li.style.setProperty('--scale', '1');
    });
}

在这段代码中,restScale()函数用于重置所有<li>元素的--scale变量为1,即原始大小。当鼠标离开Dock栏时,通过mouseleave事件触发此函数。

知识点深入
  1. CSS Flexbox:一种布局模式,可以在一个维度上灵活地排列元素。

  2. CSS变量:允许我们在CSS中定义可复用的值,简化样式管理。

  3. calc()函数:在CSS中进行数值计算,实现动态尺寸调整。

  4. 事件监听:JavaScript中用于响应用户行为(如鼠标移动)的机制。

  5. getBoundingClientRect():获取元素的位置和尺寸信息,常用于事件处理中。

  6. 动态样式应用:通过JavaScript动态修改CSS属性,实现交互效果。

  7. 响应式设计:确保网页元素能够适应不同的屏幕尺寸和设备。

通过上述分析,我们可以看到,这个案例是如何将CSS的灵活性和JavaScript的交互性结合起来,创造出一个既美观又功能丰富的用户界面元素。这种技术的应用不仅提升了网页的视觉效果,也增强了用户的互动体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis的集群(高可用)

redis集群的三种模式&#xff1a; 主从复制 奇数 三台 一主两从 哨兵模式 3 一主两从 cluster集群 六台 主从复制&#xff1a;和mysql的主从复制类似&#xff0c;主可以写&#xff0c;写入主的数据通过RDB方式把数据同步到从服务器&#xff0c;从不能更新到主&#xff0c;也…

UML类图 详解

总目录 前言 作为一个程序员&#xff0c;我们经常会使用UML来绘制各种图&#xff08;UML中定义了用例图、类图、时序图、协作图等九种&#xff09;&#xff0c;类图就是其中常用图之一。设计模式中经常会用到的是类图&#xff0c;本文主要是学习UML类图相关资料后的汇总笔记&a…

【原创】分析JDK17加载Sybase驱动出现递归调用的原因并解决其加载问题

前言 最近好久没发文章了&#xff0c;原因是AI太强了&#xff0c;随便问一句答案就有了&#xff0c;节约了很多折腾的时间&#xff0c;也就没法作为原创文章发布了&#xff0c;还有就是很多涉及公司内部的代码&#xff0c;没法公开发布。 这次遇到了一个项目&#xff0c;用的…

Java后端初开-->架构师学习路线!无偿分享!让你少走弯路

由于平台篇幅原因&#xff0c;很多java面试资料内容展示不了&#xff0c;需要的java面试宝典的伙伴们转发文章关注后&#xff0c;扫描下方二维码免费获取:

FFplay:FFmpeg中的多媒体播放器

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…

【FANUC】发那科机器人ROBOGUIDE安装教程(含安装包)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

基于Debian用户安装星火商店

星火商店下载地址&#xff1a;https://www.spark-app.store/ 本文章我以kali linux来做示范 注:基本debian的linux包括ubuntu,mint linux,kali linux,Pop!_OS,deepin等等 1.点击下载最新版本 2.点击下载 3.点击开始下载&#xff08;它会自动跳转网页&#xff09; 4.选择要下载…

告别啃书难,4款pdf翻译成中文神器在手,阅读起来so easy

在这个快节奏的时代&#xff0c;当我们遇到外文的PDF文档时&#xff0c;能不能快速翻译成中文变得非常重要。为了帮大家解决这个问题&#xff0c;我找来了四款专门用于把pdf翻译成中文的工具。这些工具操作起来很简单&#xff0c;翻译的质量也很高&#xff0c;能帮我们大大提高…

MybatisPlus(二)

目录 扩展功能 代码生成 静态工具 逻辑删除 枚举处理器 JSON处理器 配置加密 插件功能 插件功能 分页插件(通用分页实体) 扩展功能 代码生成 静态工具 逻辑删除 逻辑删除就是基于代码逻辑模拟删除效果&#xff0c;但并不会真正删除数据。思路如下&#xff1a; • 在…

转录组数据去批次方法整理(combat,combat-seq,removeBatchEffect)

为什么需要去除批次效应&#xff1f; 批次效应是指样本在不同批次处理及测量的情况下引入与生物学情况不相关的技术误差&#xff0c;比如不同试剂耗材&#xff0c;不同操作者&#xff0c;不同的实验时间等。 正是因为这些非生物学的因素存在就有可能会导致我们的结果偏离真实…

如何模拟真实的负载情况进行测试?

模拟真实的负载情况是进行性能测试的关键步骤&#xff0c;它可以帮助我们了解系统在高负载下的表现&#xff0c;以及可能出现的问题。以下是一些模拟真实负载的方法&#xff1a; 1. 确定目标&#xff1a;首先&#xff0c;我们需要明确测试的目标&#xff0c;例如&#xff0c;我…

探索Python FastAPI的Annotated参数设计:提升代码的灵活性与可读性

在现代软件开发中&#xff0c;代码的可读性和灵活性是至关重要的。Python的FastAPI框架以其高性能和易用性而受到开发者的喜爱。FastAPI提供了一种名为Annotated的参数设计方式&#xff0c;它允许开发者以类型注解的形式增强函数参数的定义&#xff0c;从而提升代码的表达力和灵…

深度学习(RNN+VAE):高质量的音乐作品让音符飞舞起来

深度学习在音乐生成领域有着广泛的应用&#xff0c;其中循环神经网络&#xff08;RNN&#xff09;和变分自编码器&#xff08;VAE&#xff09;是两种重要的模型。下面是这两种模型在音乐生成中的应用概述&#xff1a; 1. 循环神经网络&#xff08;RNN&#xff09;在音乐生成中…

内存管理【C++】

C/C内存分布 栈又叫堆栈&#xff0c;主要存放非静态局部变量、函数参数、函数返回值&#xff0c;栈一般是向下增长的堆用于程序运行时动态内存分配数据段用于存储全局数据和静态数据代码段用于存储可执行代码和制度常量 C内存管理方式 C语言的内存管理方式在C中可以继续使用&…

RabbitMQ 入门篇

接上一篇《RabbitMQ-安装篇&#xff08;阿里云主机&#xff09;-CSDN博客》 安装好RabbitMQ后&#xff0c;我们将开始RabbitMQ的使用&#xff0c;根据官网文档RabbitMQ Tutorials | RabbitMQ&#xff0c;我们一步一步的学习。 1. "Hello World!" 这里先说明几个概…

电影票竞价系统:开发难度与代码规范全解析

电影票竞价系统成为了一种新兴的购票方式&#xff0c;它不仅提升了用户的购票体验&#xff0c;也为电影院带来了新的盈利模式。但是&#xff0c;这样一个系统的开发难度如何&#xff1f;代码又该如何规范&#xff1f;本文将一探究竟。 电影票竞价系统的开发难度 技术复杂性 …

【Android Studio】项目目录结构

文章目录 常用视图Android视图project视图 gradlebuild.gradleSDK 路径主题 常用视图 Android视图 project视图 gradle build.gradle SDK 路径 主题

怎么在电脑中创建虚拟的加密磁盘?

在电脑中创建虚拟的加密磁盘可以有效保护电脑数据&#xff0c;避免电脑数据泄露。那么&#xff0c;我们该怎么在电脑中创建虚拟的加密磁盘呢&#xff1f;下面我们就一起来了解一下吧。 BitLocker 在使用BitLocker加密虚拟磁盘前&#xff0c;我们需要使用虚拟磁盘工具创建一个虚…

Navicat最新版安装及免费使用教程(全网最靠谱,最简单~)

一、官网下载Navicat&#xff1a; Navicat | 下载 Navicat Premium 14 天免费 Windows、macOS 和 Linux 的试用版 二、百度网盘下载 链接: https://pan.baidu.com/s/1J-2ukx3NDTqvNoQsxnE1Jw 提取码: 5120 解压Navicat16和17补丁工具&#xff0c;然后双击执行压缩包文件中的&a…

分布式训练:大规模AI模型的实践与挑战

简介&#xff1a; 随着人工智能的发展&#xff0c;深度学习模型变得越来越复杂&#xff0c;数据集也越来越大。为了应对这种规模的增长&#xff0c;分布式训练成为了训练大规模AI模型的关键技术。本文将介绍分布式训练的基本概念、常用框架&#xff08;如TensorFlow和PyTorch&a…