自定义视频<video>播放条样式

本文介绍如何在H5页面上实现视频播放,并自定义播放条样式。涉及flv.js使用限制、视频时间格式转换、播放条交互设计及全屏处理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天在写公司的h5视频播放页面,收获了不少东西。

首先,我需要支持flv和mp4格式的视频。本来想用开源插件flv.js把flv的转换成手机浏览器mp4格式视频,结果不幸的是,两月以前各大手机浏览器更新了内核,不支持flv.js这个插件了(除了chrome浏览器)。但PC端还是可用的。

下面说重点,怎么自定义播放条样式。

首先放出成品图:

html代码:

<video  data-icon="0" src="" data-state="a" style="width:100%;height:13.1875rem;" id="videoBox" webkit-playsinline playsinline></video>//video标签
<div class="btnPlay"><img class="left" src="images/playBagin.png" alt="" data-icon="0"><p class="progressTime left">0:00</p></div>//开始按钮div
<div class="progressBox" id="progressBox_special">
<div class="progressBar"></div>//蓝条进度条div
<div class="imgBox"><img id="progressImg" src="images/progressPointer.png" alt=""></div></div>//进度条拖拉图片divBox
<div class="biggerBtn" data-icon="0"><img class="right" src="images/allBigger.png" alt=""><p class="allTime right"></p></div></div>//全屏div

注:<video>标签之所以加上webkit-playsinline,playsinline两个属性,就是为了保证不同浏览器支持视频在h5页面中播放,不用手机浏览器自动托管视频

css一些问题:

由于<video>标签默认层级最高,可设置播放条div的z-index在最上面。

用的是jQuery库,下面放js代码:

<video>标签的API还是很全面的,不过需要通过dom本身调用。

把时间秒转换成分钟:

//分割时间函数        
function timeStamp( second_time ){  
  var time1 = ((parseInt(second_time)/100)).toString();
  var time2 = time1.split(".")[1]? (time1.split(".")[1].length == 1 ? time1.split(".")[1]+'0' : time1.split(".")[1]) :'00';       
  var time =00 + ':' + time2;  
  if( parseInt(second_time )>= 60){
    var second = ((parseInt(second_time) % 60)/100).toString();  
    var min = (parseInt(second_time / 60)/100).toString();
    var time3 = second.split(".")[1]? (second.split(".")[1].length == 1 ? second.split(".")[1]+'0' : second.split(".")[1]) :'00'; 
    var time4 = min.split(".")[1]? (min.split(".")[1].length == 1 ? min.split(".")[1]+'0' : min.split(".")[1]) :'00'; 
    time = time4 + ":" + time3;       
}  
return time;          
} 

视频总时间和播放的时间:

var  video  =  document.getElementById("video");
var video2 = $("#video");
video.load();//一开始进入页面video不是白屏
//视频总时间 video2.on('loadedmetadata', function() { var time = video.duration; var allTime = timeStamp(time); $('.allTime').text(allTime); }); //视频进度时间 video2.on('timeupdate', function() { var time = video.currentTime,alltime = video.duration; var percentage = 100 *(time / alltime); $('.progressTime').text(timeStamp(time)); $('.progressBar').css({'width':percentage + '%'}); $('.stateBox .progressBox .imgBox img').css({'margin-left':percentage +'%'}); if(time == alltime){ $('.btnPlay img').attr('src','images/playBagin.png'); //如果播放时间到总时间播放按钮图片换成停止图片 } });

 

点击播放按钮:

//视频开始按钮事件
$('.btnPlay img').on('touchend',function(){
        if(video.paused) {
        video.play();
        $(this).attr('src','images/pause_btn.png');
        }else {
        video.pause();
        $(this).attr('src','images/playBagin.png');
        }
        return false;
        }) 

拖拉进度条:

//拖拉函数
function changeBar(item){
   var progress = $('.progressBox');
   var maxduration = video.duration; //视频总时间
   var barIcon = $('.nav .biggerBtn').attr('data-icon'),position,percentage;
   if(barIcon == 0){
        position = item - progress.offset().left; //横屏模式
   }else{
        position = item - progress.offset().top; //全屏竖屏模式
   }
   percentage = 100 * (position / progress.width());
   if(percentage > 100) {
      percentage = 100;
   }
   if(percentage < 0) {
      percentage = 0;
   }
   $('.progressBar').css('width', percentage+'%');
   $('.stateBox .progressBox .imgBox img').css({'margin-left':percentage +'%'});
   video.currentTime = maxduration * (percentage / 100);//视频进度时间传给当前时间
   video.play();
   $('.btnPlay img').attr('src','images/pause_btn.png'); 
}
//视频拖拉按钮事件
var progressBox = document.getElementById('progressBox_special');
progressBox.addEventListener('touchstart', progressBox_item, false);
function progressBox_item(e){
         var barIcon = $('.nav .biggerBtn').attr('data-icon');
         var point = fristPoint(e);
         if(barIcon == 0){
            changeBar(point.pageX);
         }else{
              changeBar(point.pageY);     
         }
};
//拖拉按钮
var statePic = document.getElementById('progressImg'); statePic.addEventListener('touchmove', itemMove, false);//发现h5的touchmove行为要通过addEventListener注册 function itemMove(e){ e.stopPropagation();//阻止默认行为 var barIcon = $('.nav .biggerBtn').attr('data-icon'); var point = fristPoint(e); if(barIcon == 0){ changeBar(point.pageX);//横屏 }else{ changeBar(point.pageY); //全屏竖屏 } }; //第一个手指为准 function fristPoint(e){ return e.touches ? e.touches[0] : e; }

点击全屏:

 //点击全屏
var itemHeight = document.documentElement.clientHeight;//获取手机高度
var itemWidth = document.documentElement.clientWidth;//手机宽度
$('.biggerBtn img').on('touchend',function(event){
        event.stopPropagation();
        var dataIcon = $(this).parent().attr('data-icon');
        if(dataIcon == 0){
                        $('.nav').css({'-webkit-transform':'rotate(90deg)'});//直接把视频旋转90°,给video高度宽度重新赋值。
                        $('.nav video').css({'width':itemHeight,'height':itemWidth});
                        $('.stateBox').css({'width':itemHeight});
                        $('.biggerBtn').attr('data-icon','1');
                        $('.nav video').attr('data-icon','1');
                }else{
                        $('.nav').css({'-webkit-transform':'rotate(0deg)'});
                        $('.nav video').css({'width':itemWidth,'height':'13.1875rem'});
                        $('.stateBox').css({'width':itemWidth});
                        $('.biggerBtn').attr('data-icon','0');
                        $('.nav video').attr('data-icon','0');
                }
});

注:可用video.js和videojs-contrib-hls.js插件,覆盖video-js.min.css的原生样式也可以。(但点击放大就是原生的,不可以自定义旋转横放了)

补充一点关于手机端ios系统video标签自动播放的小知识:

app里的html5页面,让ios开发同学在app里加:

self.wView.allowsInlineMediaPlayback = YES;self.wView.mediaPlaybackRequiresUserAction = NO;

除了safari10+支持无声自动播放(video标签加muted属性:默认视频为无声),其余非app内的浏览器自身不能设置自动播放,只支持手动点击事件

app内的浏览器自动播放需要自己的bridge桥梁,比如微信内打开,可用微信的WeiixinJSBridgeReady()

<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>  
<script>
document.addEventListener('WeixinJSBridgeReady',function(){  
    $('#video').play(); },false); 
</script>

 

转载于:https://www.cnblogs.com/xiaoxiao666/p/7133402.html

### 丰富蜡笔小新主题网页设计的详细方案 以下是一个基于现有要求和更丰富内容的设计方案,增加了标题、段落、图片、列表、表格等元素,并保持HTML和CSS分离,代码清晰且带注释。 --- #### 文件结构 ``` project/ │ ├── index.html # 首页 ├── about.html # 关于蜡笔小新的页面 ├── characters.html # 角色介绍页面 ├── gallery.html # 图片画廊页面 ├── contact.html # 联系我们页面 ├── css/ │ └── styles.css # 样式文件 └── images/ # 图片资源目录 ``` --- ### 1. `index.html` (首页) ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蜡笔小新 - 首页</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <!-- 导航栏 --> <nav class="navbar"> <ul> <li><a href="index.html">首页</a></li> <li><a href="about.html">关于蜡笔小新</a></li> <li><a href="characters.html">角色介绍</a></li> <li><a href="gallery.html">图片画廊</a></li> <li><a href="contact.html">联系我们</a></li> </ul> </nav> <!-- 主内容区 --> <div class="main-content"> <h1>欢迎来到蜡笔小新世界!</h1> <p>这是一个关于蜡笔小新的多页面网站。</p> <img src="images/home.jpg" alt="首页图片" class="image"> <table border="1" cellpadding="5"> <caption>主要角色列表</caption> <tr> <th>角色名</th> <th>年龄</th> <th>特点</th> </tr> <tr> <td>野原新之助</td> <td>5岁</td> <td>调皮可爱</td> </tr> <tr> <td>野原美伢</td> <td>28岁</td> <td>温柔贤惠</td> </tr> </table> </div> <!-- 脚注 --> <footer> <p>© 2023 蜡笔小新官方网站</p> </footer> </body> </html> ``` --- ### 2. `about.html` (关于蜡笔小新的页面) ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蜡笔小新 - 关于蜡笔小新</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <nav class="navbar"> <ul> <li><a href="index.html">首页</a></li> <li><a href="about.html">关于蜡笔小新</a></li> <li><a href="characters.html">角色介绍</a></li> <li><a href="gallery.html">图片画廊</a></li> <li><a href="contact.html">联系我们</a></li> </ul> </nav> <div class="main-content"> <h1>关于蜡笔小新</h1> <p>蜡笔小新是由臼井仪人创作的漫画作品,讲述了五岁男孩野原新之助的生活故事。</p> <img src="images/about.jpg" alt="关于蜡笔小新" class="image"> <ul> <li>作者:臼井仪人</li> <li>首次出版年份:1990年</li> <li>类型:喜剧</li> </ul> </div> <footer> <p>© 2023 蜡笔小新官方网站</p> </footer> </body> </html> ``` --- ### 3. `characters.html` (角色介绍页面) ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蜡笔小新 - 角色介绍</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <nav class="navbar"> <ul> <li><a href="index.html">首页</a></li> <li><a href="about.html">关于蜡笔小新</a></li> <li><a href="characters.html">角色介绍</a></li> <li><a href="gallery.html">图片画廊</a></li> <li><a href="contact.html">联系我们</a></li> </ul> </nav> <div class="main-content"> <h1>角色介绍</h1> <ol> <li><strong>野原新之助:</strong>五岁的调皮男孩,喜欢恶作剧。</li> <li><strong>野原美伢:</strong>新之助的母亲,温柔但有时严厉。</li> <li><strong>野原广志:</strong>新之助的父亲,工作努力但有点懒散。</li> <li><strong>小白:</strong>家里的宠物狗,聪明伶俐。</li> </ol> <img src="images/characters.jpg" alt="角色介绍" class="image"> </div> <footer> <p>© 2023 蜡笔小新官方网站</p> </footer> </body> </html> ``` --- ### 4. `gallery.html` (图片画廊页面) ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蜡笔小新 - 图片画廊</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <nav class="navbar"> <ul> <li><a href="index.html">首页</a></li> <li><a href="about.html">关于蜡笔小新</a></li> <li><a href="characters.html">角色介绍</a></li> <li><a href="gallery.html">图片画廊</a></li> <li><a href="contact.html">联系我们</a></li> </ul> </nav> <div class="main-content"> <h1>图片画廊</h1> <div class="gallery"> <img src="images/gallery1.jpg" alt="图片1" class="image"> <img src="images/gallery2.jpg" alt="图片2" class="image"> <img src="images/gallery3.jpg" alt="图片3" class="image"> </div> </div> <footer> <p>© 2023 蜡笔小新官方网站</p> </footer> </body> </html> ``` --- ### 5. `contact.html` (联系我们页面) ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蜡笔小新 - 联系我们</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <nav class="navbar"> <ul> <li><a href="index.html">首页</a></li> <li><a href="about.html">关于蜡笔小新</a></li> <li><a href="characters.html">角色介绍</a></li> <li><a href="gallery.html">图片画廊</a></li> <li><a href="contact.html">联系我们</a></li> </ul> </nav> <div class="main-content"> <h1>联系我们</h1> <form action="#" method="post"> <label for="name">姓名:</label> <input type="text" id="name" name="name" required> <br><br> <label for="email">邮箱:</label> <input type="email" id="email" name="email" required> <br><br> <label for="message">留言:</label> <textarea id="message" name="message" rows="5" cols="30" required></textarea> <br><br> <input type="submit" value="提交"> </form> </div> <footer> <p>© 2023 蜡笔小新官方网站</p> </footer> </body> </html> ``` --- ### 6. `styles.css` (样式文件) ```css /* 全局样式 */ body { font-family: Arial, sans-serif; margin: 0; padding: 0; line-height: 1.6; } /* 导航栏样式 */ .navbar ul { list-style-type: none; background-color: #f4f4f4; padding: 0; overflow: hidden; } .navbar li { float: left; } .navbar li a { display: block; color: #333; text-align: center; padding: 14px 16px; text-decoration: none; } .navbar li a:hover { background-color: #ddd; } /* 主内容区样式 */ .main-content { padding: 20px; min-height: 100vh; /* 页面高度大于一屏 */ } .main-content h1 { text-align: center; } .main-content .image { max-width: 100%; height: auto; display: block; margin: auto; } /* 表格样式 */ table { width: 100%; border-collapse: collapse; margin-top: 20px; } table caption { font-size: 1.2em; margin-bottom: 10px; } /* 脚注样式 */ footer { text-align: center; padding: 10px; background-color: #f4f4f4; position: relative; bottom: 0; width: 100%; } ``` 你给的这些html代码还是内容不够丰富,能不能多一点
最新发布
06-02
<think>嗯,用户之前问过关于高阶信息获取方法的问题,现在又提到了蜡笔小新主题网页设计的需求。需要结合之前的回答和用户提供的引用内容来生成更丰富的HTML和CSS代码示例。首先,用户给的引用里提到他们使用了HTML5、CSS3和JS,特别是轮播图、悬停效果、登录验证这些功能。所以应该在这些方面深入展开,提供更多的代码示例。用户可能希望网页设计更生动,有更多的互动元素,比如动画、折叠相册、视频集成等。引用中的案例已经包含了一些JS功能,但可能需要更详细的代码说明。例如,如何用CSS实现鼠标悬停效果,或者如何用JS控制轮播图。需要确保代码示例符合现代浏览器的兼容性,如引用中提到的支持IE、Chrome等主流浏览器。 另外,用户提到需要更多的HTML和CSS代码,所以应该分模块讲解,比如导航栏、动画区域、相册、视频等部分。每个部分给出具体的代码,并解释关键点。同时要注意引用中的提示,比如使用任意HTML编辑器,代码精简,所以示例代码应该简洁易懂,避免过于复杂的结构。 还要考虑用户可能的技能水平,作为大学生作业,代码需要规范但不过于复杂,注释清晰。可能需要加入CSS变量、Flex布局、Grid布局等现代技术,提升网页的响应式设计。同时,引用中提到的JS功能如非空验证,可以补充表单验证的代码示例。 最后,生成相关问题时要围绕网页设计的技术点,比如CSS动画优化、响应式设计、JS性能等,帮助用户进一步深入学习。确保所有数学公式和代码格式符合用户指定的LaTeX和代码块要求,正确使用引用标记。</think>### 蜡笔小新主题网页设计方案增强版 #### 一、核心设计模块代码示例 **1. 动态导航栏设计** ```html <nav class="shinchan-nav"> <div class="nav-logo"> <img src="logo.png" alt="蜡笔小新" data-hover-sound="audio/hover.mp3"> </div> <ul class="nav-items"> <li><a href="#home" class="rainbow-hover">首页</a></li> <li><a href="#gallery" class="pop-effect">相册</a></li> <li><a href="#video" class="scale-transition">视频</a></li> </ul> </nav> <style> .shinchan-nav { background: linear-gradient(45deg, #ff6b6b, #4ecdc4); position: sticky; top: 0; z-index: 100; } .rainbow-hover { transition: 0.3s; background-image: linear-gradient( 90deg, #ff0000 0%, #ff8000 20%, #ffff00 40%, #00ff00 60%, #00ffff 80%, #8000ff 100% ); background-size: 200% auto; -webkit-background-clip: text; background-clip: text; color: transparent; } .rainbow-hover:hover { background-position: 100% center; transform: translateY(-2px); } </style> ``` *关键特性:CSS渐变文字、粘性定位、悬停动画[^2][^4]* **2. 动画角色展示区** ```html <div class="character-grid"> <div class="shinchan-card" data-character="shinchan"> <div class="card-inner"> <div class="card-front"> <img src="shinchan.png" class="bounce"> </div> <div class="card-back"> <p>野原新之助</p> </div> </div> </div> </div> <style> .character-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; } .shinchan-card { perspective: 1000px; height: 300px; } .card-inner { position: relative; width: 100%; height: 100%; transition: transform 0.8s; transform-style: preserve-3d; } .shinchan-card:hover .card-inner { transform: rotateY(180deg); } .card-front, .card-back { position: absolute; backface-visibility: hidden; } .card-back { transform: rotateY(180deg); } .bounce { animation: bounce 2s infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-20px); } } </style> ``` *特性包含:3D翻转卡片、网格布局、关键帧动画[^3][^4]* #### 二、高级交互功能实现 **1. 折叠相册组件** ```html <div class="accordion-gallery"> <div class="accordion-item active"> <div class="accordion-header">家庭相册</div> <div class="accordion-content"> <img src="family1.jpg" class="polaroid"> <img src="family2.jpg" class="polaroid"> </div> </div> </div> <style> .accordion-gallery { --transition-time: 0.4s; } .accordion-item { border: 3px solid #ffd700; margin: 10px; } .accordion-header { padding: 15px; background: #ffb3ba; cursor: pointer; transition: background var(--transition-time); } .accordion-content { max-height: 0; overflow: hidden; transition: max-height var(--transition-time); } .accordion-item.active .accordion-content { max-height: 500px; } .polaroid { transform: rotate(3deg); box-shadow: 5px 5px 15px rgba(0,0,0,0.3); transition: transform 0.3s; } .polaroid:hover { transform: rotate(0deg) scale(1.1); } </style> ``` *特性:CSS变量控制、折叠动画、宝丽来相片效果[^3][^4]* **2. 视频播放器增强** ```html <div class="video-container"> <video id="shinchan-video" class="custom-player"> <source src="movie.mp4" type="video/mp4"> </video> <div class="controls"> <button class="play-btn">▶</button> <input type="range" class="progress-bar" value="0"> <button class="fullscreen">⛶</button> </div> </div> <style> .custom-player { width: 100%; border-radius: 15px; box-shadow: 0 0 20px rgba(255,107,107,0.5); } .controls { background: linear-gradient(to right, #ff6b6b, #4ecdc4); padding: 10px; border-radius: 0 0 15px 15px; } .play-btn { font-size: 1.5em; background: none; border: 2px solid white; border-radius: 50%; width: 40px; height: 40px; color: white; cursor: pointer; transition: all 0.3s; } .play-btn:hover { transform: scale(1.2); background: rgba(255,255,255,0.2); } </style> ``` *特性包含:自定义播放器控件、渐变背景、交互反馈动画[^3][^5]* #### 三、响应式布局优化 ```css :root { --primary-color: #ff6b6b; --secondary-color: #4ecdc4; --breakpoint-md: 768px; } @media (max-width: 768px) { .shinchan-nav { flex-direction: column; } .character-grid { grid-template-columns: repeat(2, 1fr); } .video-container { aspect-ratio: 16/9; } } @media (min-width: 1200px) { .main-content { display: grid; grid-template-columns: 250px 1fr; gap: 30px; } } ``` *响应式设计要点:CSS变量管理断点、网格布局适配、宽高比控制[^1][^4]*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值