【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用

这篇具有很好参考价值的文章主要介绍了【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、拖拽事件

原生JavaScipt案例合集
JavaScript +DOM基础
JavaScript 基础到高级
Canvas游戏开发

1.1 拖拽事件

  • ondrag: 拖拽

  • ondragenter: 拖拽进入

  • ondragleave: 拖拽离开

  • ondragstart: 拖拽开始

  • ondragend: 拖拽结束

  • ondragover:悬浮

  • ondrop: 丢弃事件

    该事件有一个bug,dargover事件中的默认行为阻止了ondrop事件不能够执行,所以要给一个元素添加该事件,必须要给该元素添加ondragover事件并阻止默认事件

var img = document.querySelector("img");

//ondrag 拖拽事件
// img.ondrag = function(e){
//     console.log("ondrag...");
//     // this.style.left = e.clientX + "px";
//     // this.style.top = e.clientY + "px";
// }

// ondragstart 拖拽开始
img.ondragstart = function(){
    console.log("拖拽开始...")
}
// ondragend: 拖拽结束
img.ondragend = function(e){
    console.log("拖拽结束...",e)
    // this.style.left = e.clientX + "px";
    // this.style.top = e.clientY + "px";
}


// // ondragenter: 拖拽进入
// img.ondragenter = function(){
//     console.log("拖拽进入....")
// }

// // ondragleave: 拖拽离开
// img. ondragleave = function(){
//     console.log("拖拽离开....")
// }

// ondragover:悬浮
img.ondragover = function(e){
    e.//阻止默认事件
    //preventDefault()[dom标准写法(ie678不兼容)]
    //ie678用returnValue
    //或者利用return false也能阻止默认行为,没有兼容问题(只限传统注册方式)
    preventDefault();
    console.log("拖拽悬浮....")
}

// ondrop: 丢弃事件
img.ondrop = function(){
    console.log("丢弃成功....")
}
//ondrop 丢弃事件有一个 bug 需要 ondragover 配合使用,然后再 ondragover 中阻止默认行为  才能触发ondrop

1.2 案例:拖拽丢弃图片

<img src="./images/1.png" alt="" id="drop1">
<img src="./images/trash.png" alt="" id="trash">
<script>
    //将页面中的图片拖到垃圾桶中丢弃
    var drop1 = document.getElementById("drop1");
    var trash = document.getElementById("trash");

     var elem = null;
   drop1.ondragstart = function(){
       elem = this;
    }

    // 垃圾桶丢弃事件
   trash.ondragover = function(e){
         e.preventDefault();
   }
  trash.ondrop = function(){
         // drop1.remove()
         elem.remove();
}
</script>

二、音频和视频

  • play() 播放音频或视频

  • pause() 暂停播放

  • audio.volume 获取音量【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用,HTML5,前端开发,html5,前端,drag,video,audio,音频视频,defer
    上面报错,超出[0,1]范围,也就是说音量范围在 0-1之间,那就是 0.1 ,0.2 …

  • audio.muted 设置是否静音,默认是false,非静音状态 设置true,为静音状态

  • muted 属性是一个 boolean(布尔) 属性。

  • muted 属性设置或返回音频/视频是否应该被静音(关闭声音)。

  • audio.currentTime 获取和设置当前播放进度

  • audio.duration 获取播放总时间

html代码:

<!-- <audio src="./video/3.mp3" controls id="audio"></audio> -->
<video src="./video/2.mp4" controls id="audio"></video>
<button id="play">播放</button>
<button id="pause">暂停</button>
<button id="add">音量+</button>
<button id="reduce">音量-</button>
<button id="muted">静音</button>
<div id="bar">
    <div class="progress"></div>
    <div class="block"></div>
    <div class="complete"></div>
</div>

css代码:

#bar{
    width: 450px;
    height: 50px;
    background-color: red;
    position: relative;
}

.progress{
    width: 430px;
    height: 6px;
    background-color: blue;
    position: absolute;
    left: 10px;
    top: 25px;
    transform: translateY(-50%);
}

.block{
    width: 10px;
    height: 20px;
    background-color: orange;
    position: absolute;
    left: 10px;
    top: 25px;
    transform: translateY(-50%);
    /* transition:all .1s; */
}

.complete{
    /* width: 300px; */
    height: 6px;
    background-color: orange;
    position: absolute;
    left: 10px;
    top: 25px;
    transform: translateY(-50%);
}

JS代码:

$("#play").onclick = function(){
    $("#audio").play();
}

$("#pause").onclick = function(){
    $("#audio").pause();
}

$("#add").onclick = function(){
    // var vol = $("#audio").volume;
    // vol += 0.1;
    // $("#audio").volume = vol > 1 ?  vol = 1 : vol;
    // 使用小数可以实现音量的增减 但是JS有精度损失问题  所以能不用则不用

    var vol = $("#audio").volume * 10; // [0,1] * 10 = [1,10]
    vol = ++vol > 10 ? vol = 10 : vol;
    $("#audio").volume = vol / 10;

    console.log($("#audio").volume)
}

$("#reduce").onclick = function(){
    // var vol = $("#audio").volume;
    // vol -= 0.1;
    // $("#audio").volume = vol < 0 ?  vol = 0 : vol;


    var vol = $("#audio").volume * 10;
    vol = --vol > 10 ? vol = 10 : vol;
    $("#audio").volume = vol / 10;

    console.log($("#audio").volume)
}

$("#muted").onclick = function(){
    $("#audio").muted ? this.innerHTML = "静音" : this.innerHTML = "恢复";
    $("#audio").muted = !$("#audio").muted;
}

$(".block").onmousedown = function(){
    $(".progress").onmousemove = function(e){
        // console.log(e.clientX)
        var ml = e.clientX - 10;
        $(".block").style.left = ml + "px";
        $(".complete").style.width = ml + "px";
        var r = ml / this.clientWidth;
        console.log(r)
        $("#audio").currentTime = $("#audio").duration * r;
    }
}

function $(selector){
    return document.querySelector(selector);
}

浏览器:

音频:

【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用,HTML5,前端开发,html5,前端,drag,video,audio,音频视频,defer

视频:

【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用,HTML5,前端开发,html5,前端,drag,video,audio,音频视频,defer

三、defer 与 async 属性

3.1 概述

在 HTML5 之前,加载页面过程中,如果某个 script 标签引入一个外部的 js 脚本文件,浏览器在读取该 js 脚本过程中会暂停页面的加载工作,发送一个请求去下载 js 脚本文件,脚本下载完毕后才继续执行页面的加载工作。如果脚本文件比较庞大,那么脚本的下载工作必然会成为页面加载时一个性能方面的瓶颈。

在 HTML5 中,针对 script 元素,新增 defer 与 async 属性,来加快页面的加载速度。当使用这两个属性时,浏览器发出下载脚本的请求并开始下载工作后,会立即继续执行页面的加载工作。脚本下载完毕时触发一个 onload 事件,通过监听该事件来指定当脚本文件下载完毕后所需要执行的一些操作。

两个属性的区别仅在于何处执行 onload 事件处理函数:

  • 使用 async 属性,脚本下载完毕后,立即执行 onload 事件处理函数。引入多个脚本文件且都添加 async 属性时,按照脚本下载时间执行脚本文件(不按照代码书写顺序执行)
  • 使用 defer 属性,脚本下载完毕后,等待页面全部加载完毕后,才执行 onload 事件处理函数。引入多个脚本文件且都添加 defer 属性时,则在页面加载完毕后按照代码中外部脚本的引用顺序依次执行对应的 onload 事件处理函数(不按照脚本下载时间顺序执行)

注意:由于外部脚本文件的下载工作也属于整个页面加载工作的一部分,所以外部脚本文件的 onload 事件处理函数优先于浏览器窗口对象(window 对象)或 body 元素的 onload 时间处理函数执行。

3.2 示例一:

对比两个属性使用时较未使用时页面加载速度

脚本文件代码:

function myInit(){
	let x = "示例文字,很多的样子...";
	alert(x);
}

script引入时三种情况:

<script src="./js/test.js" onload="myInit()"></script>
<script src="./js/test.js" defer onload="myInit()"></script>
<script src="./js/test.js" async onload="myInit()"></script>

浏览器 Timeline 中观察三种情况页面的加载时间:

【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用,HTML5,前端开发,html5,前端,drag,video,audio,音频视频,defer

3.3 示例二:

在页面中引入两个外部脚本文件,test.js 脚本文件内容较多,test2.js 脚本文件内容较少。对这两个外部脚本文件均使用 async 或 defer属性。观察这两个引入文件的执行顺序。

<script src="./js/test.js" defer onload="myInit()"></script>
<script src="./js/test2.js" defer onload="myInit2()"></script>

// 或

<script src="./js/test.js" async onload="myInit()"></script>
<script src="./js/test2.js" async onload="myInit2()"></script>

四、dialog 元素

dialog 元素代表一个对话框。

默认情况下,dialog 元素处于隐藏状态,可以在 JS 脚本中使用元素的 show 方法显示 dialog 元素,可以使用元素的 close 方法隐藏 dialog 元素。

如果想要以模态框(模式对话框)的形式显示 dialog ,则需要使用元素的 showModal() 方法。

如下,点击“打开对话框”按钮,弹出模态框;点击模态框中的“关闭”按钮,关闭当前模态框:

【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用,HTML5,前端开发,html5,前端,drag,video,audio,音频视频,defer

【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用,HTML5,前端开发,html5,前端,drag,video,audio,音频视频,defer

HTML代码:

<!-- dialog对话框,元素默认处于隐藏状态,可以在脚本中使用元素的show方法显示dialog元素,close方法隐藏dialog元素 -->
<button id="open">打开对话框</button>
<dialog id="dg">
    <h1>用户登录</h1>
    <form action="#">
        <p><label for="uname">用户名:</label><input type="text" placeholder="请输入用户名"></p>
        <p><label for="pwd">密码:</label><input type="password" placeholder="请输入密码"></p>
        <p><button id="login-btn">登录</button><button id="close-btn">关闭</button></p>
    </form>
</dialog>

CSS代码:

*{margin: 0;padding: 0;}
#dg{
    width: 30%;
    padding: 20px 10px;
    text-align: center;
    line-height: 3;

    position: fixed;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%);
}

label{
    display: inline-block;
    width: 100px;
    text-align: right;
}

#dg button{
    margin: 0 10px;
}

JS代码:文章来源地址https://www.toymoban.com/news/detail-699685.html

let open = document.getElementById("open"),
    dg = document.getElementById("dg"),
    closeBtn = document.getElementById('close-btn');

open.onclick = function(){
    // show() 显示dialog元素
    // dg.show();
    // showModal() 以模态框的形式显示dialog元素
    dg.showModal();
}

closeBtn.onclick = function(){
    // close() 方法隐藏dialog元素
    dg.close();
}

到了这里,关于【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 说一下 HTML5 drag API

    说一下 HTML5 drag API dragstart:事件主体是被拖放元素,在开始拖放被拖放元素时触发。 darg:事件主体是被拖放元素,在正在拖放被拖放元素时触发。 dragenter:事件主体是目标元素,在被拖放元素进入某元素时触发。 dragover:事件主体是目标元素,在被拖放在某元素内移动时触

    2024年02月16日
    浏览(52)
  • HTML插入视频和音频(详解)

      HTML5未出来之前,在线的音频和视频都是借助Flash或者第三方工具实现的,现在HTML5也支持了这方面的功能。在一个支持HTML5的浏览器中,不需要安装任何插件就能播放音频和视频。原生的支持音频和视频,为HTML5注入了巨大的发展潜力。   html实现音频嵌入(传统方式):

    2024年02月04日
    浏览(33)
  • HTML中如何设置音频和视频?

    HTML 元素用于在文档中嵌入音频内容。 元素可以包含一个或多个音频资源, 这些音频资源可以使用 src 属性或者 元素来进行描述:浏览器将会选择最合适的一个来使用。也可以使用 MediaStream 将这个元素用于流式媒体。 示例代码: 音频属性: 属性 值 描述 autoplay autoplay 如果

    2024年02月04日
    浏览(46)
  • 在HTML中插入音频和视频(详解)

    Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍在HTML中插入音频和视频以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言 目录 一、音频标签:audio 1、简介 2、使用 二、视频标签:video 1、

    2024年02月05日
    浏览(41)
  • 在HTML中如何设置音频和视频?

    ✨前言✨   本篇文章主要在了解,并如何使用HTML中的 video 视频标签和 audio 音频标签 🍒欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍒博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言   HTML5未出来之前,在线的音频和视频都是借助Flash或者第三

    2024年02月03日
    浏览(43)
  • Advance:HTML 中的视频标签和音频标签

    在本文中,我们将了解 HTML5 的视频和音频标签。video 标记用于在文档中嵌入视频内容,例如影片剪辑或其他视频流。audio 标记用于在文档中嵌入声音内容,例如音乐或其他音频流。 HTML5 为您提供了两个标签 - video 和 audio。我们将在本文中学到很多关于这两个的信息,因此

    2024年02月19日
    浏览(38)
  • [前端笔记——多媒体与嵌入] 6.HTML 中的图片+视频+音频内容

    可以用 img 元素来把图片放到网页上。它是一个空元素(它不需要包含文本内容或闭合标签),最少只需要一个 src (一般读作其全称 * *source) * *来使其生效。src 属性包含了指向我们想要引入的图片的路径,可以是相对路径或绝对 URL,就像 a 元素的 href 属性一样。 属性是

    2023年04月25日
    浏览(54)
  • 【HTML 往日冒险 09】多媒体 插件 音频audio 视频video iframe YouTube iframe bilibili

    HTML 多媒体 Web 上的多媒体指的是音效、音乐、视频和动画 不同的浏览器以不同的方式处理音效、动画和视频 某些元素能够以内联的方式处理,而某些则需要额外的插件 多媒体元素(比如视频和音频)存储于媒体文件中 确定媒体类型的最常用的方法是查看文件扩展名 多媒体

    2024年02月07日
    浏览(44)
  • 利用第三方解码器ffmpeg让群晖DSM6.2.4版本的Video Station支持DTS视频编码和EAC3音频编码

    截至2022年5月6日,此方法可用! 本文章可以解决群晖版本6.2.4-25556 Update5(Video Station版本2.5.0-1656)在播放dts、eac3音频编码的视频时提示不支持的问题。 对于群晖6.2.3版本,Video Station版本2.4.9,网上随便搜的方法都可以使用,但是用在6.2.4未必可行。原因在于Video Station版本2

    2023年04月08日
    浏览(41)
  • HTML5新增的拖拽属性draggable,怎么实现拖拽?

    1、draggable 属性规定元素是否可拖动。 2、提示: 链接和图像默认是可拖动的。 3、提示: draggable 属性经常用于拖放操作。 注意:draggable 属性是 HTML5 新增的。 设置属性值 值 描述 true 规定元素是可拖动的。 false 规定元素是不可拖动的。 auto 使用浏览器的默认特性。 代码演

    2024年02月16日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包