几年前,看到一台湾人写的一段程序(好像是《日语基础》),在网页上实现音视频与文字的同步播放(就是音视频播到哪部分,相应的文字就亮显,点击某一句话,播放器将从这句话开始播放。)当时觉得这个很适合语言教学。于是就查看了代码,写了很多函数,有些代码还加了密。几百行代码看了人发晕。最近本人试着写了一段代码,实现同样的功能,代码很简洁,主要功能是实现在浏览器上实现复读机的功能(缺少录音功能)。

我采用网上的《英语900句》的语音和文字,共两个页面,一个页面实现传递脚本参数到第二个页面;第二个页面实现语音与文字同步。主要技术采用Dhtml。全部采用客户端脚本。

演示地址:http://www.whtvu.com.cn/english900

设计思路:

(一) 动态加载文字和声音

将文字放在一个外部js里。代码如下:

http://www.gaodaima.com/?p=28180

var e_array = new Array("Hello! Hi!", "Good morning afternoon evening!", "I'm Kathy King. ",

………..);

var h_array=new Array("你好!",

"早晨(下午 晚上)好!",

"我是凯西•金。",

…..);

var t_array = new Array(7,10,16,19…….);

var l=e_array.length;

var title="Greetings";

var h_title="问候语"

ready = true;

分析:e_array为英语句子;h_array为中文意思;t_array为每句开头的时间;title为这段对话的标题(英文);h_title为为这段对话的标题(中文)。ready = true为每一个外部JS里都有的,主要是为了检测外部JS是否下载到客户端(后面有介绍)。

(二) 让播放器动态播放不同的声音(后有介绍)

(三) 播放器播到不同的位置,相应的文字以某一颜色显示(要随时检测播放器的位置。后有介绍)

(四) 改变播放器的播放速度(后有介绍)

制作步骤:

我们知道,要动态加载客户端脚本,必须保证该脚本下载到客户端,否则,无法运行。而且网页里的变量只在本页面有效,如何传递变量?请看如下代码:

一、Index.htm里的链接传递参数:

NO2

分析:

location.href是浏览器里的链接参数;

main.htm是要链接的页面地址;

id=WAV/1-2.wav&x=JS/1-2.js是要传递的参数。(2.wav是这个链接要播放的声音文件;1-2.js是要传递的外部动态脚本。)

二、main.htm页面分析

1.动态加载脚本代码:

//这个你能看懂

2.将动态加载的脚本下载到客户机代码:

var timeid = null;

ready = false;

js.src = location.href.split("=")[2]; //用 split函数将Index.htm页面传递过来的参数里的*.js分离出来

loadscr();

function loadscr() { //定时器函数,装载 *.js。(忘记介绍*.js里最后一句是ready = true)。

if (ready) { //如果检测到ready = true,则表明*.js装载完毕,停止执行loadscr()

clearTimeout(timeid);

timeid = setTimeout("loadscr();", 100);

}

}

3.让播放器根据index.htm传递过来的不同的参数播放不同的声音:

A.分离出声音参数代码:(MP为播放器的ID)

MP.Filename=location.href.split("=")[1]

MP.Filename=MP.Filename.split("&")[0]

if(MP.Filename=="")

alert("缺必要的参数/n或者媒体播放器应为9.0")

B.实现变速播放代码:

正常

慢速一

慢速二

快速一

快速二

C.动态加载文字代码:

for(i=0;i

{document.write('

'+(i+1)+'.'+e_array+'')}

e_array为第i句文字

函数sub_loop('+i+')如下:

function sub_loop(m)

{

MP.CurrentPosition= t_array[m];

} // 将播放器的播放头移到相应的位置

函数toolTip(h_array['+i+']的功能是鼠标在某句上显示该句的中文意思。代码如下:

//显示中文

var ns4 = document.layers;

var ns6 = document.getElementById && !document.all;

var ie4 = document.all;

offsetX = 0;

offsetY = 20;

var toolTipSTYLE="";

function initToolTips()

{

if(ns4||ns6||ie4)

{

if(ns4) toolTipSTYLE = document.toolTipLayer;

else if(ns6) toolTipSTYLE = document.getElementById("toolTipLayer").style;

else if(ie4) toolTipSTYLE = document.all.toolTipLayer.style;

if(ns4) document.captureEvents(Event.MOUSEMOVE);

else

{

toolTipSTYLE.visibility = "visible";

toolTipSTYLE.display = "none";

}

document.onmousemove = moveToMouseLoc;

}

}

function toolTip(msg, fg, bg)

{

if(toolTip.arguments.length < 1) // hide

{

if(ns4) toolTipSTYLE.visibility = "hidden";

else toolTipSTYLE.display = "none";

}

else // show

{

if(!fg) fg = "#0000ff";

if(!bg) bg = "#FFFFFF";

var content =

'

'

&nbsp/;' + msg +

'&nbsp/;

';

if(ns4)

{

toolTipSTYLE.document.write(content);

toolTipSTYLE.document.close();

toolTipSTYLE.visibility = "visible";

}

if(ns6)

{

document.getElementById("toolTipLayer").innerHTML = content;

toolTipSTYLE.display='block'

}

if(ie4)

{

document.all("toolTipLayer").innerHTML=content;

toolTipSTYLE.display='block'

}

}

}

function moveToMouseLoc(e)

{

if(ns4||ns6)

{

x = e.pageX;

y = e.pageY;

}

else

{

x = event.x + document.body.scrollLeft;

y = event.y + document.body.scrollTop;

}

toolTipSTYLE.left = x + offsetX;

toolTipSTYLE.top = y + offsetY;

return true;

}

如上的代码在Dreamweaver的代码片断上能找到。

D.文字亮显代码:

function check(){

C_T=MP.currentPosition;

for(var n=0;n

{if((C_T>=t_array[n])&& (C_T

{eval("e_"+n).style.color="red";

eval("h"+n).style.color="red";}

else {eval("e_"+n).style.color="black"

eval("h"+n).style.color="black";

}}}

}

setInterval("check()",500)

分析:随时检测播放器的当前位置(时间)。如果播放器的当前位置在某一时间内,就将相应的文字显示为红色,否则该文字为黑色。当然,还有其他的效果,你去思考吧。

欢迎大家阅读《JS让浏览器实现复读机的功能_js》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码

原创文章,转载请注明: 转载自搞代码

微信 赏一包辣条吧~

支付宝 赏一听可乐吧~

复读机java群管脚本_JS让浏览器实现复读机的功能_js相关推荐

  1. 我的世界1.14刷雪机java版_我的世界全自动刷雪机图文攻略

    我的世界刷雪机如何做?我的世界自动式刷雪机作法是啥?我觉得针对诸位刚入我的世界的小伙伴们而言一些艰难,接下去人们一起去看看我的世界自动式刷雪机作法吧. [必须的原材料准备充分] 红橡木室内楼梯.冬瓜. ...

  2. 我的世界刷铁机java版_我的世界:刷铁机其实很容易制作,但是有一个特殊的限制条件!...

    文/超级游戏演说家 大家好,我是超级游戏演说家,一个美貌与智慧并存的男子.前世的千百次轮回,才换得今生的一次相遇.为了让小伙伴们更好地了解游戏中的内容,希望大家能动动小手关注一下. 本期内容 往期的内 ...

  3. 我的世界1.14刷雪机java版_我的世界全自动刷雪机图文攻略 手把手教你刷雪机怎么做...

    :原标题: 我的世界刷雪机怎么做?我的世界全自动刷雪机做法是什么?想必对于各位初入我的世界的小伙伴来说有些困难,接下来我们一起来看看我的世界全自动刷雪机做法吧. [需要的材料提前准备] 橡木楼梯.南瓜 ...

  4. python实现浏览器ctrl+f页面搜索功能_JS 页面内容搜索,类似于 Ctrl+F功能的实现代码...

    JS 页面内容搜索,类似于 Ctrl+F功能的实现代码 更新时间:2007年08月13日 19:58:11   作者: WinWebMail 帮  助 查看:[大字 中字 小字] 登录系统时的增强安全 ...

  5. hadoop--hadoop集群常用脚本

    集群启动/停止方式总结 各个模块分开启动/停止(前提配置ssh)常用 1). 整体启动/停止HDFS: start-dfs.sh/stop-dfs.sh 2).整体启动/停止YARN: start-y ...

  6. java使用monkeyrunner_MonkeyRunner 实践----用 java 来编写脚本

    前言 之前在论坛看到有同行在用 MonkeyRunner 测试一些 Android 的操作, 使用的是 Python 写的脚本, 就设想应该也是可以用 java 来写脚本的, 毕竟本身 MonkeyR ...

  7. linux(CentOS7)下实现集群主机分类免密登录脚本--类跳板机

    背景 在某些项目出于安全考虑,系统管理员或者甲方在提供批量主机服务器的登录后需要及时替换密码等情况,繁琐且费时费力.这种情况下我们完全可以使用一台服务器为跳板机,跟集群内做免密认证,这样管理员只需要每 ...

  8. linux集群自动化脚本和增量复制

    linux集群自动化脚本和增量复制 Linux集群shell自动化脚本和集群增量增量复制 xcall.sh代码: xcall.sh脚本解释: xsync.sh代码: xsync.sh脚本解释: 自定义 ...

  9. Java操作linux脚本

    近期在实现Java调用linux命令及脚本实现数据的批处理,文件的生成,下面记录下我所有遇见的问题 1.sqlplus ip等配置 1.sqlplus username/password 连接本机数据 ...

最新文章

  1. etcd 笔记(07)— 键值对读写操作过程
  2. 排序--直接插入排序
  3. OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并
  4. mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 public: __cdecl about::about(class QWidget *) (??0abo
  5. FFmpeg再学习 -- 视音频基础知识
  6. 使用LVS实现负载均衡原理及安装配置详解
  7. CentOS搭建Sqoop环境
  8. iphone手机备忘录迁移_如何在iPhone和iPad上使用语音备忘录
  9. 利用老毛头启动盘重装win7
  10. 系统云服务器,系统云服务器
  11. android log 如何获取double类型后小数点的值_【ES6基础】Symbol介绍:独一无二的值...
  12. 下划线间隔数字 排序_面试必备:经典算法动画解析之希尔排序
  13. linux中对数据怎么降序,Linux系统sort排序命令怎么使用
  14. 个人认为,载人登陆火星技术上无法实现
  15. 调试ffmpeg源码配置config参数(包管用)
  16. Java排序算法代码集(7个)
  17. 病毒手动查杀(威金 q盗 熊猫烧香)
  18. 小程序切出去重新进入
  19. .Net 发送邮件
  20. 亭子早期博客中16进制颜色值地址

热门文章

  1. Java多线程编程(3)
  2. Java EE入门教程系列第一章Java EE的概述(一)——初识Java EE
  3. DCC_2012_Sihong Su . Xiaohu Tang rotation symmetric boolean functions
  4. Tensorflow中的tf.argmax()函数
  5. ipad服务器未响应怎么办,ipad pro死机怎么办?ipad pro无反应解决方法
  6. COGS 2057. [ZLXOI2015]殉国
  7. 第一个Spring应用程序 - Hello World
  8. 2018总结以及2019展望
  9. 有源代码就可以自行开发通达信交易接口了吗?
  10. SVN提交成功,但是版本库里面的内容没有更新--解决方案