扫码关注官方订阅号
正文
0
心靈之曲
发布时间:2025-09-12 14:10:01
912人浏览过
来源于php中文网
原创
在现代web应用中,触摸滑动组件因其直观的用户体验而广受欢迎。最初,这类组件多用于展示图片画廊。然而,随着富媒体内容的兴起,将图片滑动器升级为视频滑动器成为一个常见的需求。将静态图片替换为动态视频并非简单的标签替换,视频元素自带的交互行为(如拖拽、播放控制)可能会与滑动组件的自定义javascript逻辑产生冲突,导致滑动功能“冻结”或失效。本教程将深入探讨如何解决这些挑战,实现一个功能完善的触摸滑动视频播放器。
将图片滑动器改造为视频滑动器,最核心的步骤是替换HTML中的 标签为 标签。为了确保视频能够正确加载、显示并提供用户控制,需要注意以下几点:
以下是改造后的HTML结构示例:
Airpods $199 您的浏览器不支持视频播放。 Buy Now iPhone 12 $799 您的浏览器不支持视频播放。 Buy Now iPad $599 您的浏览器不支持视频播放。 Buy Now
将 替换为 后,需要相应地调整CSS样式,以确保视频在滑动器中能够正确地布局和响应。关键在于将原来针对 img 元素的样式规则应用到 video 元素上。
以下是适配后的CSS样式:
立即学习“Java免费学习笔记(深入)”;
一个AI驱动的历史时间线生成平台
@import url('https://fonts.googleapis.com/css2?family=Open+Sans&display=swap'); * { box-sizing: border-box; margin: 0; padding: 0; } html, body { font-family: 'Open Sans', sans-serif; height: 100%; width: 100%; overflow: hidden; background-color: #333; color: #fff; line-height: 1.7; } .slider-container { height: 100vh; display: inline-flex; overflow: hidden; transform: translateX(0); transition: transform 0.3s ease-out; cursor: grab; } .slide { max-height: 100vh; width: 100vw; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 1rem; user-select: none; } /* 将此处 img 选择器改为 video */ .slide video { max-width: 100%; max-height: 60%; transition: transform 0.3s ease-in-out; } .slide h2 { font-size: 2.5rem; margin-bottom: 0.5rem; } .slide h4 { font-size: 1.3rem; } .btn { background-color: #444; color: #fff; text-decoration: none; padding: 1rem 1.5rem; } .grabbing { cursor: grabbing; } .grabbing .slide video { /* 同样将此处 img 选择器改为 video */ transform: scale(0.9); }
JavaScript是实现滑动逻辑的核心。将图片替换为视频后,最常遇到的问题是滑动器在第一次操作后“冻结”。这通常是因为视频元素具有其自身的默认拖拽行为,与自定义的触摸或鼠标拖拽事件冲突。解决此问题的关键在于阻止视频元素的默认 dragstart 事件。
以下是完整的JavaScript代码,其中已包含了对视频元素 dragstart 事件的处理:
/* This JS code is from the following project: https://github.com/bushblade/Full-Screen-Touch-Slider */ const slider = document.querySelector('.slider-container'), slides = Array.from(document.querySelectorAll('.slide')) let isDragging = false, startPos = 0, currentTranslate = 0, prevTranslate = 0, animationID = 0, currentIndex = 0 slides.forEach((slide, index) => { // 确保这里选择的是 video 元素 const slideImage = slide.querySelector('video') // 阻止视频元素的默认 dragstart 行为,这是解决“冻结”问题的关键 slideImage.addEventListener('dragstart', (e) => e.preventDefault()) // Touch events slide.addEventListener('touchstart', touchStart(index)) slide.addEventListener('touchend', touchEnd) slide.addEventListener('touchmove', touchMove) // Mouse events slide.addEventListener('mousedown', touchStart(index)) slide.addEventListener('mouseup', touchEnd) slide.addEventListener('mouseleave', touchEnd) slide.addEventListener('mousemove', touchMove) }) // Disable context menu window.oncontextmenu = function (event) { event.preventDefault() event.stopPropagation() return false } function touchStart(index) { return function (event) { currentIndex = index startPos = getPositionX(event) isDragging = true // https://css-tricks.com/using-requestanimationframe/ animationID = requestAnimationFrame(animation) slider.classList.add('grabbing') } } function touchEnd() { isDragging = false cancelAnimationFrame(animationID) const movedBy = currentTranslate - prevTranslate // 根据移动距离判断是否切换到上一个或下一个幻灯片 if (movedBy < -100 && currentIndex < slides.length - 1) currentIndex += 1 if (movedBy > 100 && currentIndex > 0) currentIndex -= 1 setPositionByIndex() slider.classList.remove('grabbing') } function touchMove(event) { if (isDragging) { const currentPosition = getPositionX(event) currentTranslate = prevTranslate + currentPosition - startPos } } function getPositionX(event) { return event.type.includes('mouse') ? event.pageX : event.touches[0].clientX } function animation() { setSliderPosition() if (isDragging) requestAnimationFrame(animation) } function setSliderPosition() { slider.style.transform = `translateX(${currentTranslate}px)` } function setPositionByIndex() { currentTranslate = currentIndex * -window.innerWidth prevTranslate = currentTranslate setSliderPosition() }
为了方便读者实践,以下提供一个包含上述HTML、CSS和JavaScript的完整页面结构。您可以将其保存为 .html 文件并在浏览器中打开。
触摸滑动视频播放器 Airpods $199 您的浏览器不支持视频播放。 Buy Now iPhone 12 $799 相关文章 html5可视化编辑怎么改组件颜色_html5可视化组件着色法【技巧】 html5如何嵌入svg动画_html5嵌入svg动态效果法【教程】 html5可视化编辑怎么嵌套第三方_html5可视化嵌套接入法【方案】 html5可视化编辑怎么改文字排版_html5可视化排版调整技巧【技巧】 html个人页面怎么加时间轴_html时间线布局与样式【排版】 PotPlayer播放器 potplayer是一款功能全面的视频播放器,支持各种格式的音频文件,内置了非常强大的解码器功能,能够非常流畅的观看,有需要的小伙伴快来保存下载体验吧! 下载 相关标签: css javascript java html js git go github 浏览器 iphone ipad const class 事件 选择器 重构 本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn 上一篇:Word Add-in动态按钮失效:下拉菜单与事件绑定的冲突与解决方案 下一篇:基于HTML、CSS和JavaScript构建全屏触摸滑动视频播放器 作者最新文章 Pinterest 裁员约 15%,探索采用开源 AI 模型降低开发成本 2026-01-29 16:12 如何用 Python 实现一个支持浮点结果的简易大小写敏感计算器 2026-01-29 16:20 Intel显卡战未来!官方确认:XeSS 3多帧生成下月支持B580 2026-01-29 16:25 猫眼电影如何添加电影收藏 2026-01-29 16:51 如何在 Jupyter Notebook 中正确导入自定义类 2026-01-29 16:53 恋小帮搜索话术怎么找 2026-01-29 16:57 如何在运行时通过全限定类名动态反序列化 JSON 并调用 save 方法 2026-01-29 16:59 脉脉怎么开会员-脉脉会员开通方法 2026-01-29 17:00 电脑端如何下载安装网易云音乐客户端 2026-01-29 17:07 美团外卖怎么用 2026-01-29 17:29 热门AI工具 更多 DeepSeek 幻方量化公司旗下的开源大模型平台 AI 编程开发AI 聊天问答 豆包大模型 字节跳动自主研发的一系列大型语言模型 AI 编程开发AI大模型 通义千问 阿里巴巴推出的全能AI助手 AI 编程开发Agent智能体 腾讯元宝 腾讯混元平台推出的AI助手 文档处理AI 聊天问答 文心一言 文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。 AI 编程开发AI 文本写作 讯飞写作 基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿 AI 文本写作中文写作 即梦AI 一站式AI创作平台,免费AI图片和视频生成。 图片拼接 ChatGPT 最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。 AI 编程开发AI 文本写作 智谱清言 - 免费全能的AI助手 智谱清言 - 免费全能的AI助手 AI 编程开发Agent智能体
相关文章
html5可视化编辑怎么改组件颜色_html5可视化组件着色法【技巧】
html5如何嵌入svg动画_html5嵌入svg动态效果法【教程】
html5可视化编辑怎么嵌套第三方_html5可视化嵌套接入法【方案】
html5可视化编辑怎么改文字排版_html5可视化排版调整技巧【技巧】
html个人页面怎么加时间轴_html时间线布局与样式【排版】
potplayer是一款功能全面的视频播放器,支持各种格式的音频文件,内置了非常强大的解码器功能,能够非常流畅的观看,有需要的小伙伴快来保存下载体验吧!
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
Pinterest 裁员约 15%,探索采用开源 AI 模型降低开发成本
2026-01-29 16:12
如何用 Python 实现一个支持浮点结果的简易大小写敏感计算器
2026-01-29 16:20
Intel显卡战未来!官方确认:XeSS 3多帧生成下月支持B580
2026-01-29 16:25
猫眼电影如何添加电影收藏
2026-01-29 16:51
如何在 Jupyter Notebook 中正确导入自定义类
2026-01-29 16:53
恋小帮搜索话术怎么找
2026-01-29 16:57
如何在运行时通过全限定类名动态反序列化 JSON 并调用 save 方法
2026-01-29 16:59
脉脉怎么开会员-脉脉会员开通方法
2026-01-29 17:00
电脑端如何下载安装网易云音乐客户端
2026-01-29 17:07
美团外卖怎么用
2026-01-29 17:29
热门AI工具
幻方量化公司旗下的开源大模型平台
字节跳动自主研发的一系列大型语言模型
阿里巴巴推出的全能AI助手
腾讯混元平台推出的AI助手
文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。
基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿
一站式AI创作平台,免费AI图片和视频生成。
最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。
智谱清言 - 免费全能的AI助手
相关专题
const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。
531
2023.09.20
在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。
469
2024.01.03
本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。
15
2025.12.06
本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。
4
2026.01.30
本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。
2
本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。
1
本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。
本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。
20
2026.01.29
本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。
16
热门下载
相关下载
精品课程
共14课时 | 0.8万人学习
共46课时 | 3.1万人学习
共754课时 | 25.1万人学习
共6课时 | 11.2万人学习
共79课时 | 151.8万人学习
共6课时 | 53.4万人学习
共4课时 | 22.4万人学习
共13课时 | 0.9万人学习
最新文章
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部