最常用的手写switch标签

这篇博客介绍了如何使用HTML和JavaScript实现手写switch标签的功能。内容包括如何设置初始选中状态,以及如何根据后台数据动态改变按钮状态,实现label与input的交互绑定。

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

	Switch 按钮存在很多的UI框架,但是要是为了维护原本的WEB前端框架,可以手写对应的Switch标签,并产生对应的效果。
	下面这个是百度提供的一个可用的Switch对应的样式,通过JS可以来修改对应的内容,并且让其显示与后台数据结合起来

关闭状态开启状态
它对应的html是:

<div class="slideThree">
      <input type="checkbox" value="1" id="slideThree_input" name="check"   />
      <label for="slideThree_input" id="slideThree_label" ></label>
 </div>

一个单选框,一个label,并且label绑定了单选框,点击label的时候,单选框也相应的点击了或者是取消点击

.slideThree {
    display: inline-block;
    width: 80px;
    height: 26px;
    background: #333;
    margin: 20px 10px;
    position: relative;
    -moz-border-radius: 50px;
    -webkit-border-radius: 50px;
    border-radius: 50px;
    -moz-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.5), 0px 1px 0px rgba(255, 255, 255, 0.2);
    -webkit-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.5), 0px 1px 0px rgba(255, 255, 255, 0.2);
    box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.5), 0px 1px 0px rgba(255, 255, 255, 0.2);
}
.slideThree:after {
    content: 'OFF';
    color: #000;
    position: absolute;
    right: 10px;
    z-index: 0;
    font: 12px/26px Arial, sans-serif;
    font-weight: bold;
    text-shadow: 1px 1px 0px rgba(255, 255, 255, 0.15);
}
.slideThree:before {
    content: 'ON';
    color: #00bf00;
    position: absolute;
    left: 10px;
    z-index: 0;
    font: 12px/26px Arial, sans-serif;
    font-weight: bold;
}
.slideThree label {
    display: block;
    width: 34px;
    height: 20px;
    cursor: pointer;
    position: absolute;
    top: 3px;
    left: 3px;
    z-index: 1;
    background: #fcfff4;
    background: -moz-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
    background: -webkit-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
    background: linear-gradient(to bottom, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);
    -moz-border-radius: 50px;
    -webkit-border-radius: 50px;
    border-radius: 50px;
    -moz-transition: all 0.4s ease;
    -o-transition: all 0.4s ease;
    -webkit-transition: all 0.4s ease;
    transition: all 0.4s ease;
    -moz-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.3);
    -webkit-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.3);
    box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.3);
}
.slideThree input[type=checkbox] {
    visibility: hidden;
}
//写入js里面
.slideThree input[type=checkbox]:checked + label {
    //left: 43px;
}

结合数据的处理需要再js中设定
1、 给定初始的 input标签中选择一个checked="checked"属性,那页面进入就是默认选中按钮。并且与lable中的:before绑定了。后面的点击移动,改变就很随意。将label和input结合在一起
2、最长遇到的是,按钮的初始状态是由后台决定的。所以,拿到数据后改变slideThree label的初始位置,input的点击状态,这样input的点击状态和label就绑定在一起了。

 if(powerstatus){
	$(".slideThree label").css('left','43px');
	$("#slideThree_input").attr("checked", true);
 }else{
	$(".slideThree label").css('left','3px');
	$("#slideThree_input").attr("checked", false);
}
<think>嗯,用户让我手写一个在线视频播放器,这个问题看起来有点挑战性。首先,我需要明确用户的需求是什么。他们可能想要了解从零开始构建一个基本的视频播放器需要哪些步骤和技术,或者想了解相关的技术栈。用户可能有一定的编程基础,但可能对音视频处理不太熟悉,所以需要解释清楚关键点。 接下来,我得考虑在线视频播放器的基本组成部分。通常包括视频容器格式、编解码器、流媒体协议、前端播放控制等。比如,常见的视频格式有MP4、WebM,编解码器如H.264、VP9,流媒体协议比如HLS或DASH。不过,如果用户想自己处理解码,可能需要用到WebAssembly和FFmpeg,但这比较复杂。 然后,前端的实现部分。HTML5的video标签简单的,但功能有限。如果要自定义UI,可能需要用HTML、CSS和JavaScript来控制video元素,添加自定义的播放/暂停按钮、进度条、音量控制等。此外,还需要处理全屏播放、字幕加载、播放速度调整等功能。 流媒体传输方面,如果视频较大,直接使用MP4文件可能加载慢,所以需要考虑分段加载或使用HLS。HLS需要将视频切片成TS文件,并生成M3U8索引文件,这样前端可以通过hls.js库来支持播放。这可能是一个比较实际的方案,不需要自己处理复杂的流媒体服务器。 另外,跨浏览器的兼容性也是一个问题。不同的浏览器对视频格式和编解码器的支持不同,可能需要提供多种格式的视频源。比如,同时提供MP4和WebM格式,使用source标签让浏览器自动选择。 还要考虑响应式设计,让播放器适应不同屏幕尺寸,移动端和桌面端的体验都要兼顾。可能需要使用CSS的媒体查询或者flex布局来实现。 安全性方面,视频的防盗链、防止下载也是需要考虑的,但可能超出了手写播放器的范围,需要服务器配置。 总结下来,实现一个基本的在线视频播放器可以分为几个步骤:使用HTML5 video标签作为基础,自定义UI控件,集成流媒体库如hls.js,处理兼容性和响应式布局,后进行测试和优化。对于更高级的功能,比如自定义解码,可能需要更底层的技术,但这对初学者来说可能太难了,所以建议先从简单的方案入手,逐步深入。</think>在线视频播放器开发需要结合多媒体技术、网络传输和前端开发,以下是核心实现步骤和技术要点: 一、基础架构选择 1. 视频容器格式:优先选择MP4(H.264+AAC)或WebM(VP9+Opus) 2. 传输协议: - 小文件直接使用HTTP渐进下载 - 大文件建议HLS(.m3u8+ts分段)或MPEG-DASH 3. 前端解码方案: - 浏览器原生支持:使用<video>标签 - 自定义解码:WebAssembly + FFmpeg(复杂度较高) 二、HTML5基础实现 ```html <!-- 基础播放器结构 --> <div class="player-container"> <video id="videoElement" controls> <source src="video.mp4" type="video/mp4"> <source src="video.webm" type="video/webm"> 您的浏览器不支持视频播放 </video> <!-- 自定义控制条 --> <div class="controls"> <button id="playPauseBtn">▶</button> <input type="range" id="progressBar" value="0"> <span id="timeDisplay">00:00 / 00:00</span> <input type="range" id="volumeSlider" min="0" max="1" step="0.1" value="1"> </div> </div> ``` 三、核心JavaScript控制逻辑 ```javascript const video = document.getElementById('videoElement'); const playPauseBtn = document.getElementById('playPauseBtn'); // 播放/暂停控制 playPauseBtn.addEventListener('click', () => { video.paused ? video.play() : video.pause(); }); // 进度条联动 video.ontimeupdate = () => { const progress = (video.currentTime / video.duration) * 100; document.getElementById('progressBar').value = progress; }; // 音量控制 document.getElementById('volumeSlider').addEventListener('input', (e) => { video.volume = e.target.value; }); ``` 四、增强功能实现方案 1. 流媒体支持: ```html <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> <script> if(Hls.isSupported()) { const hls = new Hls(); hls.loadSource('https://example.com/stream.m3u8'); hls.attachMedia(video); } </script> ``` 2. 关键功能扩展: - 字幕加载:WebVTT格式+track标签 - 播放速度:video.playbackRate属性控制 - 画中画:requestPictureInPicture() - 全屏控制:全屏API+CSS伪类 五、性能优化要点 1. 视频预处理: - 分辨率适配:准备多种分辨率版本 - 关键帧间隔:建议2-4秒 - 编码参数:CRF值控制在23-28之间 2. 加载策略: - 首屏预加载:preload="metadata" - 分段加载:Range请求实现伪流式传输 - 缓存策略:Service Worker离线缓存 3. 错误处理: ```javascript video.addEventListener('error', () => { const errorCode = video.error.code; switch(errorCode) { case 1: console.error('视频加载中止'); break; case 2: console.error('网络错误'); break; case 3: console.error('解码错误'); break; case 4: console.error('视频格式不支持'); } }); ``` 六、进阶开发方向 1. DRM数字版权管理:集成Widevine/PlayReady 2. 自适应码率:Shaka Player + DASH Manifest 3. 实时直播:WebRTC实现低延迟传输 4. 视频分析:Canvas + WebGL实现帧处理 建议从基础播放器入手,逐步添加流媒体支持,后实现高级功能。实际开发中推荐使用video.js等成熟库作为基础,可大幅降低开发难度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值