如何动态改变audio的播放的src

如何动态改变audio的播放的src

一、总结

一句话总结:js方式在请求外部网站的时候行,php方式在请求内外部资源都行。因为php走在js前面,所以问题可以从php方面想办法。

 

1、如何使用js控制修改audio的src或它的source 的src属性实现动态改变audio放的音频

a、只有修改audio 的src值,才可以播放
修改source 的 src值却不可以播放

b、在更改src后要加上load();函数(这是js下的函数,不是jquery的那个load())

17 <script>
18     function addDynamicNameAttr_audio(nameAttrValue) { 19  console.log(nameAttrValue); 20  $(function () { 21  $('#fry_audio').attr('src',nameAttrValue); 22 var fry_audio=$('#fry_audio').get('0'); 23  fry_audio.load(); 24  }); 25 26  } 27 </script>

 

这种方法在请求外部网站的时候行

 

2、php方式实现动态改变audio的播放的src?

就是请求参数的不同动态的决定把哪个路径的地址赋值给audio的src

 1 <?php
 2     if(!isset($fry_audio_type)) $fry_audio_type=null;  3 $fry_audio_src="__STUDENT__/AudioPlayer/AudioPlayer/audio/BlueDucks_FourFlossFiveSix.mp3";  4 if($fry_audio_type=="article.a_content_aud1"){  5 $fry_audio_src=$article['a_content_aud1'];  6  }  7 ?>
18     <audio preload="auto" id="fry_audio" controls>
19         <source src="{$fry_audio_src}">
20     </audio>

请求的时候就是好好设置这个$fry_audio_type值就行了

 

 

二、如何动态改变audio的播放的src

1、js方式

这是在thinkphp5.0中,我把audio封装成整体,便于在系统中多次调用

audio插件整体:
 1 <link rel="stylesheet" href="__STUDENT__/AudioPlayer/AudioPlayer/css/audioplayer.css" />
 2 <script src="__STUDENT__/AudioPlayer/AudioPlayer/js/audioplayer.js"></script>
 3 <script>
 4     /*
 5         VIEWPORT BUG FIX
 6         iOS viewport scaling bug fix, by @mathias, @cheeaun and @jdalton
 7     */
 8     (function(doc){var addEvent='addEventListener',type='gesturestart',qsa='querySelectorAll',scales=[1,1],meta=qsa in doc?doc[qsa]('meta[name=viewport]'):[];function fix(){meta.content='width=device-width,minimum-scale='+scales[0]+',maximum-scale='+scales[1];doc.removeEventListener(type,fix,true);}if((meta=meta[meta.length-1])&&addEvent in doc){fix();scales=[.25,1.6];doc[addEvent](type,fix,true);}}(document));
 9 </script>
10 <div id="wrapper">
11     <audio preload="auto" id="fry_audio" controls>
12         <source src="__STUDENT__/AudioPlayer/AudioPlayer/audio/BlueDucks_FourFlossFiveSix.mp3">
13     </audio>
14     <script>$( function() { $( 'audio' ).audioPlayer(); } );</script>
15 </div>
16 
17 <script>
18     function addDynamicNameAttr_audio(nameAttrValue) {
19         console.log(nameAttrValue);
20         $(function () {
21             $('#fry_audio').attr('src',nameAttrValue);
22             var fry_audio=$('#fry_audio').get('0');
23             fry_audio.load();
24         });
25 
26     }
27 </script>

这里 要执行load()函数,不然没效果

 

外部调用:
 1 <div width="100%" >
 2     <!-- 引入音频播放app -->
 3     {include file="app/audio" /}
 4     <!--End 引入音频播放app -->
 5     <script>
 6         console.log('11111111111');
 7         // addDynamicNameAttr_audio("{$article.a_content_aud1}");
 8         addDynamicNameAttr_audio("http://yun.it7090.com/video/XHLaunchAd/video01.mp4");
 9     </script>
10 </div>

 

现在执行第8行,调用外部资源,这样是成功的

 

但是当我调用系统内部资源的时候,就是执行上面第7句时,就会遇到

也就是我的系统不允许这样直接请求资源

这是因为这样做的话资源不是php发给我们的,而变成了js请求的资源一样,自然不行。(说的有点牵强,大概就是这个意思)

 

2、php方式(最开始就动态指定audio的src)

上面的js操作不能解决问题,所以我们就从php出发,因为php运行在js的前面,如果php那个时候解决了audio的src,那么就不用js再来请求资源了,也就不会遇到上面的问题

audio插件整体:
 1 <?php
 2     if(!isset($fry_audio_type)) $fry_audio_type=null;
 3     $fry_audio_src="__STUDENT__/AudioPlayer/AudioPlayer/audio/BlueDucks_FourFlossFiveSix.mp3";
 4     if($fry_audio_type=="article.a_content_aud1"){
 5         $fry_audio_src=$article['a_content_aud1'];
 6     }
 7 ?>
 8 <link rel="stylesheet" href="__STUDENT__/AudioPlayer/AudioPlayer/css/audioplayer.css" />
 9 <script src="__STUDENT__/AudioPlayer/AudioPlayer/js/audioplayer.js"></script>
10 <script>
11     /*
12         VIEWPORT BUG FIX
13         iOS viewport scaling bug fix, by @mathias, @cheeaun and @jdalton
14     */
15     (function(doc){var addEvent='addEventListener',type='gesturestart',qsa='querySelectorAll',scales=[1,1],meta=qsa in doc?doc[qsa]('meta[name=viewport]'):[];function fix(){meta.content='width=device-width,minimum-scale='+scales[0]+',maximum-scale='+scales[1];doc.removeEventListener(type,fix,true);}if((meta=meta[meta.length-1])&&addEvent in doc){fix();scales=[.25,1.6];doc[addEvent](type,fix,true);}}(document));
16 </script>
17 <div id="wrapper">
18     <audio preload="auto" id="fry_audio" controls>
19         <source src="{$fry_audio_src}">
20     </audio>
21     <script>$( function() { $( 'audio' ).audioPlayer(); } );</script>
22 </div>

 

外部调用:
 1 <!--3、音频部分-->
 2 {if condition="strlen($article['a_content_aud1'])>0"}
 3 <div width="100%" >
 4     <?php $fry_audio_type="article.a_content_aud1";?>
 5     <!-- 引入音频播放app -->
 6     {include file="app/audio" /}
 7     <!--End 引入音频播放app -->
 8 </div>
 9 {/if}
10 <div width="100%" >
11     <?php $fry_audio_type=null;?>
12     <!-- 引入音频播放app -->
13     {include file="app/audio" /}
14     <!--End 引入音频播放app -->
15 </div>

上面的代码是两次掉用,这样可以通过不同的调用赋给audio不同的src

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Renyi-Fan/p/9555996.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 水平拆分实例_2021先定个小目标?搞清楚MyCat分片的两种拆分方法和分片规则!(二):水平拆分实例解析和代码实现!...

一、概述根据表中的数据的逻辑关系&#xff0c;将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面&#xff0c;这种切分称之为数据的水平(横向)切分。二、案例场景在业务系统中, 有一张表(日志表), 业务系统每天都会产生大量的日志数据 , 单台服务器的数据存储及处理能…

30分钟快速搭建移动应用直传OSS服务

30分钟快速搭建移动应用直传服务 背景 这是一个移动互联的时代。手机APP上传的数据会越来越多。把数据存储的问题交给OSS&#xff0c; 让开发者能更加专注于自己的应用逻辑。 那么怎么样基于OSS构建一个APP存储系统呢&#xff1f; 目的 本教程就是让你在30分钟内搭建一个基于OS…

用java判断一个年份是否为闰年_判断闰年还是平年

↑↑↑点击上方图片&#xff0c;了解详情正文&#xff1a;判断一个年份是闰年还是平年。闰年条件&#xff1a;1.可以被400整除。2.可以被4整除&#xff0c;但是不可以被100整除。代码&#xff1a;Private Sub 查询_Click() If Me.年份 Mod 4 0 And Me.年份 Mod 100 <> 0…

【JavaScript吉光片羽】--- 滑动条

灯光的亮度控制需要一个滑动条&#xff0c;先借用lamp源码中Bar&#xff1a; var Bar function (opt) {var defaults {$id: "", // 进度条dom节点idmin: 1, // 刻度最小值stepCount: 5, // 刻度步数step: 1, // 刻度步长$alpha: "",//显示亮度的idtouchE…

python语言用什么关键字来声明一个类_python使用什么关键字定义类

什么是类&#xff1f; 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 什么是方法&#xff1f; 类中的函数即为方法 如何定义一个类&#xff1f; 定义类&#xff0c;语法格式如下&#xff1a;class ClassName:. . .…

谷歌+安卓,他已经改变了世界两次,但还想多来几次

回望拉里佩奇的创业经历&#xff0c;小巴发现他在几个创业者最有可能犯&#xff08;si&#xff09;错&#xff08;bi&#xff09;的节点上都处理得很好。 你还记得你用的第一个搜索网站是什么吗&#xff1f; Google.com 讲到它的创始人&#xff0c;一般要连起来念&#xff0c; …

一张图看懂单机/集群/热备/磁盘阵列(RAID)

单机部署(Standalone) 只有一个饮水机提供服务器&#xff0c;服务只部署一份 集群部署(Cluster) 多个饮水机同时提供服务&#xff0c;服务冗余部署&#xff0c;每个冗余的服务都对外提供服务&#xff0c;一个服务挂掉时依然可用 热备部署(Hot-swap) 只有一个桶提供服务&#xf…

typescript vuex_Vue3+TypeScript完整项目上手教程

作者&#xff1a;TinssonTaihttps://juejin.im/post/6875713523968802829一个完整的Vue3Ts项目,支持.vue和.tsx写法 项目地址&#xff1a;https://github.com/vincentzyc/vue3-demo.gitTypeScript 是JS的一个超集&#xff0c;主要提供了类型系统和对ES6的支持&#xff0c;使用 …

一些会用到的知识

为什么80%的码农都做不了架构师&#xff1f;>>> HtmlAgilityPack 用来解析HTML代码 microsoft.mshtml CsQuery 解析HTML代码 转载于:https://my.oschina.net/uwith/blog/813725

python图像对比_用python实现对比两张图片的不同

from PIL import Image from PIL import ImageChops def compare_images(path_one, path_two, diff_save_location): """ 比较图片&#xff0c;如果有不同则生成展示不同的图片 参数一: path_one: 第一张图片的路径 参数二: path_two: 第二张图片的路径 参数三:…

Kafka 分布式环境搭建

这篇文章将介绍如何搭建kafka环境&#xff0c;我们会从单机版开始&#xff0c;然后逐渐往分布式扩展。单机版的搭建官网上就有&#xff0c;比较容易实现&#xff0c;这里我就简单介绍下即可&#xff0c;而分布式的搭建官网却没有描述&#xff0c;我们最终的目的还是用分布式来解…

Docker Machine搭建并加入节点

对于集群服务器来讲&#xff0c;要在每台机器上手动安装Docker是一件及其痛苦的事情&#xff0c;还好有Docker Machine这一工具&#xff0c;Docker三剑客中的一角. 一、Docker Machine介绍 这个工具已经出了比较久了&#xff0c;Docker Machine官方介绍&#xff1a;https://doc…

python类中没有属性_如何在python语言中在类中删除属性和添加属性

在python语言中的类&#xff0c;可以使用class定义类&#xff0c;调用__init__方法进行初始化&#xff1b;默认传入self&#xff0c;可以在后面在添加几个属性。可以使用setattr()添加属性&#xff0c;也可以使用delattr()删除属性。下面利用几个实例说明这两个方法的用法&…

动态编译

下面的demo就涵盖了动态编译和运行类的过程 package 动态编译; import java.lang.reflect.Method;import java.net.URL;import java.net.URLClassLoader; import javax.tools.JavaCompiler;import javax.tools.ToolProvider; public class Demo { public static void main(Stri…

python怎么打开spyder_Python开发环境Spyder安装方法

Spyder(Scientific PYthon Development EnviRonment)是一个强大的交互式 Python 语言开发环境&#xff0c;提供高级的代码编辑、交互测试、调试等特性&#xff0c;支持包括 Windows、Linux 和 OS X 系统。 本文在只安装过python2.7的Win7环境下进行安装Spyder&#xff0c;其他环…

矩阵、向量求导法则

复杂矩阵问题求导方法&#xff1a;可以从小到大&#xff0c;从scalar到vector再到matrix。 x is a column vector, A is a matrix practice: 转载于:https://www.cnblogs.com/vincentQin/p/5406010.html

vue antd admin怎么切换到basic分支_vue菜鸟从业记:前端如何与后端哥们进行接口联调...

最近我的朋友王小闰进入一家新的公司&#xff0c;正好公司项目采用的是前后端分离架构&#xff0c;技术栈是王小闰非常熟悉的vue全家桶&#xff0c;后端用的是Java语言。在前后端开发人员碰面之后&#xff0c;协商确定好了前端需要的数据接口(扯那么多&#xff0c;其实也就是关…

大数据高效复制的处理案例分析总结

一个老客户提出这样的需求&#xff0c;希望将SQLServer中的某个表的数据快速复制到SQLite数据库里面以便进行定期的备份处理&#xff0c;数据表的记录大概有50多万条记录&#xff0c;表有100个字段左右&#xff0c;除了希望能够快速做好外&#xff0c;效率是第一位的&#xff0…

@autowired注解注入为null_Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案

相信使用Mybaits的小伙伴们一定会经常编写类似如下的代码&#xff1a;可以看到 userMapper 下有个红色警告。虽然代码本身并没有问题&#xff0c;能正常运行&#xff0c;但有个警告总归有点恶心。本文分析原因&#xff0c;并列出解决该警告的几种方案。原因众所周知&#xff0c…

五 Python之socket网络编程

<1>socket概念 socket通常也称作"套接字"&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄&#xff0c;应用程序通常通过"套接字"向网络发出请求或者应答网络请求。ocket本质上就是在2台网络互通的电脑之间&#xff0c;架设一个通道…