【H5音视频处理+less-css预处理器】

如何实现在网页里播放音频和视频?

方法一:使用HTML方法实现
方法二:使用HTML5新增的多媒体元素实现

方法一:使用HTML方法实现

//html视频
<object id="video" width="400" height="200" border="0" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA">
        <param name="ShowDisplay" value="0">
        <param name="ShowControls" value="0">
        <param name="AutoStart" value="0">
        <param name="AutoRewind" value="0">
        <param name="PlayCount" value="0">
        <param name="Appearance value="0 value="">
        <param name="BorderStyle value="0 value="">
        <param name="MovieWindowHeight" value="240">
        <param name="MovieWindowWidth" value="320">
        <param name="FileName" value="movie.ogg">
        <embed width="400" height="200" border="0" showdisplay="0" showcontrols="0"
               autostart="0" autorewind="0" playcount="0" moviewindowheight="240"
               moviewindowwidth="320" filename="movie.ogg" src="movie.ogg">
        </embed>
    </object>

//html音频
<param name="ShowDisplay" value="0">
<param name="ShowControls" value="0">
<param name="AutoStart" value="0">
<param name="AutoRewind" value="0">
<param name="PlayCount" value="0">
<param name="Appearance value="0 value="">
<param name="BorderStyle value="0 value="">
<param name="MovieWindowHeight" value="240">
<param name="MovieWindowWidth" value="320">
<param name="FileName" value="movie.ogg">
<embed src=music.mp3 width=300 type=audio/mpeg loop="-1"
             autostart="false" volume="0">
</embed>

结论:使用HTML方法实现

代码冗长
没有安装flash插件无法观看视频
需要结合使用比较复杂的object元素与embed元素,且要为object添加很多属性

方法二:使用HTML5新增的多媒体元素实现

audio

使用video元素播放视频、audio元素播放音频
支持HTML5的浏览器即可

<h2>在html5中播放音频:</h2> 
<audio src="vedio/song.ogg" controls="controls" autoplay="autoplay">
        您的浏览器不支持audio元素播放的音频
</audio>
属性说明
controlscontrols如果出现该属性,则向用户显示控件,比如播放按钮
autoplayautoplay如果出现该属性,则音频在就绪后马上播放
looploop如果出现该属性,则当音频结束时重新开始播放
preloadauto/meta/none如果出现该属性,则音频在页面加载时进行加载,并预备播放 auto:-当页面加载后载入整个音频 meta:当页面加载后只载入元数据 none:当页面加载后不载入音频
如果浏览器不支持:
各个浏览器默认解析不同:
常见的音频格式

.mp3、.ogg、wav等格式。 不同浏览器对不同类型文件支持情况不同

** **IE9Firefox3.5Opera10.5Chrome3.0Safari3.0
Ogg** **
MP3
Wav
source元素

audio元素允许多个source元素
source可链接不同的音频文件

<h2>在html5中播放音频:</h2> 
<audio controls="controls">
       <source src="vedio/song.ogg"/>
       <source src="vedio/song.mp3"/>
         您的浏览器不支持audio元素播放的音频
</audio>

Video
<h2>在html5中播放视频:</h2>
<video src="vedio/vedio.ogg" controls="controls">
    您的浏览器不支持video播放的视频
</video>
属性说明
controlscontrols如果出现该属性,则向用户显示控件,比如播放按钮
autoplayautoplay如果出现该属性,则视频在就绪后马上播放
looploop如果出现该属性,则当视频结束时重新开始播放
preloadauto如果出现该属性,则视频在页面加载时进行加载,并预备播放
width/heightlength(px)设置视频播放器的宽度/高度
如果浏览器不支持:
各个浏览器默认解析不同:
常见的视频格式:

.avi、.flv、.mp4、.mkv、.ogv

** **IEFirefoxOperaChromeSafari
OggNo3.5+10.5+5.0+No
mp49.0+NoNo5.0+3.0+
WebMNo4.0+10.6+6.0+No
source元素

video元素允许多个source元素
source可链接不同的视频文件

<h2>在html5中播放音频:</h2> 
<video controls="controls">
      <source src="vedio/vedio.mp4"/>
      <source src="vedio/vedio.ogg"/>
      <source src="vedio/video.webm"/>
     您的浏览器不支持video播放的视频
</video>
打造个性的视频播放器

不同浏览器中视频样式、音频样式不一样?如何解决?

打造个性的视频播放器需要用到的属性
  • controls : 显示或隐藏用户控制界面
  • autoplay : 媒体是否自动播放
  • loop : 媒体是否循环播放
  • paused : 媒体是否暂停(只读)
  • ended : 媒体是否播放完毕(只读) - currentTime : 开始播放到现在所用的时间
  • duration : 媒体总时间(只读)
  • volume : 0.0-1.0的音量相对值
  • muted : 是否静音 - playbackRate:设置或返回音频/视频的当前播放速度 [1.0 正常速度 0.5 半速(更慢) 2.0 倍速(更快) -1.0 向后,正常速度 -0.5 向后,半速]
视频播放器需要用到的方法

play() : 媒体播放
pause() : 媒体暂停 requestFullscreen() 谷歌浏览器前缀webkitRequestFullScreen()

视频播放器需要用到的事件

canplay:当浏览器能够开始播放指定的音频/视频时,发生 canplay 事件。 timeupdate : 时间更新 ended:播放结束

less-css预处理器

简介

CSS(层叠样式表)是一门历史悠久的标记性语言,同 HTML 一道,被广泛应用于万维网(World Wide Web)中。HTML 主要负责文档结构的定义,CSS 负责文档表现形式或样式的定义。

作为一门标记性语言,CSS 的语法相对简单,对使用者的要求较低,但同时也带来一些问题:CSS 需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤其对于非前端开发工程师来讲,往往会因为缺少 CSS 编写经验而很难写出组织良好且易于维护的 CSS 代码,造成这些困难的很大原因源于 CSS 是一门非程序式语言,没有变量、函数、SCOPE(作用域)等概念。LESS 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,为CSS赋予了动态语言的特性,如变量、继承、运算、函数等,更方便CSS的编写和维护。大大简化了 CSS 的编写,并且降低了 CSS 的维护成本

sass/scss

编译工具

LEES语法

1 注释
  • 可以使用CSS中的注释
  • 也可以使用
2 变量

Less中声明变量一定要用@开头,比如:@变量名:值

//1.声明变量
@test_width:300px;
.box{
   //2.使用变量
   width: @test_width;
   height: @test_width;
   border: 1px solid white;
   background-color: yellow;
}

它编译后的css文件中@test_width就直接替换为300px;了。

3 混合 - (Mixin)

混合是一种将一组属性从一个规则集 包含(或混入)到另一个规则集的方法。

把一组样式混合到另外一组样式中。(类似于函数的调用)

  • 基础混合用法

  • 带参数的混合

    • .border-radius(@radius){css代码}
  • 可设定默认值

    • border-radius(@radius:5px){css代码}

Less:

@test_width:300px;
//混合
.border{
 border: 5px solid pink;
}
.box{
     width: @test_width;
     height: @test_width;
     background-color: yellow;
     .border();
}

.box2{
     .box;
     margin-left: 100px;
}

生成后的CSS:

.border {
    border: 5px solid pink;
}
.box {
     width: 300px;
     height: 300px;
     background-color: yellow;
     border: 5px solid pink;
}

.box2 {
    width: 300px;
    height: 300px;
    background-color: yellow;
    border: 5px solid pink;
    margin-left: 100px;
}

带参数的混合,Less:

//混合 - 可带参数的
.border_02(@border_width){
     border: solid yellow @border_width;
}

.test_hunhe{
     .border_02(30px);
}

带默认值参数的混合,Less:

.border_03(@border_width:10px){
     border: solid green @border_width;
}
.text_hunhe_03{
     .border_03();
}

在引用.border_03的时候没有传递至,那么默认的值就是10px。

4 匹配模式
  • 相当于JS中的if,但不完全是
  • 满足匹配条件后才能匹配

我们来看一个画三角的例子,如果你知道怎么画更好:

HTML:

<div class="sanjiao"></div>

Less:

.sanjiao{
     width: 0;
     height: 0;
     overflow: hidden;
     border-width: 10px;
     border-color: transparent transparent red transparent;
     border-style: dashed dashed solid dashed;
}

这是画一个向上的三角,如果我们要改变三角的朝向,我们得改变border-color,我们得写几遍大部分都一样的代码,而用来模式匹配之后:

Less:

//模式匹配
.triangle(top,@width:5px,@color:#ccc){
     border-width: @width;
     border-color: transparent transparent @color transparent;
     border-style: dashed dashed solid dashed;
}
.triangle(bottom,@width:5px,@color:#ccc){
     border-width: @width;
     border-color: @color transparent transparent transparent;
     border-style: dashed dashed solid dashed;
}
.triangle(left,@width:5px,@color:#ccc){
     border-width: @width;
     border-color: transparent @color transparent transparent;
     border-style: dashed solid dashed dashed;
}
.triangle(right,@width:5px,@color:#ccc){
     border-width: @width;
     border-color: transparent transparent transparent @color;
     border-style: dashed dashed dashed solid;
}

然后我们需要什么方向调用的时候就传什么方向:

.sanjiao{
     width: 0;
     height: 0;
     overflow: hidden;
     .triangle(right,100px);
}

但是,里面的width、height又要重写一遍,而Less给我们提供了一个东西,它不管你如何选择什么三角方向,它总会带上那个东西,有点像Java里面的finally块,无论你try块里做了什么,Java始终会执行finally块里的代码,好了,我们来看下Less班的finally如何写:

.triangle(@_,@width:5px,@color:#ccc){
     width: 0;
     height: 0;
     overflow: hidden;
}
.sanjiao{
     .triangle(right,100px);
}

发现了没?就是一个“@*”参数!无论你选择top是right方向,带@*参数的triangle都会被带上,调用的时候就没必要再写width,height等。

如果你觉得上面比较复杂了一点,OK,我们来一个简单的例子,div定位的例子

HTML:

<div class="pipei"></div>

写三个定位,相对定位、绝对定位和固定定位

Less:

//匹配模式 - 定位
.post(r){
     position: relative;
}
.post(a){
     position: absolute;
}
.post(f){
     position: fixed;
}

.pipei{
     width: 200px;
     height: 200px;
     background-color: green;
     .post(r);
}

这样,这个div就是相对定位了。

5 运算

在Less中,任何数组、颜色或者变量都可以参与运算,运算应该被包裹在括号中。例如:+ - * /

给宽度增加20px然后在乘以5个像素,Less:

@test_01:300px;

.box_02{
 width: (@test_01 + 20) * 5;
}
6 嵌套规则

Less中的嵌套是最有意思的小东西了、我们创建这个一个列表:

<ul class="list">
   <li>
       <a href="#">Less的嵌套用法</a>
       <a href="#">Less的嵌套用法</a>
       <a href="#">Less的嵌套用法</a>
       <a href="#">Less的嵌套用法</a>
       <a href="#">Less的嵌套用法</a>
   </li>
 </ul>

Less:

.list{
   width: 600px;
   margin: 30px auto;
   padding: 0;
   list-style: none;
 
   li{
       height: 30px;
       line-height: 30px;
       background-color: pink;
       margin-bottom: 5px;
       padding: 0 10px;
   }
   a{
       float: left;
       //& 代表它的上一层选择器
       &:hover{
             color: red;
       }
   }
   span{
         float: right;
   }
}

它编译后生成的CSS就是这样的:

.list {
    width: 600px;
    margin: 30px auto;
    padding: 0;
    list-style: none;
}
.list li {
    height: 30px;
    line-height: 30px;
    background-color: pink;
    margin-bottom: 5px;
    padding: 0 10px;
}
.list a {
    float: left;
}
.list a:hover {
    color: red;
}
.list span {
    float: right;
}
7 @arguments变量

@arguments包含了所有传递进来的参数。如果你不想单独处理每一个参数的话就可以像这样写:

Less:

Less:
.border_arg(@w:30px,@c:red,@xx:solid){
   //border:@w @c @xx;
   //等价 
   border: @arguments;
}
.test_arguments{
   .border_arg();
}

这样@arguments就自动帮我们注入了所有的参数,省了那么一丢丢的代码。

8 避免编译、!important以及总结
避免编译
  • 有时候我们不需要输出一些不正确的CSS语法或使用一些Less不认识的专有语法。
  • 要输出这样的值,我们可以在字符串前加一个,例如:width:‘clac(100% - 35)’
  • 在 Less 3.5+ 版本中,许多以前需要“引号转义”的情况就不再需要了。

Less:

.test_03 {
    width: calc(200px - 30px);
}

这样的话,编译后的CSS就自动帮你计算了

CSS:

.test_03 {
    width: calc(170px);
}

但我们并不想它在编译时被计算,而是想让浏览器去计算,这时候我们就需要添加~符号了:

.test_03{
     width: ~'calc(200px - 30px)';
}

这样,就可以避免编译,输出的CSS就是这样(原样输出)

.test_03 {
      width: calc(200px - 30px);
}
!important关键字

会为所有混合所带来的样式,添加!important

less

span{
 .fs(50px, #fff) !important;
}

css:

span {
  font-size: 50px !important;
  color: #fff !important;
}
9.导入(Importing)

“导入”的工作方式和你预期的一样。你可以导入一个 .less 文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less 扩展名,则可以将扩展名省略掉:

@import "library"; // library.less
@import "typo.css";
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值