原生js:click和onclick本质的区别

本文详细介绍了JavaScript中的click方法和onclick事件的区别及用法,并通过示例展示了如何在HTML中使用这两种方式来响应用户的点击操作。

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

原生javascript的click在w3c里边的阐述是DOM button对象,也是html DOM click() 方法,可模拟在按钮上的一次鼠标单击。

button 对象代表 HTML 文档中的一个按钮。button元素没有默认的行为,但是必须有一个 onclick 事件句柄以便使用。

语法:buttonObject.click()

<html>
<head>
<script type="text/javascript">
function clickButton()
  {
  document.getElementById('button1').click()
  }
function alertMsg()
  {
  alert("Button 1 was clicked!")
  }
</script>
</head>
<body onload="clickButton()">

<form>
<input type="button" id="button1" onclick="alertMsg()" value="Button 1" />
</form>

</body>
</html>

 

onclick是一个事件Event对象 。支持该事件的 JavaScript 对象:button, document, checkbox, link, radio, reset, submit

HTML DOM Event 对象,代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。事件通常与函数结合使用,函数不会在事件发生前被执行!

<html>
<body>
    Field1: <input type="text" id="field1" value="Hello World!"><br />
    Field2: <input type="text" id="field2"> <br />
    点击下面的按钮,把 Field1 的内容拷贝到 Field2 中: <br />
    <button onclick="document.getElementById('field2').value=document.getElementById('field1').value">Copy Text</button>
</body>
</html>    

 

区别

前面说了click是一个方法,onclick是一个事件。

而最根本的问题是,方法和事件的区别是什么呢?

其区别在于:

  1.事件名前一般都以on开头;

  2.方法是程序员写语句直接调用,即显示调用;【可以触发onclick事件

  3.事件不需程序员调用,但是,必须由程序员写一个函数且将该函数赋值给相应的事件,其调用是在相应的事件触发时。【告诉浏览器在鼠标点击时候要做什么

所以调用顺序是:首先方法其次事件。

 可以扩展学习和参考的文章:

2.$(“”).click与onclick的区别示例介绍
地址:http://www.jb51.net/article/55650.htm

3.从零开始学习jQuery (五) jquery事件与事件对象
地址:http://www.jb51.net/article/26331.htm

4.jquery动态移除/增加onclick属性详解
地址:http://www.php100.com/html/program/jquery/2013/0905/5964.html

Event 对象

转载本人博文时请注明出处和原文地址!!!

转载于:https://www.cnblogs.com/web1/p/6555662.html

<think>我们被要求使用Video.js删除视频的原生音轨。注意,Video.js本身并没有直接提供删除音轨的方法,但我们可以通过操作音轨列表或使用其他技巧来实现类似效果。根据引用[1][2],我们知道Video.js通过`videojs-contrib-hls`插件支持HLS流,并且可以管理音轨。同时,引用[4]提到了使用`audioTrackList`来监听音轨的添加移除事件。然而,删除原生音轨通常不是直接的操作,因为音轨是媒体资源的一部分。但是,我们可以尝试以下两种方法:方法一:禁用所有音轨(静音)-将播放器的音量设置为0,但这只是静音,并没有真正移除音轨。方法二:通过音轨API禁用原生音轨并启用其他音轨(如果有的话)-如果视频有多个音轨,我们可以禁用原生的音轨(通常就是默认音轨)并启用另一个音轨,这样用户就听不到原生音轨了。但是,如果视频只有一个音轨(即原生音轨),那么禁用它将导致没有声音。我们可以通过添加一个无声的音轨来覆盖,然后切换到无声音轨,从而实现“删除”原生音轨的效果。具体步骤:1.添加一个无声的音轨(如果不存在多个音轨的情况下)2.切换到无声的音轨然而,Video.js的AudioTrackAPI主要是用于选择不同的音轨,并不能直接删除一个音轨。而且,音轨信息来自视频源(如HLS的m3u8文件),如果源文件中没有提供多个音轨,我们就需要自己构造一个无声的音轨。但是,请注意,在HLS流中,如果清单中没有提供多个音轨,我们就无法直接添加一个新的音轨。因此,这种方法可能并不总是可行。替代方案:使用WebAudioAPI来断开音频输出-我们可以尝试使用WebAudioAPI将视频元素的音频输出静音。但是,这需要浏览器支持WebAudioAPI,并且可能会遇到安全限制。考虑到以上情况,我们给出一个使用Video.js的AudioTrackAPI的方案(前提是我们可以修改视频源,提供多个音轨,包括一个无声的音轨)以及一个使用WebAudioAPI的方案。方案一:使用Video.js的AudioTrackAPI(需要预先有无声音轨)步骤:1.确保视频源包含一个无声的音轨(例如,在HLS清单中声明了一个无声的音轨)。2.使用Video.js的API切换到无声的音轨。示例代码:```javascriptconstplayer=videojs('my-video');//假设我们有一个无声的音轨,其language为'mute'functiondisableNativeAudio(){consttracks=player.audioTracks();for(leti=0;i<tracks.length;i++){consttrack=tracks[i];if(track.language==='mute'){track.enabled=true;}else{track.enabled=false;}}}//调用函数切换disableNativeAudio();```方案二:使用WebAudioAPI(无需修改视频源,但需要浏览器支持)步骤:1.创建一个AudioContext。2.将视频元素的音频输出连接到AudioContext。3.然后断开连接,或者将音量设置为0。示例代码:```javascriptconstplayer=videojs('my-video');constvideoElement=player.el().querySelector('video');//创建AudioContextconstaudioCtx=new(window.AudioContext||window.webkitAudioContext)();constsource=audioCtx.createMediaElementSource(videoElement);//创建一个增益节点,将增益设置为0(静音)constgainNode=audioCtx.createGain();gainNode.gain.value=0;//连接:视频元素->增益节点(静音)->音频上下文目标(扬声器)source.connect(gainNode);gainNode.connect(audioCtx.destination);//注意:现在视频的音频被静音了,但视频元素本身的音频输出还在,为了避免重复,我们需要将视频元素的音频输出断开(实际上,当我们将视频元素连接到WebAudio时,视频元素本身的音频输出就会被断开,所以不需要额外操作)```但是,方案二有一个问题:浏览器自动播放策略。因为WebAudioAPI需要用户交互才能启动,所以最好在用户交互后(比如点击按钮)再执行上述代码。另外,引用[2]提到,Video.js一次只能启用一个同类型的轨道,所以如果我们添加了一个无声的音轨并切换到它,那么原生音轨就会被禁用。总结:-如果我们能够控制视频源(如HLS的m3u8文件),那么添加一个无声的音轨并切换到它是最佳方案。-如果不能,我们可以尝试使用WebAudioAPI来静音,但要注意自动播放策略。注意:直接删除原生音轨是不可能的,因为它是视频文件的一部分。我们只能通过禁用或覆盖来达到“删除”的效果。根据引用[1]提供的示例,我们也可以考虑在初始化播放器时,通过`videojs-contrib-hls`插件来指定使用无声的音轨(如果存在的话)。最后,如果视频本身只有一个音轨,而我们无法修改视频源,那么只能采用WebAudioAPI的方案,或者简单的将播放器静音(player.volume(0)),但这并不能真正移除音轨,只是听不到声音。因此,具体方法取决于实际需求。相关问题:1.如何在Video.js中添加无声的音轨?2.使用WebAudioAPI处理Video.js播放器音频时需要注意什么?3.如何通过修改HLS清单来添加无声的音轨?</think>### 如何用 Video.js 删除视频原生音轨 要删除视频的原生音轨,本质是通过禁用原生音轨并替换为静音轨道来实现。以下是两种实现方案: --- #### 方案一:使用静音轨道替换(推荐) ```javascript // 初始化播放器 const player = videojs('my-video'); // 创建静音轨道 const muteTrack = new videojs.AudioTrack({ id: 'mute-track', kind: 'main', label: '静音', language: 'mute', enabled: false // 初始不启用 }); // 添加静音轨道 player.audioTracks().addTrack(muteTrack); // 禁用所有原生音轨 function disableNativeAudio() { player.audioTracks().tracks_.forEach(track => { // 禁用非静音轨道(原生音轨) if (track.language !== 'mute') { track.enabled = false; } }); // 启用静音轨道 muteTrack.enabled = true; } // 调用函数删除原生音轨 disableNativeAudio(); ``` --- #### 方案二:通过 Web Audio API 实现静音 ```javascript const player = videojs('my-video'); const videoEl = player.el().querySelector('video'); // 创建音频上下文 const audioCtx = new (window.AudioContext || window.webkitAudioContext)(); const source = audioCtx.createMediaElementSource(videoEl); // 创建增益节点(用于静音) const gainNode = audioCtx.createGain(); gainNode.gain.value = 0; // 设置为0实现静音 // 连接节点 source.connect(gainNode); gainNode.connect(audioCtx.destination); // 注意:需在用户交互后启用(如按钮点击) document.getElementById('mute-btn').addEventListener('click', () => { audioCtx.resume(); // 解决浏览器自动播放限制 disableNativeAudio(); // 可结合方案一的轨道禁用 }); ``` --- #### 关键原理说明 1. **轨道替换原理**: - 原生音轨无法直接删除[^2] - 通过添加静音轨道并禁用其他轨道实现"删除"效果 - 符合音轨选择互斥原则(一次只能启用一个主音轨)[^2] 2. **HLS 支持要求**: ```m3u8 #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Silent", LANGUAGE="mute",URI="silent.m3u8" ``` 需在HLS清单中包含静音轨道声明[^1] 3. **浏览器兼容性**: | 方案 | 兼容性 | 特点 | |---------------|---------------------|-------------------------| | 静音轨道 | 所有支持HLS的浏览器 | 需服务端支持 | | Web Audio API | 现代浏览器 | 纯前端实现,无需修改片源 | --- #### 实际应用示例 ```html <video id="my-video" class="video-js" controls> <source src="video.m3u8" type="application/x-mpegURL"> </video> <button onclick="disableNativeAudio()">删除原生音轨</button> <script> // 初始化播放器 const player = videojs('my-video'); // 删除音轨函数 function disableNativeAudio() { // 方案一实现代码 // 或方案二实现代码 } </script> ``` > **注意**:删除原生音轨后如需恢复,可重新启用原轨道: > ```javascript > function restoreAudio() { > player.audioTracks().tracks_[0].enabled = true; > muteTrack.enabled = false; > } > ``` [^1]: [^2]: --- ### 相关问题 1. 如何在 HLS 视频流中添加静音轨道? 2. Video.js 禁用音轨后如何恢复原始音频? 3. Web Audio API 与 Video.js 音轨控制有哪些兼容性问题? 4. 如何检测 Video.js 当前激活的音轨状态?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值