讲师中心 微信公众号
AI工具推荐 视频效率加速

创建鼠标悬停播放视频并带叠加层的卡片效果

阿枫吖_7031

阿枫吖_7031

发布时间:2025-12-08 18:02:33

|

889人浏览过

|

来源于php中文网

原创

创建鼠标悬停播放视频并带叠加层的卡片效果

本教程将详细指导如何使用html、css和javascript(或jquery)实现一个交互式卡片组件。该卡片在鼠标悬停时自动播放视频,并在视频上方显示一个自定义叠加层和文本信息,同时处理视频的暂停与播放逻辑。

引言

在现代网页设计中,交互式卡片是一种常见的UI元素,用于展示产品、项目或内容。其中一种引人注目的效果是当用户鼠标悬停在卡片上时,视频自动播放,并在视频上方显示额外信息或视觉效果。本文将详细介绍如何利用HTML构建结构,CSS实现样式和叠加层,以及JavaScript(或jQuery)控制视频播放逻辑,从而创建这样一个功能完善且美观的卡片组件。

HTML 结构设计

首先,我们需要构建卡片的HTML骨架。一个典型的卡片包含一个容器、一个视频元素、一个用于视觉效果的叠加层,以及一个显示文本信息的区域。为了实现点击卡片跳转到其他页面的功能,我们将整个卡片内容包裹在一个 标签中。

<a href="#" class="project">
    <!-- 视频元素 -->
    <video class="clip videoplay" preload="none" muted height="300px" width="500px" loop outline="none"
        poster="image.jpg">
        <source src="../videos/cl.mp4" type="video/mp4">
        您的浏览器不支持MP4视频,请尝试更换浏览器!
    </video>
    <!-- 视频叠加层 -->
    <div class="overlay"></div>
    <!-- 文本信息层 -->
    <div class="project-name">示例项目名称</div>
</a>

结构说明:

  • : 整个卡片的容器,通过 href 属性实现点击跳转。project 类用于整体样式和定位。
  • : 视频播放器。
    • class="clip videoplay": 用于JavaScript选择器。
    • preload="none": 优化加载性能,只在需要时加载视频。
    • muted: 视频默认静音,这是实现自动播放的关键,因为大多数浏览器策略禁止非静音视频自动播放。
    • loop: 视频循环播放。
    • poster="image.jpg": 视频加载前的封面图片。
  • : 这是一个关键元素,用于在视频上方创建半透明或彩色叠加层。
  • : 显示项目标题或其他文本信息。

    CSS 样式实现

    CSS是实现卡片外观、布局和叠加效果的核心。我们将定义卡片容器、视频、叠加层和文本的样式,并添加鼠标悬停时的视觉反馈。

    .project {
        position: relative; /* 关键:使内部绝对定位元素(视频、叠加层、文本)相对于它定位 */
        display: block; /* 确保a标签表现为块级元素 */
        width: 500px; /* 卡片宽度 */
        height: 300px; /* 卡片高度,与视频高度一致 */
        overflow: hidden; /* 隐藏超出卡片边界的内容 */
        background-color: #000; /* 视频未加载时的背景色 */
        filter: grayscale(1); /* 默认灰度效果 */
        transition: filter 0.3s ease-in-out; /* 灰度过渡效果 */
    }
    
    .project:hover {
        filter: grayscale(0); /* 鼠标悬停时取消灰度 */
    }
    
    .project video {
        position: absolute; /* 绝对定位,覆盖整个卡片 */
        top: 0;
        left: 0;
        width: 100%; /* 视频宽度填充卡片 */
        height: 100%; /* 视频高度填充卡片 */
        object-fit: cover; /* 视频内容填充容器,可能裁剪 */
        pointer-events: none; /* 阻止视频元素捕获鼠标事件,确保a标签可点击 */
    }
    
    .overlay {
        position: absolute; /* 绝对定位,覆盖视频 */
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.4); /* 半透明黑色叠加层 */
        z-index: 2; /* 确保叠加层在视频上方,在文本下方 */
        transition: background-color 0.3s ease-in-out;
    }
    
    .project:hover .overlay {
        background-color: rgba(0, 0, 0, 0.2); /* 悬停时叠加层变淡 */
    }
    
    .project-name {
        position: absolute; /* 绝对定位,显示在叠加层上方 */
        bottom: 20px; /* 距离底部20px */
        left: 20px; /* 距离左侧20px */
        color: #ffffff;
        font-weight: 400;
        font-size: 24px;
        line-height: 1.2;
        font-family: 'Roboto', sans-serif;
        text-transform: uppercase;
        z-index: 3; /* 确保文本在叠加层上方 */
        pointer-events: none; /* 阻止文本元素捕获鼠标事件 */
    }

    CSS 样式说明:

    • .project: 设置 position: relative 是为了让其内部的绝对定位元素(视频、叠加层、文本)能够相对于它进行定位。通过 filter: grayscale(1) 和 :hover 时的 filter: grayscale(0) 实现了鼠标悬停时的灰度转换效果。
    • .project video: 使用 position: absolute 和 top: 0; left: 0; width: 100%; height: 100%; 使视频完全覆盖卡片容器。object-fit: cover 确保视频内容填充整个区域而不变形。pointer-events: none; 确保鼠标事件能穿透视频元素,作用于底层的 标签。
    • .overlay: 同样采用 position: absolute 覆盖整个卡片。通过 background-color: rgba(0, 0, 0, 0.4) 创建半透明效果。z-index: 2 确保它在视频上方。
    • .project-name: 也是 position: absolute,通过 bottom 和 left 定位。z-index: 3 确保文本在叠加层之上。pointer-events: none; 同样是为了确保 标签的可点击性。

    JavaScript 交互逻辑

    JavaScript负责处理鼠标悬停时视频的播放和离开时视频的暂停。这里提供两种实现方式:纯JavaScript和jQuery。

    China SEO Baidu
    China SEO Baidu

    针对百度搜索引擎优化网站(百度SEO),教授AI智能体如何实施百度专属SEO技术,包括百度站长工具设置、ICP备案等

    下载

    纯 JavaScript 方法

    这种方法直接使用原生DOM API来监听事件和控制视频。

    document.addEventListener('DOMContentLoaded', function() {
        const videoClips = document.querySelectorAll('.clip'); // 选择所有带有.clip类的视频
    
        videoClips.forEach(video => {
            // 鼠标进入时播放视频
            video.closest('.project').addEventListener('mouseover', function() {
                video.play();
            });
    
            // 鼠标离开时暂停视频
            video.closest('.project').addEventListener('mouseleave', function() {
                video.pause();
            });
        });
    });

    代码说明:

    • document.addEventListener('DOMContentLoaded', ...): 确保DOM完全加载后再执行脚本。
    • document.querySelectorAll('.clip'): 选取所有带有 clip 类的视频元素。
    • video.closest('.project'): 由于 mouseover 和 mouseleave 事件可能在视频内部的子元素上触发,为了确保在整个卡片区域悬停时触发播放/暂停,我们将事件监听器附加到视频的最近父级 .project 元素上。
    • video.play(): 播放视频。
    • video.pause(): 暂停视频。

    jQuery 方法(可选)

    如果你在项目中使用jQuery,可以使用其更简洁的 hover() 方法来实现相同的功能。

    $(document).ready(function() {
        // 使用hover函数,它接受两个回调:mouseover和mouseleave
        $(".project").hover(
            function() { // mouseover 回调
                // 找到当前hover的.project内部的video元素并播放
                $('video', this).get(0).play();
            },
            function() { // mouseleave 回调
                // 找到当前hover的.project内部的video元素并暂停
                $('video', this).get(0).pause();
            }
        );
    });

    代码说明:

    • $(document).ready(function() { ... });: jQuery的DOM加载完成事件。
    • $(".project").hover(...): jQuery的 hover() 方法,它接受两个函数作为参数,分别对应 mouseover 和 mouseleave 事件。
    • $('video', this): 在当前 hover 的 .project 元素 (this) 内部查找 video 元素。
    • .get(0): 将jQuery对象转换为原生DOM元素,因为 play() 和 pause() 是原生DOM HTMLVideoElement 的方法。

    重要注意事项

    1. 视频自动播放策略(Autoplay Policy): 现代浏览器对视频自动播放有严格限制。通常,只有当视频是 muted(静音)时,才能在没有用户交互的情况下自动播放。因此,在
    2. 性能优化:
      • preload="none": 避免在页面加载时预加载视频数据,只在用户需要时加载,节省带宽。
      • poster 属性: 提供一个封面图片,在视频未加载或未播放时显示,提升用户体验。
      • 视频文件大小: 优化视频文件大小和格式(如MP4 H.264编码),以减少加载时间。
    3. 可访问性(Accessibility):
    4. z-index 管理: 当有多个重叠元素(视频、叠加层、文本)时,z-index 的管理至关重要。确保文本在叠加层之上,叠加层在视频之上。
      • 视频: 默认或 z-index: 1
      • 叠加层: z-index: 2
      • 文本: z-index: 3
    5. pointer-events 属性: 在视频和文本元素上设置 pointer-events: none; 是为了确保鼠标事件能够“穿透”这些元素,直接作用于底层的 标签,从而保证整个卡片区域的可点击性。

    总结

    通过结合HTML的结构定义、CSS的样式和定位能力(特别是 position: relative 和 position: absolute 来创建叠加层),以及JavaScript(或jQuery)的事件监听和视频控制API,我们可以轻松实现鼠标悬停播放视频并带叠加层的交互式卡片效果。遵循浏览器自动播放策略和性能优化建议,将有助于创建用户体验良好且高效的网页组件。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

601

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1176

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2262

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

2168

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

493

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

337

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

806

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

309

2026.01.13

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 6.1万人学习

CSS教程
CSS教程

共754课时 | 99.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn