最近买了一台16G的Ipad2 想用Ipad看视频但又舍不得把内存都浪费在视频上, 想起一方法,利用自身的优势做一个网页来同步Webapps下的目录, Ipad中用的是Safari浏览器,它支持HTML5的Video 标签 (只支持MP4格式的视频),这样就好办了只要我将Src属性指向我webapps下的mp4文件 就能播放了.
但是我想做的灵活一点,好用一点 我想在页面上显示我webapps下的目录,点击任意mp4文件就能播放,点击文件夹进入文件内部. 这些功能都在同一个页面内实现,这样少不了用大量的Js ,Ajax也要用到. 与其乱写一通倒不如对上述功能封装成几个JS类供自己调用(先声明本人是菜鸟,希望各位看了能提点意见).
下面是我的思路:
需要建立三个类 : Video 主要用来实现播放视频,切换视频以及视频 连续播放 以及一些需要用到的媒体事件等功能
Stroe 用来存储当前目录的视频 以供Video类使用
GpsDirectory 用来同步服务器目录 根据目录中的内容改变stroe中的资源
以下是今天写的代码(不全,等整好会补全的)
测试代码:
[code="html"]
test
your browser does not support this tag!
console.log("start....");
var video = new diqye.html5.Video({
id:'myVideo',
controls:true,
height:'300px',
width:'400px',
autoplay:true,
onPlay:function(){console.log("on play");},
onPause:function(){console.log("on pause");},
url:'http://www.w3school.com.cn/i/movie.ogg'
});
console.log(video.isAutoPlay());
console.log(video.getSource());
//video.addEventOnPause(function(){console.log("on pause");});
//video.addEventOnPlay(function(){console.log("on play");})
function doPause() {
video.pause();
}
function doPlay() {
video.play();
}
var stroe = new diqye.html5.video.Stroe(new Array("111", "222"));
console.log(stroe.getLength());
console.log(stroe.add("333"));
for(var i=0; i<stroe.getLength(); i++) {
console.log("the content that index is "+ i + " is " + stroe.get(i));
}
js代码:
[code="js"]//由于本机上面中文编码出了点问题所以注释很少
[code="js"]console.log("entered dqye js file");
[code="js"]//模拟Java 中的包机制
var diqye = function(){}
diqye.html5 = function(){}
diqye.html5.Video = function(configuration) {
this._context = document.getElementById(configuration.id);
if(configuration.autoplay) {
this._autoplay = "autoplay";
this._context.setAttribute("autoplay", this._autoplay);
}
if(configuration.controls) {
this._controls = "controls";
this._context.setAttribute("controls", this._controls);
}
if(configuration.height) {
this._height = configuration.height;
this._context.setAttribute("height", this._height);
}
if(configuration.loop) {
this._loop = "loop";
this._context.setAttribute("loop", this._loop);
}
if(configuration.preload) {
this._preload = "preload";
this._context.setAttribute("preload", this._preload);
}
if(configuration.url) {
this._url = configuration.url;
this._context.setAttribute("src", this._url);
}
if(configuration.width) {
this._width = configuration.width;
this._context.setAttribute("width", this._width);
}
if(configuration.onPause) {
if(configuration.onPause instanceof Object) {
this.addEventOnPause(configuration.onPause);
}else{
throw "the attrubute onPause must specify a method"
}
}
if(configuration.onPlay) {
if(configuration.onPause instanceof Object) {
this.addEventOnPlay(configuration.onPlay);
}else{
throw "the attrubute onPlay must specify a method"
}
}
}
//蛻�謐「謦ュ謾セ逧�隗�鬚第枚莉カ
diqye.html5.Video.prototype.changeSource = function(url) {
console.log("entered change source method , the url is " + url);
this._url = url;
this._context.setAttribute("src", this._url);
}
//闔キ蜿匁眺謾セ逧�隗�鬚第枚莉カ
diqye.html5.Video.prototype.getSource = function() {
return this._url;
}
//譏ッ蜷ヲ閾ェ蜉ィ謦ュ謾セ
diqye.html5.Video.prototype.isAutoPlay = function() {
return this._autoplay == "autoplay";
}
diqye.html5.Video.prototype.addEventOnPause = function( callBack) {
if(this._context.addEventListener){
this._context.addEventListener("pause", callBack);
}else if(this._context.attchEvent) {
this._context.attchEvent("onpause", callBack);
}else if(this._context.onpause) {
this._context.onpause = callBack;
}else{
throw "your browse not support this library";
}
}
diqye.html5.Video.prototype.pause = function() {
this._context.pause();
}
diqye.html5.Video.prototype.addEventOnPlay = function( callBack) {
if(this._context.addEventListener){
this._context.addEventListener("play", callBack);
}else if(this._context.attchEvent) {
this._context.attchEvent("onplay", callBack);
}else if(this._context.onpause) {
this._context.onplay = callBack;
}else{
throw "your browse not support this library";
}
}
diqye.html5.Video.prototype.play = function() {
this._context.play();
}
//define diqye.html5.video.Stroe Object start
diqye.html5.video = function(){}
diqye.html5.video.Stroe = function(sources) {
this._sources = null;
if(sources.constructor==Array) {
this._sources = sources;
}else {
this._sources = new Array();
}
}
diqye.html5.video.Stroe.prototype.getLength = function() {
return this._sources.length;
}
diqye.html5.video.Stroe.prototype.add = function(source) {
return this._sources.push(source);
}
diqye.html5.video.Stroe.prototype.get = function(index) {
return this._sources[index];
}
diqye.html5.video.Stroe.prototype.sort = function() {
this._sources.sort();
}
上述代码我只做了部分功能,以后会全部实现的
至于GpsDirectory 类 还没来得及写 不过已经构思好了
如图:
实现功能:类似Win7中导航栏
[img]http://dl.iteye.com/upload/picture/pic/113674/e9c95a45-bc1a-315d-b2ed-c98effcdc1aa.jpg" alt="构思图" width="710" height="605[/img]
http://www.diqye.com
相关推荐
需要注意的是,无论是在实现同步服务器时间还是秒杀倒计时的过程中,都应避免过于频繁地请求服务器,以免造成服务器的负载过大。本文提出的解决方案是服务器首先获取当前时间并显示在页面上,然后页面自动每隔一秒就...
以下是一个简单的C#实现的同步套接字服务器示例: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; public class SynchronousSocketListener { public static string ...
对于同步服务器页面,Web服务器可能需要支持特定的同步机制,例如WebSocket,以实现实时更新。 2. **同步技术**: - **AJAX(Asynchronous JavaScript and XML)**:通过JavaScript在后台与服务器交换数据并局部...
在这个“node+js页面乐观锁帧同步示例源码”中,我们可以看到一个结合Node.js和JavaScript实现的乐观锁应用。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让开发者可以使用JavaScript在服务器端编写代码...
6. **结果展示**:新页面加载后,展示同步的结果,这可以通过从服务器获取最新的数据或者传递同步结果到新页面来实现。 以上就是利用JSP和Java实现同步数据功能的基本流程和技术要点。在实际开发中,还需要考虑错误...
在IT行业中,"前台同步服务器倒计时"是一种常见的用户界面功能,...总的来说,"前台同步服务器倒计时"是前端开发中的一个重要实践,它结合了JavaScript、jQuery以及与服务器的通信,为用户提供了一种直观且互动的体验。
在JavaScript的世界里,XML(可扩展标记语言)作为一种数据交换格式,经常被用于服务器与客户端之间的数据传输。本文将深入探讨如何使用JavaScript在服务器端解析XML文件,并将其转化为树形菜单,以供用户交互。 ...
这通常通过FTP客户端的自动同步功能实现,可以定期检查本地和服务器上的文件差异,并进行必要的上传或下载操作,以确保两边的文件保持一致。 综上所述,FTP上传与下载是网络文件交换的基础操作,涉及FTP客户端和...
标题中提到的"extjs ajax同步请求所需js"是指ExtJS框架中用于执行同步Ajax请求的相关JavaScript代码。在ExtJS中,Ajax请求通常通过`Ext.Ajax`对象来实现。与传统的异步请求不同,同步请求会阻塞浏览器,直到请求完成...
这个基于 Electron & Vue.js 的文件同步客户端实现的主要功能包括: 1. **云服务选择:** 应用程序允许用户选择不同的云存储提供商,如 Dropbox、Google Drive 或 OneDrive。这通常通过 API 授权实现,用户需要授权...
`ext-basex.js`是EXTJS的基础组件文件,其中包含了Ajax请求的相关实现。在旧版本中,可能需要对请求选项进行更详细的配置来适应不同的浏览器环境。 在EXTJS中,`Ext.Ajax`对象提供了丰富的配置项和方法,如`params`...
文件"js aes.txt"可能是JavaScript实现AES加密的示例代码,而"AES加密 – iOS与Java的同步实现"可能是介绍如何在iOS和Java之间实现同步加密的教程或代码示例。通过学习这些内容,开发者可以掌握如何在不同平台上实现...
通过以上步骤,一个完整的“修改头像并同步服务器”功能就可以在Android应用中实现。这个功能涉及到Android的UI设计、权限管理、图片处理、网络请求以及错误处理等多个方面,是Android开发者必备技能之一。
在JavaScript(JS)中获取服务器时间是一个常见的需求,特别是在创建实时更新的应用或者需要与服务器保持时间同步的场景中。服务器时间通常比客户端浏览器的时间更准确,因为客户端的时间可能被用户手动调整。以下将...
标题“拷贝发布文件到服务器目录”涉及到的是在IT行业中常见的文件传输操作,尤其是在软件开发和部署的过程中。这个过程通常包括从本地计算机复制文件或文件夹到远程服务器,以便进行测试、部署或共享。以下是对这个...
在Web开发中,JavaScript的AJAX技术允许我们异步地加载数据或请求服务器,以更新网页的某个部分而不必重新加载整个页面。在正常情况下,我们推荐使用异步请求,因为它们不会阻塞用户界面,从而允许用户继续与页面上...
综上所述,"ajax-get用JS非同步"主要涉及如何使用JavaScript异步发送GET请求,获取服务器数据,并处理返回的结果。这个主题对于想要提升网页交互性和性能的开发者来说非常重要。下载提供的压缩包文件"ajax-get",你...
本文将详细介绍在客户端和服务器端使用JavaScript来判断文件是否存在的方式,并提供相应的示例代码。 客户端判断文件是否存在: 在客户端,我们可以利用Windows平台的ActiveX对象“Scripting.FileSystemObject”来...
在本文中,我们将探讨如何使用JavaScript技术来同步服务器时间,并实现一个同步倒计时功能。这一技术常用于需要时间同步的Web应用中,例如秒杀活动、定时活动、在线考试系统等。 首先,我们来看一下同步服务器时间...
"eclipse,Myeclipse修改js文件同步插件"就是为了解决这个问题而存在的,它允许开发者在不重启项目的情况下即时查看和测试JavaScript文件的修改效果。这个插件适用于Eclipse和MyEclipse集成开发环境(IDE),极大地...