多媒体API

这篇具有很好参考价值的文章主要介绍了多媒体API。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

私人博客

许小墨のBlog —— 菜鸡博客直通车

系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图!

系列文章目录

前端系列文章——传送门
后端系列文章——传送门



多媒体标签

video

只接受几种视屏格式:ogg、mp4、avi

基本使用:

<video src="视屏文件路径"></video>
<!-- 兼容写法 -->
<video>
    <source src="路径1" type="video/mp4"></source>
    <source src="路径2" type="video/ogg"></source>
    <source src="路径3" type="video/avi"></source>
</video>

controls属性,出现默认的控制面板

autoplay属性,自动播放

loop属性,循环播放

width和height属性,用来设置视屏可视区域的尺寸,但是宽和高一直会保持等比,所以设置一个就行了,如果都设置了,会出现黑边,但可视区域是等比的

audio

只接受ogg和mp3格式,使用方式和video是一样的

<audio src="视屏文件路径"></audio>
<!-- 兼容写法 -->
<audio>
    <source src="路径1" type="audio/mp3"></source>
    <source src="路径2" type="audio/ogg"></source>
</audio>

controls属性,出现默认的控制面板

autoplay属性,自动播放

loop属性,循环播放

多媒体标签的API

在谷歌浏览器中,默认不能自动播放,默认直接调用play方法播放,需要一个自定义按钮来解决或设置video静音

/* 方法 */
video/audio.play() // 播放
video/audio.pause() // 暂停
/* 属性 */
video.duration // 视屏总时长
video.muted // 设置媒体静音,值为true或false,获取媒体是否静音
video.volume // 获取媒体当前声音(0~1),设置声音(0~1)
video.currentTime // 获取媒体当前时间,设置当前时间,单位秒
video/audio.paused // 查看媒体是否暂停
video/audio.playbackRate // 获取/设置播放倍速
/* 事件 */
loadstart:视屏开始加载时触发
progress:浏览器正在下载视屏时触发 - 相当于在加载
canplay:媒体加载完毕,可以播放的时候触发
play:视屏正在播放的时候触发
pause:视屏暂停的时候触发
seeking:视屏开始要跳到新位置的时候触发
seeked:视屏已经跳到新位置的时候触发
waiting:视屏加载等待时触发
timeupdate:只要播放时间更改就会触发
ended:媒体播放结束时触发
error:视屏播放错误时触发
volumechange:视屏音量改变时触发
ratechange:视屏播放速度更改时触发

自定义多媒体控件

布局

<div class="media">
    <div class="playOrPause">
        <i class="iconfont icon-zanting"></i>
    </div>
    <div class="time">
        <span class="currentMinute">00</span>
        :
        <span class="currentSecond">00</span>
        /
        <span class="durationMinute">00</span>
        :
        <span class="durationSecond">00</span>
    </div>
    <div class="playRange">
        <div class="currentRange"></div>
        <div class="playBtn"></div>
    </div>
    <div class="volume">
        <div class="volumeRange">
            <div class="currentVolume"></div>
            <div class="volumeBtn"></div>
        </div>
        <i class="iconfont icon-volume"></i>
    </div>
</div>

样式

.media{
    width: 800px;
    height: 50px;
    border:3px solid #bbb;
    margin:300px auto;
}
.media>div{
    float:left;
    line-height: 50px;
    margin:0 10px;
}
.media>div.playRange{
    width: 200px;
    height: 6px;
    background-color: #333;
    margin:22px 10px;
    border-radius:3px;
    position: relative;
}
.media>div.playRange .currentRange{
    width: 100px;
    height: 6px;
    background-color: rgb(9, 143, 153);
    position:absolute;
    left: 0;
    top: 0;
}
.media>div.playRange .playBtn{
    width: 20px;
    height: 20px;
    background-color:rgb(9, 143, 153);
    border-radius:50%;
    position: absolute;
    left: 90px;
    top: -7px;
}
.media .volume{
    position:relative;
}
.media .volumeRange{
    width: 4px;
    height: 100px;
    background-color: #333;
    border-radius:2px;
    position:absolute;
    top:-100px;
    left: 10px;
    display:none;
}
.media .volumeRange .currentVolume{
    width: 4px;
    height: 50px;
    background-color: blue;
    border-radius:2px;
    position:absolute;
    left: 0;
    bottom:0;
}
.media .volumeRange .volumeBtn{
    width: 15px;
    height: 15px;
    border-radius:50%;
    background-color: blue;
    position:absolute;
    left: -5px;
    bottom:40px;
}
.media i{
    font-size: 24px;
}

js效果:

// 控制音量的面板显示隐藏
$('.media .volume').hover(function(){
    $(this).find('.volumeRange').show()
},function(){
    $(this).find('.volumeRange').hide()
})

// 点击切换小图标
$('.media .playOrPause i').click(function(){
    if($(this).hasClass('icon-bofang')){
        $(this).removeClass('icon-bofang').addClass('icon-zanting')
        // 多媒体播放
        $('audio')[0].play()
    }else{
        $(this).removeClass('icon-zanting').addClass('icon-bofang')
        // 多媒体暂停
        $('audio')[0].pause()
    }
})
$('.media .volume i').click(function(){
    if($(this).hasClass('icon-volume')){
        $(this).removeClass('icon-volume').addClass('icon-jingyin')
        // 让多媒体静音
        $('audio')[0].muted = true
        // 让音量小球下来
        $('.currentVolume').height(0)
        console.log(-$('.volumeBtn').height()/2)
        $('.volumeBtn').css('top',$('.volumeRange').height()-$('.volumeBtn').height()/2 + "px")
    }else{
        $(this).removeClass('icon-jingyin').addClass('icon-volume')
        // 取消静音
        $('audio')[0].muted = false
    }
})
// 拖拽播放进度
$('.playRange').mousedown(function(e){
    // 让小球过来 - 获取光标按下的位置,计算小球的left
    var x = e.pageX;
    var left = x - $('.playBtn').width()/2;
    $('.playBtn').offset({left})
    var width = $('.playBtn').position().left + $('.playBtn').width()/2
    $('.currentRange').width( width )
    // // 根据当前拖拽好的位置设置多媒体
    // // 比例 = 当前播放过的进度条长度 / 进度条总长度
    var percent = width / $('.playRange').width()
    // 当前播放时长 = 总时长*比例
    var duration = $('audio')[0].duration;
    var currentTime = percent * duration;

    $('audio')[0].currentTime = currentTime;
    // $('audio')[0].pause()
    // 移动
    $(this).mousemove(function(e){
        // 让小球过来 - 获取光标按下的位置,计算小球的left
        var x = e.pageX;
        var left = x - $('.playBtn').width()/2;
        $('.playBtn').offset({left})
        var width = $('.playBtn').position().left + $('.playBtn').width()/2
        $('.currentRange').width( width )
        $('audio')[0].pause()
        $('.media .playOrPause i').removeClass('icon-zanting').addClass('icon-bofang')
    })
})
$('.playRange').mouseup(function(e){
    $('.playRange').off('mousemove')
    var width = $('.currentRange').width()
    // 根据当前拖拽好的位置设置多媒体
    // 比例 = 当前播放过的进度条长度 / 进度条总长度
    var percent = width / $('.playRange').width()
    // 当前播放时长 = 总时长*比例
    var duration = $('audio')[0].duration;
    var currentTime = percent * duration;
    $('audio')[0].currentTime = currentTime;
    $('audio')[0].play()
    $('.media .playOrPause i').removeClass('icon-bofang').addClass('icon-zanting')
})

// 拖拽音量
$('.volumeRange').mousedown(function(e){
    // 让小球过来 - 获取光标按下的位置,计算小球的left
    var y = e.pageY;
    var top = y - $('.volumeBtn').width()/2
    $('.volumeBtn').offset({top})
    $('.currentVolume').height( $('.volumeRange').height() - $('.volumeBtn').position().top - $('.volumeBtn').height()/2 )
    // 计算音量的比例
    var volume = ($('.currentVolume').height() / $('.volumeRange').height()).toFixed(1)-0
    $('audio')[0].volume = volume

    $(this).mousemove(function(e){
        var y = e.pageY;
        var top = y - $('.volumeBtn').width()/2
        $('.volumeBtn').offset({top})
        $('.currentVolume').height( $('.volumeRange').height() - $('.volumeBtn').position().top - $('.volumeBtn').height()/2 )
        // 计算音量的比例
        var volume = ($('.currentVolume').height() / $('.volumeRange').height()).toFixed(1)-0
        $('audio')[0].volume = volume
    })
})
$(document).mouseup(function(e){
    $('.volumeRange').off('mousemove')
})

// 当多媒体加载完成的时候获取多媒体的播放时长
$('audio')[0].addEventListener('canplay',canplay)
function canplay(){
    var duration = this.duration; // 秒
    // 换算成分钟和秒
    var minute = parseInt(duration/60)
    var second = parseInt(duration%60);
    minute = minute<10?'0'+minute:minute;
    second = second<10?'0'+second:second;
    $('.durationMinute').text(minute)
    $('.durationSecond').text(second)
    // 将播放进度小球放到0的位置
    $('.playBtn').css('left',-$('.playBtn').width()/2 + "px")
    $('.currentRange').width(0)
    // 将音量设置在最顶端
    $('.volumeBtn').css('top',-$('.volumeBtn').height()/2 + "px")
    $('.currentVolume').height($('.volumeRange').height())
}

// 正在播放过程中获取当前播放的时长
$('audio')[0].addEventListener('timeupdate',timeupdate)
function timeupdate(){
    // 获取 当前时长
    var currentTime = this.currentTime;
    var minute = parseInt(currentTime/60)
    var second = parseInt(currentTime%60);
    minute = minute<10?'0'+minute:minute;
    second = second<10?'0'+second:second;
    $('.currentMinute').text(minute)
    $('.currentSecond').text(second)
    // 计算当前播放过多少的比例
    var duration = this.duration; 
    var percent = currentTime / duration;
    // 计算播放过的进度条的长度
    var width = $('.playRange').width() * percent;
    $('.currentRange').width(width)
    $('.playBtn').css('left',width-$('.playBtn').width()/2 + "px")
}

// 多媒体播放结束
$('audio')[0].addEventListener('ended',ended)
function ended(){
    $('.media .playOrPause i').removeClass('icon-zanting').addClass('icon-bofang')
}

本博文缺失大量图片,严重影响内容完整性以及阅读体验,完整内容请前往本人菜鸡博客——许小墨のBlog文章来源地址https://www.toymoban.com/news/detail-432029.html

到了这里,关于多媒体API的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 多媒体开发之cgo

         go语言作为近十年来优秀的现代开发语言的代表,由于继承了c语言的简洁和很多现代语言的表达方式,在广泛的应用场景中得到众多爱好者的喜爱,如何将go和c、c++进行联合开发,拓展整个开发生态,不用重复造轮子,掌握cgo可以让你得心应手的在c和go之间传递信息,

    2024年02月16日
    浏览(31)
  • AIGC生成多媒体流程

    给定 生成多个故事标题 多个故事标题进行反向推导出 再生成标题 直到达到一个相似度 多个标题固定总结合并为一个标题 根据生成故事多个章节标题 多个章节标题反向生成一个标题 对比前后两个标题相似度 不断重复直到达到一定相似度 第一个章

    2024年02月12日
    浏览(30)
  • 计算机网络——多媒体网络

    通俗易懂,风趣幽默,忍不住分享一下给大家, 跳转到网站 我的计算机网络专栏,是自己在计算机网络学习过程中的学习笔记与心得,在参考相关教材,网络搜素的前提下,结合自己过去一段时间笔记整理,而推出的该专栏,整体架构是根据计算机网络 自顶向下 方法而整理

    2024年02月20日
    浏览(25)
  • 鸿蒙实战多媒体运用:【音频组件】

    音频组件用于实现音频相关的功能,包括音频播放,录制,音量管理和设备管理。 图 1  音频组件架构图 基本概念 采样 采样是指将连续时域上的模拟信号按照一定的时间间隔采样,获取到离散时域上离散信号的过程。 采样率 采样率为每秒从连续信号中提取并组成离散信号

    2024年03月10日
    浏览(39)
  • Java UI组件和多媒体

    目录 1、使用单选按钮 2、选择几何图形  3、交通信号灯  4、演示TextField的属性 5、演示TextArea的属性 6、选择一种字体  7、演示 Label 的属性  8、使 用ComboBox 和 ListView  9、使 用 ScrollBar 和 Slider    10、模拟:一个转动的风扇 编写一个 GUI 程序如图所示 。 可以使用按钮将消

    2024年02月09日
    浏览(29)
  • HTML5多媒体单元测试

    (单选题, 10.0分) 为元素指定多个视频源使用( )标签(元素)。 A select B datalist C source D src (单选题, 10.0分) 判断浏览器是否支持指定的媒体类型需用到audio或video对象的( )方法。 A load() B play() C pause() D canPlayType() (多选题, 10.0分) HTML5新增了强大的多媒体的功能,主要体现在

    2024年02月04日
    浏览(30)
  • 多媒体网络教学模式的评价方式

    传统教学评价只注重学生掌握的基本知识,忽视其他各方面的技能,已经不能 满足多媒体网络教学模式下的评价要求。建构主义指导下的评价方式也应遵循以学 习者为中心的原则,强调合作学习,体现学习过程的重要性。因此,评价方式的多 元化必然会取代传统单一的评价

    2024年02月11日
    浏览(29)
  • 设计HTML5图像和多媒体

    在网页中的文本信息直观、明了,而多媒体信息更富内涵和视觉冲击力。恰当使用不同类型的多媒体可以展示个性,突出重点,吸引用户。在HTML5之前,需要借助插件为网页添加多媒体,如Adobe Flash Player、苹果的QuickTime等。HTML5引入原生的多媒体技术,设计多媒体更简便,用户

    2024年02月12日
    浏览(26)
  • docker安装jellyfin家庭多媒体中心

    参数说明 参数 说明 -d 以守护进程的方式启动 -e TZ=Asia/Shanghai 设置时区为上海 - -name jellyfin 把容器的名字设置为jellyfin - -restart=always docker重启时候容器自动重启 -v /opt/jellyfin/config:/config 把容器内的/config目录挂载到宿主机的/opt/jellyfin/config目录 -v /opt/jellyfin/cache:/cache 把容器内的

    2024年02月03日
    浏览(194)
  • 多媒体数据处理实验2:PCA

    1. 算法描述 功能:  利用PCA算法可以对给定的数据集进行降维操作,使得处理后的数据不仅维数较低、能保存绝大部分信息,而且各维之间的相关性也为0(没有冗余信息,正交)。 2. PCA的数学原理 (1) PCA的目的   一般而言,一个未经处理的数据集可能存在两个问题,一个

    2023年04月24日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包