diff --git a/AGENTS.md b/AGENTS.md
index cd5dc84..3f8a58b 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -6,17 +6,24 @@ MoePlayer —— 一款中文友好的开源网页视频播放器(MIT 协议
目标定位:中文文档 + 主流浏览器/手机 H5 支持 + 官方 Moodle media 插件(`media_moeplayer`,独立仓库)。
-**注意**:当前处于改造阶段 2(改名 + 模块化)。改名已完成:目录 `moeplayer/`、全局变量/API 为 `MoePlayer`(语言包全局变量 `moeplayerLanguage`);单文件拆分为 ES Module 待做。
+**注意**:当前处于改造阶段 2(改名 + 模块化)。改名已完成:目录 `moeplayer/`、全局变量/API 为 `MoePlayer`(语言包全局变量 `moeplayerLanguage`);单文件已拆分为 ES Module(源码在 `src/`,经 rollup 打包为 UMD 产物)。**主函数 `moeplayerEmbed` 尚未内部拆分**,仍是一个 ~6400 行的巨大函数,位于 `src/core/moeplayerEmbed.js`。
## 目录结构
```
├── index.html # 演示/测试页(含 API 调用示例)
├── package.json # npm 工程化入口,依赖与构建脚本
-├── scripts/build.js # 构建脚本:压缩核心 + 从 node_modules 拷贝运行时库
+├── rollup.config.js # rollup 配置:src/ 打包为 UMD 产物 + terser 压缩
+├── scripts/copy-libs.js # 构建脚本第二步:从 node_modules 拷贝运行时库
+├── src/ # 播放器源码(ES Module,2026-07 由单文件拆分而来)
+│ ├── index.js # 入口:export default moeplayerEmbed
+│ ├── language.js # 默认中文语言包
+│ ├── defaults.js # videoObjectDefault 默认配置
+│ ├── core/moeplayerEmbed.js # 主函数,【整体搬自旧单文件,内部未拆分,逻辑零改动】
+│ └── utils/ # 工具函数:type/dom/format/net/cookie/path
├── moeplayer/ # 播放器本体,部署时整个上传到网站
-│ ├── js/moeplayer.js # 核心源码(UMD 模块,~7400 行,ES5)
-│ ├── js/moeplayer.min.js # 压缩版,【由 npm run build 自动生成,勿手改】
+│ ├── js/moeplayer.js # UMD 产物,【由 npm run build 自动生成,勿手改】
+│ ├── js/moeplayer.min.js # 压缩版,同上
│ ├── css/moeplayer.css # 默认皮肤;另有 moeplayer.red.css、moeplayer.ixigua.css
│ ├── css/images/ # 皮肤图片资源
│ ├── language/ # 语言包:zh.cn.js(默认内嵌)、zh.hk.js、en.js
@@ -29,12 +36,13 @@ MoePlayer —— 一款中文友好的开源网页视频播放器(MIT 协议
## 构建与依赖
- 安装:`npm install`
-- 构建:`npm run build` —— 做两件事:
- 1. terser 压缩 `moeplayer/js/moeplayer.js` → `moeplayer.min.js`
- 2. 从 node_modules 拷贝 hls.js / flv.js / mpegts.js 的产物及 LICENSE 到 `moeplayer/` 对应目录
-- **改动 `moeplayer.js` 后必须执行 `npm run build`** 重新生成 min 版
+- 构建:`npm run build`(即 `rollup -c && node scripts/copy-libs.js`) —— 做两件事:
+ 1. rollup 把 `src/` 的 ES Module 打包为 UMD:`moeplayer/js/moeplayer.js`,并经 @rollup/plugin-terser 生成 `moeplayer.min.js`(保留 `软件名称|版权` 头部注释)
+ 2. `scripts/copy-libs.js` 从 node_modules 拷贝 hls.js / flv.js / mpegts.js 的产物及 LICENSE 到 `moeplayer/` 对应目录
+- **改动 `src/` 后必须执行 `npm run build`** 重新生成两个产物;`moeplayer/js/` 下两个 js 均为生成物,勿手改
- 升级依赖:改 `package.json` 版本号后 `npm install && npm run build`
- 运行时机制:播放器用 `getPath()` 定位自身所在目录,按需动态 `
+```html
+
+
播放器容器
```
+更多配置与 API 可参考本仓库的 `index.html` 演示页;原 ckplayer 手册(http://www.ckplayer.com/manual/ )在改造期内仍有参考价值。
-#### 使用说明
-使用过程中碰到问题,请至官网查看手册:http://www.ckplayer.com/manual/
+### 语言
-#### 参与贡献
-niandeng
+默认中文。引入语言包可切换其它语言(需在引入 moeplayer.js 之前引入):
+```html
+
+```
+
+### 皮肤
+
+默认皮肤 `moeplayer.css`,另有红色 `moeplayer.red.css`、西瓜风格 `moeplayer.ixigua.css`,替换 CSS 文件即可换肤。
+
+## 从源码构建
+
+```bash
+npm install
+npm run build
+```
+
+源码在 `src/`(ES Module),构建产物输出到 `moeplayer/js/`(UMD,含未压缩版与 min 版),同时从 npm 依赖拷贝 hls.js / flv.js / mpegts.js 运行时库到 `moeplayer/` 对应目录。
+
+## 改造路线图
+
+- [x] 工程化:npm + rollup 构建,依赖 npm 化管理
+- [x] 改名 ckplayer → MoePlayer,单文件拆分为 ES Module
+- [ ] 核心与 UI 分层,皮肤改用 CSS 变量 + SVG 图标
+- [ ] 协议插件化(hls/mpegts 按需加载,移除已停维护的 flv.js)
+- [ ] 移动端 H5 兼容性专项
+- [ ] Moodle media 插件(独立仓库 moodle-media_moeplayer)
+- [ ] 完整中文文档
+
+## 致谢
+
+感谢 ckplayer 原作者 [niandeng](http://www.ckplayer.com) 的开源工作,本项目在其 X3 版本基础上继续演进。
+
+## 协议
+
+[MIT](LICENSE) © MoePlayer 项目 & ckplayer 原作者 niandeng
diff --git a/index.html b/index.html
index 4c45c42..3eb39b0 100644
--- a/index.html
+++ b/index.html
@@ -3,7 +3,7 @@
MoePlayer
-
+
@@ -44,12 +44,22 @@
player.ended(function(){
document.getElementById('state').innerHTML='监听到播放结束';
});
+ //皮肤切换:替换引入的CSS文件
+ function changeSkin(css){
+ document.getElementById('skin').href='moeplayer/css/'+css;
+ }
以下链接指向原 ckplayer 项目:
官网:www.ckplayer.com
手册:www.ckplayer.com/manual/
社区:bbs.ckplayer.com
全功能演示:www.ckplayer.com/demo.html
+ 皮肤切换:
+
+
+
+
+
控制示例:
diff --git a/moeplayer/js/moeplayer.js b/moeplayer/js/moeplayer.js
index b38b253..c01eb3c 100644
--- a/moeplayer/js/moeplayer.js
+++ b/moeplayer/js/moeplayer.js
@@ -1,6511 +1,251 @@
-/*
- * 软件名称:MoePlayer
- * 版本:X3
- * 版权:MoePlayer 项目(fork 自 ckplayer, www.ckplayer.com)
- * 开源协议:MIT
- */
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, global.MoePlayer = factory());
-}(this, function () { 'use strict';
+/*
+ * 软件名称:MoePlayer
+ * 版本:X3
+ * 版权:MoePlayer 项目(fork 自 ckplayer, www.ckplayer.com)
+ * 开源协议:MIT
+ */
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.MoePlayer = factory());
+})(this, (function () { 'use strict';
+
/*
- * language
- * 功能:静态变量,包含播放器用到的默认语言包
- * 引入其它语言js后该变量将被替换成新引入的语言包
- */
- var language={
- play:'%E6%92%AD%E6%94%BE',
- pause:'%E6%9A%82%E5%81%9C',
- refresh:'%E9%87%8D%E6%92%AD',
- full:'%E5%85%A8%E5%B1%8F',
- exitFull:'%E9%80%80%E5%87%BA%E5%85%A8%E5%B1%8F',
- webFull:'%E9%A1%B5%E9%9D%A2%E5%85%A8%E5%B1%8F',
- exitWebFull:'%E9%80%80%E5%87%BA%E9%A1%B5%E9%9D%A2%E5%85%A8%E5%B1%8F',
- theatre:'%E5%89%A7%E5%9C%BA%E6%A8%A1%E5%BC%8F',
- exitTheatre:'%E9%80%80%E5%87%BA%E5%89%A7%E5%9C%BA%E6%A8%A1%E5%BC%8F',
- volume:'%E9%9F%B3%E9%87%8F%EF%BC%9A',
- muted:'%E9%9D%99%E9%9F%B3',
- exitmuted:'%E6%81%A2%E5%A4%8D%E9%9F%B3%E9%87%8F',
- seek:'seek%EF%BC%9A',
- waiting:'%E7%BC%93%E5%86%B2',
- live:'%E7%9B%B4%E6%92%AD%E4%B8%AD',
- backLive:'%E8%BF%94%E5%9B%9E%E7%9B%B4%E6%92%AD',
- lookBack:'%E5%9B%9E%E7%9C%8B%EF%BC%9A',
- next:'%E4%B8%8B%E4%B8%80%E9%9B%86',
- screenshot:'%E8%A7%86%E9%A2%91%E6%88%AA%E5%9B%BE',
- smallwindows:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E6%92%AD%E6%94%BE%E5%8A%9F%E8%83%BD',
- playbackrate:'%E5%80%8D%E9%80%9F',
- playbackrateSuffix:'%E5%80%8D',
- track:'%E5%AD%97%E5%B9%95',
- noTrack:'%E6%97%A0%E5%AD%97%E5%B9%95',
- definition:'%E6%B8%85%E6%99%B0%E5%BA%A6',
- switchTo:'%E5%88%87%E6%8D%A2%E6%88%90%EF%BC%9A',
- closeTime:'%7Bseconds%7D%E7%A7%92%E5%90%8E%E5%8F%AF%E5%85%B3%E9%97%AD%E5%B9%BF%E5%91%8A',
- closeAd:'%E5%85%B3%E9%97%AD%E5%B9%BF%E5%91%8A',
- second:'%E7%A7%92',
- details:'%E6%9F%A5%E7%9C%8B%E8%AF%A6%E6%83%85',
- copy:'%E5%A4%8D%E5%88%B6',
- copySucceeded:'%E5%A4%8D%E5%88%B6%E6%88%90%E5%8A%9F%EF%BC%8C%E5%8F%AF%E8%B4%B4%E7%B2%98%EF%BC%81',
- smallwindowsOpen:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%BC%80%E5%90%AF',
- smallwindowsClose:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD',
- screenshotStart:'%E6%88%AA%E5%9B%BE%E4%B8%AD%EF%BC%8C%E8%AF%B7%E7%A8%8D%E5%80%99...',
- screenshotClose:'%E6%88%AA%E5%9B%BE%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD',
- loopOpen:'%E5%BE%AA%E7%8E%AF%E6%92%AD%E6%94%BE',
- loopClose:'%E5%B7%B2%E5%85%B3%E9%97%AD%E5%BE%AA%E7%8E%AF%E6%92%AD%E6%94%BE',
- close:'%E5%85%B3%E9%97%AD',
- down:'%E4%B8%8B%E8%BD%BD',
- p50:'50%25',
- p75:'75%25',
- p100:'100%25',
- timeScheduleAdjust:{
- prohibit:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%8B%96%E5%8A%A8',
- prohibitBackOff:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E9%87%8D%E5%A4%8D%E8%A7%82%E7%9C%8B',
- prohibitForward:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E5%BF%AB%E8%BF%9B',
- prohibitLookBack:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%92%AD%E6%94%BE%E9%83%A8%E5%88%86%E5%86%85%E5%AE%B9',
- prohibitForwardNotViewed:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%92%AD%E6%94%BE%E6%9C%AA%E8%A7%82%E7%9C%8B%E7%9A%84%E9%83%A8%E5%88%86'
- },
- error:{
- noMessage:'%E6%9C%AA%E7%9F%A5%E9%94%99%E8%AF%AF',
- supportVideoError:'%E8%AF%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E7%89%88%E6%9C%AC%E5%A4%AA%E4%BD%8E%EF%BC%8C%E5%BB%BA%E8%AE%AE%E6%9B%B4%E6%8D%A2%E6%88%90%E5%85%B6%E5%AE%83%E6%B5%8F%E8%A7%88%E5%99%A8',
- videoTypeError:'%E8%AF%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%8D%E6%94%AF%E6%8C%81%E6%92%AD%E6%94%BE%E8%AF%A5%E8%A7%86%E9%A2%91%EF%BC%8C%E5%BB%BA%E8%AE%AE%E6%9B%B4%E6%8D%A2%E6%88%90%E5%85%B6%E5%AE%83%E6%B5%8F%E8%A7%88%E5%99%A8',
- loadingFailed:'%E5%8A%A0%E8%BD%BD%E5%A4%B1%E8%B4%A5',
- emptied:'%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%E5%8A%A0%E8%BD%BD%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF',
- screenshot:'%E8%A7%86%E9%A2%91%E6%88%AA%E5%9B%BE%E5%A4%B1%E8%B4%A5',
- ajax:'Ajax%E6%95%B0%E6%8D%AE%E8%AF%B7%E6%B1%82%E9%94%99%E8%AF%AF',
- noVideoContainer:'%E6%9C%AA%E6%89%BE%E5%88%B0%E6%94%BE%E7%BD%AE%E8%A7%86%E9%A2%91%E7%9A%84%E5%AE%B9%E5%99%A8'
- }
- };
+ * language
+ * 功能:静态变量,包含播放器用到的默认语言包
+ * 引入其它语言js后该变量将被替换成新引入的语言包
+ */
+ var language$1={
+ play:'%E6%92%AD%E6%94%BE',
+ pause:'%E6%9A%82%E5%81%9C',
+ refresh:'%E9%87%8D%E6%92%AD',
+ full:'%E5%85%A8%E5%B1%8F',
+ exitFull:'%E9%80%80%E5%87%BA%E5%85%A8%E5%B1%8F',
+ webFull:'%E9%A1%B5%E9%9D%A2%E5%85%A8%E5%B1%8F',
+ exitWebFull:'%E9%80%80%E5%87%BA%E9%A1%B5%E9%9D%A2%E5%85%A8%E5%B1%8F',
+ theatre:'%E5%89%A7%E5%9C%BA%E6%A8%A1%E5%BC%8F',
+ exitTheatre:'%E9%80%80%E5%87%BA%E5%89%A7%E5%9C%BA%E6%A8%A1%E5%BC%8F',
+ volume:'%E9%9F%B3%E9%87%8F%EF%BC%9A',
+ muted:'%E9%9D%99%E9%9F%B3',
+ exitmuted:'%E6%81%A2%E5%A4%8D%E9%9F%B3%E9%87%8F',
+ seek:'seek%EF%BC%9A',
+ waiting:'%E7%BC%93%E5%86%B2',
+ live:'%E7%9B%B4%E6%92%AD%E4%B8%AD',
+ backLive:'%E8%BF%94%E5%9B%9E%E7%9B%B4%E6%92%AD',
+ lookBack:'%E5%9B%9E%E7%9C%8B%EF%BC%9A',
+ next:'%E4%B8%8B%E4%B8%80%E9%9B%86',
+ screenshot:'%E8%A7%86%E9%A2%91%E6%88%AA%E5%9B%BE',
+ smallwindows:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E6%92%AD%E6%94%BE%E5%8A%9F%E8%83%BD',
+ playbackrate:'%E5%80%8D%E9%80%9F',
+ playbackrateSuffix:'%E5%80%8D',
+ track:'%E5%AD%97%E5%B9%95',
+ noTrack:'%E6%97%A0%E5%AD%97%E5%B9%95',
+ definition:'%E6%B8%85%E6%99%B0%E5%BA%A6',
+ switchTo:'%E5%88%87%E6%8D%A2%E6%88%90%EF%BC%9A',
+ closeTime:'%7Bseconds%7D%E7%A7%92%E5%90%8E%E5%8F%AF%E5%85%B3%E9%97%AD%E5%B9%BF%E5%91%8A',
+ closeAd:'%E5%85%B3%E9%97%AD%E5%B9%BF%E5%91%8A',
+ second:'%E7%A7%92',
+ details:'%E6%9F%A5%E7%9C%8B%E8%AF%A6%E6%83%85',
+ copy:'%E5%A4%8D%E5%88%B6',
+ copySucceeded:'%E5%A4%8D%E5%88%B6%E6%88%90%E5%8A%9F%EF%BC%8C%E5%8F%AF%E8%B4%B4%E7%B2%98%EF%BC%81',
+ smallwindowsOpen:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%BC%80%E5%90%AF',
+ smallwindowsClose:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD',
+ screenshotStart:'%E6%88%AA%E5%9B%BE%E4%B8%AD%EF%BC%8C%E8%AF%B7%E7%A8%8D%E5%80%99...',
+ screenshotClose:'%E6%88%AA%E5%9B%BE%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD',
+ loopOpen:'%E5%BE%AA%E7%8E%AF%E6%92%AD%E6%94%BE',
+ loopClose:'%E5%B7%B2%E5%85%B3%E9%97%AD%E5%BE%AA%E7%8E%AF%E6%92%AD%E6%94%BE',
+ close:'%E5%85%B3%E9%97%AD',
+ down:'%E4%B8%8B%E8%BD%BD',
+ p50:'50%25',
+ p75:'75%25',
+ p100:'100%25',
+ timeScheduleAdjust:{
+ prohibit:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%8B%96%E5%8A%A8',
+ prohibitBackOff:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E9%87%8D%E5%A4%8D%E8%A7%82%E7%9C%8B',
+ prohibitForward:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E5%BF%AB%E8%BF%9B',
+ prohibitLookBack:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%92%AD%E6%94%BE%E9%83%A8%E5%88%86%E5%86%85%E5%AE%B9',
+ prohibitForwardNotViewed:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%92%AD%E6%94%BE%E6%9C%AA%E8%A7%82%E7%9C%8B%E7%9A%84%E9%83%A8%E5%88%86'
+ },
+ error:{
+ noMessage:'%E6%9C%AA%E7%9F%A5%E9%94%99%E8%AF%AF',
+ supportVideoError:'%E8%AF%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E7%89%88%E6%9C%AC%E5%A4%AA%E4%BD%8E%EF%BC%8C%E5%BB%BA%E8%AE%AE%E6%9B%B4%E6%8D%A2%E6%88%90%E5%85%B6%E5%AE%83%E6%B5%8F%E8%A7%88%E5%99%A8',
+ videoTypeError:'%E8%AF%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%8D%E6%94%AF%E6%8C%81%E6%92%AD%E6%94%BE%E8%AF%A5%E8%A7%86%E9%A2%91%EF%BC%8C%E5%BB%BA%E8%AE%AE%E6%9B%B4%E6%8D%A2%E6%88%90%E5%85%B6%E5%AE%83%E6%B5%8F%E8%A7%88%E5%99%A8',
+ loadingFailed:'%E5%8A%A0%E8%BD%BD%E5%A4%B1%E8%B4%A5',
+ emptied:'%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%E5%8A%A0%E8%BD%BD%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF',
+ screenshot:'%E8%A7%86%E9%A2%91%E6%88%AA%E5%9B%BE%E5%A4%B1%E8%B4%A5',
+ ajax:'Ajax%E6%95%B0%E6%8D%AE%E8%AF%B7%E6%B1%82%E9%94%99%E8%AF%AF',
+ noVideoContainer:'%E6%9C%AA%E6%89%BE%E5%88%B0%E6%94%BE%E7%BD%AE%E8%A7%86%E9%A2%91%E7%9A%84%E5%AE%B9%E5%99%A8'
+ }
+ };
+
/*
- * videoObjectDefault
- * 功能:静态变量,默认播放配置,当外部传递过来的配置有未包含在varsDefault里的,则使用varsDefault里的配置
- */
- var videoObjectDefault= {
- container: '',//视频容器的ID
- volume: 0.8,//默认音量,范围0-1
- poster: '',//封面图片地址
- autoplay: false,//是否自动播放
- loop: false,//是否需要循环播放
- live: false,//是否是直播
- rotate:0,//视频旋转角度
- zoom:0,//默认缩放比例
- ad:null,//广告
- backLive:false,//显示返回直播按钮
- seek: 0,//默认需要跳转的秒数
- next: null,//下一集按钮动作
- loaded: '',//加载播放器后调用的函数
- plug: '',//使用插件
- duration:0,//视频总时间
- preview: null,//预览图片对象
- prompt: null,//提示点功能
- crossOrigin:'',//跨域请求字符
- video: null,//视频地址
- type:'',//视频类型
- playbackrate: 1,//默认倍速
- ended:null,//结束显示的内容
- webFull:false,//页面全屏按钮事件
- theatre:null,//剧场模式
- controls:false,//是否显示自带控制栏
- rightBar:null,//是否开启右边控制栏
- smallWindows:null,//是否启用小窗口模式
- smallWindowsDrag:true,//当处于小窗口模式时是否可拖动播放器
- screenshot:false,//截图功能是否开启
- timeScheduleAdjust:1,//是否可调节播放进度,0不启用,1是启用,2是只能前进(向右拖动),3是只能后退,4是只能前进但能回到第一次拖动时的位置,5是看过的地方可以随意拖动
- logo:'',//logo
- menu:null,//右键菜单
- information:{//关于
- 'Load:':'{loadTime} second',
- 'Duration:':'{duration} second',
- 'Size:':'{videoWidth}x{videoHeight}',
- 'Volume:':'{volume}%',
- 'Fps:':'{fps}fps',
- 'Sudio decoded:':'{audioDecodedByteCount} Byte',
- 'Video decoded:':'{videoDecodedByteCount} Byte'
- },
- track:null,//字幕
- title:'',//视频标题
- language:'',//语言包文件
- barHideTime:1500,//控制栏隐藏时间
- playbackrateOpen:true,//是否开启控制栏倍速选项
- playbackrateList:[0.75,1,1.25,1.5,2,4],//倍速配置值
- cookie:null,//开启cookie功能
- domain:null,//指定cookie保存的域
- cookiePath:'/',//指定cookie保存路径
- documentFocusPause:false,//窗口失去焦点后暂停播放
- mouseWheelVolume:2,//是否启用鼠标滚轮调节音量功能,0=不启用,1=启用,2=全屏时才启用
- keyVolume:2,//是否启用键盘控制音量调节,0=不启用,1=启用,2=全屏时才启用
- errorShow:true//是否显示错误信息
- };
- function moeplayerEmbed(videoObj){
- /*
- * rightMenu
- * 功能:全局变量,右键内容
- * 初始化设置menu可替换该变量内容
+ * videoObjectDefault
+ * 功能:静态变量,默认播放配置,当外部传递过来的配置有未包含在varsDefault里的,则使用varsDefault里的配置
*/
- var rightMenu=[
- {
- title:'MoePlayer'
+ var videoObjectDefault= {
+ container: '',//视频容器的ID
+ volume: 0.8,//默认音量,范围0-1
+ poster: '',//封面图片地址
+ autoplay: false,//是否自动播放
+ loop: false,//是否需要循环播放
+ live: false,//是否是直播
+ rotate:0,//视频旋转角度
+ zoom:0,//默认缩放比例
+ ad:null,//广告
+ backLive:false,//显示返回直播按钮
+ seek: 0,//默认需要跳转的秒数
+ next: null,//下一集按钮动作
+ loaded: '',//加载播放器后调用的函数
+ plug: '',//使用插件
+ duration:0,//视频总时间
+ preview: null,//预览图片对象
+ prompt: null,//提示点功能
+ crossOrigin:'',//跨域请求字符
+ video: null,//视频地址
+ type:'',//视频类型
+ playbackrate: 1,//默认倍速
+ ended:null,//结束显示的内容
+ webFull:false,//页面全屏按钮事件
+ theatre:null,//剧场模式
+ controls:false,//是否显示自带控制栏
+ rightBar:null,//是否开启右边控制栏
+ smallWindows:null,//是否启用小窗口模式
+ smallWindowsDrag:true,//当处于小窗口模式时是否可拖动播放器
+ screenshot:false,//截图功能是否开启
+ timeScheduleAdjust:1,//是否可调节播放进度,0不启用,1是启用,2是只能前进(向右拖动),3是只能后退,4是只能前进但能回到第一次拖动时的位置,5是看过的地方可以随意拖动
+ logo:'',//logo
+ menu:null,//右键菜单
+ information:{//关于
+ 'Load:':'{loadTime} second',
+ 'Duration:':'{duration} second',
+ 'Size:':'{videoWidth}x{videoHeight}',
+ 'Volume:':'{volume}%',
+ 'Fps:':'{fps}fps',
+ 'Sudio decoded:':'{audioDecodedByteCount} Byte',
+ 'Video decoded:':'{videoDecodedByteCount} Byte'
},
- {
- title:'version:X3',
- underline:true
- },
- {
- title:'about',
- click:'aboutShow'
- }
- ];
- var vars={},varsTemp={};//保存传递过来的videoObject
- var video=null;//视频播放器对象
- var duration=0;//总时间
- var mutedState='';//默认静音状态
- var recoveryVolume=false;//是否需要在播放时恢复音量
- var waited=true;//是否缓冲结束
- var paused=true;//默认暂停状态
- var loadTime=0;//已加载部分
- var seekTime=0;//需要跳转的时间,初次播放以及切换清晰度后会用该变量记录需要seek的时间
- var oldTime=0,playTime=0,firstSeekTime=-1,maxSeeTime=0;//oldTime=记录上次播放时间,playTime=当前播放时间,firstSeekTime=记录第一次拖动的时间,maxSeeTime=看过的最大时间
- var isChangeDef=true;//是否需要重置清晰度
- var playType='';//播放类别,默认='',是通过api接口播放,='button'则判定是通过点击按钮播放
- var msgSetTime=null,tipSetTime=null,mouseSetTime=null;//用于显示提示后自动隐藏的计时器
- var adFrontSetTime=null,adPauseSetTime=null;//贴片广告和暂停广告的计时器
- var closeTipFun=null;//关闭提示的函数
- var closeTipMouseOut=null;//鼠标离开节点时执行的函数
- var waitingMessage=true;//显示缓冲提示
- var hidePreviewSetTime=null;//隐藏预览图的计时器
- var pSliderMouseDown=false;//判断是否在进度条上的滑块上按下
- var playbackTime=0;//记录回放时间
- var loadedmetadataNum=0;//记录元数据加载成功次数,记录视频播放数量
- var screenshotImg=null;//记录最新一张截图
- var ad=null;//广告对象
- var frontAdPlay=false,pauseAdPlay=false;//贴片广告是否播放,暂停广告是否播放
- var barShow=true,rightBarShow=true;
- var EventTarget=null,newEvent=null,eventTargetList=null;//注册监听
- var loadedTrack=false;//默认未加载字幕
- var C={};//保存播放器界面上的所有节点
- var CT=null,CK=null,CM=null,CV=null;//CT=播放器容器,页面中已存的,CT>CK>CM>CV>video
- var pugPlayer=null;//插件播放器
- var hls=null;//播放hls
- var loadMeta=true;//第一次加载到元数据
- var app='';//平台类型
- var nowRotate=0;//当前视频旋转角度
- var nowZoom=100;//当前缩放比例
- var smallWindowsState=false;//当前是否处理小窗口状态
- var isDrag=false;//是否在播放器上按下并且拖动
- var moeplayerCookie='moeplayer-player-cookie';
- var cookieName='';//cookie名称
- var cookieTime=0;//cookie保存时间,单位:秒
- var cookieArray=[];//保存当前所有记录
- var focusPause=true;//失去焦点前是否是暂停状态
- var existenceObj=false;//是否使用源码里已有的dom
- /*
- * into
- * 功能:初始化,调用播放器则首先调用该函数
- * @obj=初始化时的配置对象:videoObject
+ track:null,//字幕
+ title:'',//视频标题
+ language:'',//语言包文件
+ barHideTime:1500,//控制栏隐藏时间
+ playbackrateOpen:true,//是否开启控制栏倍速选项
+ playbackrateList:[0.75,1,1.25,1.5,2,4],//倍速配置值
+ cookie:null,//开启cookie功能
+ domain:null,//指定cookie保存的域
+ cookiePath:'/',//指定cookie保存路径
+ documentFocusPause:false,//窗口失去焦点后暂停播放
+ mouseWheelVolume:2,//是否启用鼠标滚轮调节音量功能,0=不启用,1=启用,2=全屏时才启用
+ keyVolume:2,//是否启用键盘控制音量调节,0=不启用,1=启用,2=全屏时才启用
+ errorShow:true//是否显示错误信息
+ };
+
+ /*
+ * standardization
+ * 功能:将对象Object标准化,将n对象替换进o对象
+ * @o:标准化对象,@n:外部传递对象
*/
- var into=function(obj){
- /*
- * 如果未传递初始化配置对象,则为player变量增加一个add函数,功能相当于into
- */
- if(isUndefined(obj)){
- player.add=player.into=into;
- return player;
+ function standardization(o, n) { //n替换进o
+ var h = {};
+ var k;
+ for (k in o) {
+ h[k] = o[k];
}
- /*
- * 转码默认语言包
- */
- language=decodeURIString(language);
- /*
- * 检查是否在顶部引入了外部语言包文件,如果引入了,则使用外部语言包替换进language变量
- */
- if(!isUndefined(window.moeplayerLanguage)){
- language=mergeObj(language,window.moeplayerLanguage);
- }
- /*
- * 初始化注册事件函数,该函数的作用是将所有相关的事件都注册进一个变量newEvent
- * newEvent是提供给播放器外部监听函数使用的,如监听时间player.time(function(t){console.log('已播放:'+t);});
- */
- eventTarget();
- /*
- * 监听页面标签状态(判断是否失去焦点)
- */
- documentHidden(function(state){
- eventTarget('visibilityState',state);
- });
- /*
- * 判断平台类型,主要是判断是否是iphone类型的平台
- */
- app=getApp();
- /*
- * 简单复制一下初始化时的默认配置
- */
- varsTemp={};
- for(var key in videoObjectDefault){
- varsTemp[key]=videoObjectDefault[key];
- }
- /*
- * 如果初始化配置是字符串并且是以website:开头或url:开头的,则认为需要请求一个json文件来获取配置
- */
- if(valType(obj)=='string' && (obj.substr(0,8)=='website:' || obj.substr(0,4)=='url:')){
- var ajaxUrl='';
- if(obj.substr(0,8)=='website:'){
- ajaxUrl=obj.substring(8);
- }
- if(obj.substr(0,4)=='url:'){
- ajaxUrl=obj.substring(4);
- }
- ajax({url:ajaxUrl,success:function(data){
- if(data){
- return into(data);
- }
- else{
- showWindowsError(language['error']['ajax']+',url:'+ajaxUrl);
- return null;
- }
- }});
- }
- /*
- * 如果初始化配置是一个object,则进行下面的操作
- */
- else if(valType(obj)=='object'){
- varsTemp = standardization(varsTemp, obj);//将obj合并到varsTemp对象里
- if(!isUndefined(obj['container']) && obj['container']){
- CT=$(obj['container']);
- if(CT){//如果播放容器存在,则调用语言判断函数
- return loadLanguage(obj);
- }
- else{//如果播放容器不存在,则则等页面加载完成后运行
- return bodyReady(obj);
- }
- }
- else{//不存在播放容器配置则等页面加载完成后运行
- return bodyReady(obj);
- }
- }
- else{
- showWindowsError(language['error']['noVideoContainer']);
- return null;
- }
- },
- /*
- * bodyReady
- * 功能:页面加载完成后构建播放器
- * @obj=初始化时的配置对象
- */
- bodyReady=function (obj){
- documentReady(function(){
- if(!isUndefined(obj['container'])){
- CT=$(obj['container']);
- if(CT){//如果播放容器存在,则调用语言判断函数
- return loadLanguage(obj);
- }
- else{
- showWindowsError(language['error']['noVideoContainer']);
- return null;
- }
- }
- else{//不存在播放容器则重新判断
- return ajaxWebsite(obj);
- }
- });
- return null;
- },
- /*
- * ajaxWebsite
- * 功能:页面加载完成后重新初始化
- * @obj=初始化时的配置对象
- */
- ajaxWebsite=function (obj){
- if(valType(obj['video'])=='string' && (obj['video'].substr(0,8)=='website:' || obj['video'].substr(0,4)=='url:')){
- varsTemp = standardization(varsTemp, obj);
- var ajaxUrl='';
- if(obj['video'].substr(0,8)=='website:'){
- ajaxUrl=obj['video'].substring(8);
- }
- if(obj['video'].substr(0,4)=='url:'){
- ajaxUrl=obj['video'].substring(4);
- }
- ajax({url:ajaxUrl,success:function(data){
- if(data){
- return into(data);
- }
- else{
- showWindowsError(language['error']['ajax']+',url:'+ajaxUrl);
- return null;
- }
- }});
- }
- else{
- showWindowsError(language['error']['noVideoContainer']);
- return null;
- }
- },
- /*
- * loadLanguage
- * 功能:加载Language
- * @obj=初始化时的配置对象
- */
- loadLanguage=function (obj){
- vars = standardization(varsTemp, obj);
- if(vars['language']){
- var path=getPath('language')+vars['language']+'.js';
- loadJs(path,function(){
- if(!isUndefined(window['moeplayerLanguage'])){
- language=mergeObj(language,window['moeplayerLanguage']);
- }
- return embed(obj);
- });
- }
- else{
- return embed(obj);
- }
- },
- /*
- * embed
- * 功能:构建播放器
- * @obj=初始化时的配置对象
- */
- embed=function (obj){
- /*
- * 判断静音状态
- */
- mutedState=vars['volume']>0?false:true;
- if(!isUndefined(CT) && CT!=null){
- if(valType(CT)=='htmlarray'){
- CT=CT.eq(0);
- }
- }
- else{
- return null;
- }
- /*
- * 注册获取fps的函数
- */
- calculationFps();
- /*
- * 如果video指向一个已存在的video标签对象
- */
- existenceObj=valType(vars['video'])=='string' && ((vars['video'].substr(0,1)=='.' && vars['video'].indexOf('/')==-1) || vars['video'].substr(0,1)=='#');
- /*
- * 清空容器
- */
- if(existenceObj){
- CK=CT.find('.moeplayer')?CT.find('.moeplayer').eq(0):null;
- if(CK){
- CM=CK.find('.ck-main')?CK.find('.ck-main').eq(0):null;
- }
- if(CM){
- CV=CM.find('.ck-video')?CM.find('.ck-video').eq(0):null;
- }
- }
- if(!CK || !CM || !CV){
- CT.htm('');
- /*
- * 在播放容器里新建一个总的容器
- */
- CK=createlDiv('moeplayer');
- CT.append(CK);
- /*
- * 在总容器里再新建一个容器
- */
- CM=createlDiv('ck-main');
- CK.append(CM);
- /*
- * 新建一个放置video标签的容器
- */
- CV=createlDiv('ck-video');
- CM.append(CV);
- }
- /*
- * 如果已存在video.则先设置成空
- */
- if(video){
- video.remove();
- video=null;
- }
- /*
- * 如果video指向一个已存在的video标签对象,则直接调用该对象
- */
- if(existenceObj){
- video=$(vars['video'])?$(vars['video']).eq(0):null;
- }
- /*
- * 新建一个video标签
- */
- if(!video){
- video = createlVideo();
- video.attr('width','100%').attr('height','100%');
- CV.append(video);
- }
- video.volume=vars['volume'];
- if(vars['autoplay']){
- player.volume(0);
- player.muted();
- recoveryVolume=true;
- video.attr('autoplay','autoplay');
- paused=false;
- }
- else{
- video.attr('preload','metadata');
- }
- CT.loop=vars['loop'];
- if(CT.loop){
- video.attr('loop','loop');
- }
- if(vars['controls']){
- video.controls=true;
- }
- else{
- video.controls=false;
- }
- try{
- if(!existenceObj){
- video.attr('controlslist','nodownload');
- video.attr('x-webkit-airplay','true');
- video.attr('x5-video-orientation','portraint');
- video.attr('playsinline','true');
- video.attr('webkit-playsinline','true');
- video.attr('x5-playsinline','true');
- }
- if(vars['crossOrigin']){
- video.useCORS=true;//解决跨域
- video.crossOrigin=vars['crossOrigin'];//解决跨域
- }
- }
- catch(event){}
- /*
- * 默认设置支持小窗口模式
- */
- CT.smallWindows=true;
- /*
- * 默认设置不显示页面全屏按钮
- */
- CT.webFull=false;
- /*
- * 默认设置不显示剧场模式按钮
- */
- CT.theatre=false;
- /*
- * 加载播放器界面
- */
- loadFace();
- /*
- * 判断是否需要默认旋转视频
- */
- if(vars['rotate']>0){
- player.rotate(vars['rotate']);
- }
- /*
- * 判断是否需要默认缩放视频
- */
- if(vars['zoom']>0){
- player.zoom(vars['zoom']);
- }
- /*
- * 判断是否支持video标签
- */
- if(isUndefined(video.canPlayType)){
- CT.error={code:5,message:language['error']['supportVideoError']};
- eventTarget('error',CT.error);//注册监听error
- showError();
- return player;
- }
- /*
- * 注册视频播放器内部监听,监听到事件后注册给CT使用
- */
- addAllListener();
- /*
- * 如果需要在视频播放器加载成功后调用相关函数,此时则开始调用
- */
- if(!isUndefined(vars['loaded'])){
- if(valType(vars['loaded'])=='function'){
- try{
- vars['loaded'](player);
- }
- catch(event){}
- }
- else if(valType(vars['loaded'])=='string'){
- try{
- eval(vars['loaded']+ '(player)');
- }
- catch(event){}
- }
- }
- /*
- * 播放视频
- */
- if(!existenceObj){
- changeVideo(vars['video']);
- }
- else{
- changeVideo(video.attr('src'));
- }
- /*
- * 返回 播放器
- */
- return player;
- },
- /*
- * changeVideo
- * 功能:初始化视频地址或修改视频地址
- */
- changeVideo=function (vstr){
- var i=0;
- if(video.attr('src') || video.htm()){
- player.pause();
- }
- if(video.attr('src') && !existenceObj){
- video.attr('src','');
- video.removeAttr('src');
- }
- if(!isUndefined(video.textTracks) && video.textTracks.length>0){
- for(i=video.find('track').length-1;i>-1;i--){
- video.find('track').eq(i).remove();
- }
- }
- if(!existenceObj){
- video.htm('');
- }
- if(!isUndefined(vars['ad'])){
- ad=vars['ad'];
- }
- var source='';
- if(valType(vstr)=='string'){
- if(vstr.substr(0,8)=='website:' || vstr.substr(0,4)=='url:'){
- var ajaxUrl='';
- if(vstr.substr(0,8)=='website:'){
- ajaxUrl=vstr.substring(8);
- }
- if(vstr.substr(0,4)=='url:'){
- ajaxUrl=vstr.substring(4);
- }
- ajax({url:ajaxUrl,success:function(data){
- if(data!=null){
- vars = standardization(varsTemp, data);
- changeVideo(vars['video']);
- }
- else{
- CT.error={code:8,message:language['error']['ajax']};
- eventTarget('error',CT.error);//注册监听error
- showError();
- }
- }});
- return;
- }
- else{
- if(vars['plug'] && !canPlay(vstr)){
- plugPlayer(vstr);
- }
- else{
- if(!existenceObj){
- video.attr('src',vstr);
- }
- }
- loadTrack();
- }
- }
- else if(valType(vstr)=='array'){
- for(i=0;i1){
- source += '';
- }
- }
- }
- }
- if(source){
- video.htm(source);
- }
- loadTrack();
- }
- else if(valType(vstr)=='object'){
- if(vars['plug']){
- plugPlayer(vstr);
- }
- else{
- CT.error={code:10,message:language['error']['emptied']};
- eventTarget('error',CT.error);//注册监听error
- showError();
- }
- loadTrack();
- }
- if(!isUndefined(video.find('source')) && video.find('source').length>0){
- video.find('source').eq(video.find('source').length-1).addListener('error',videoHandler.error);
- }
- checkBar();
- loadLogo();
- if(isChangeDef){
- checkDefinition();
- }
- /*
- * 对cookie进行相关分析
- */
- if(vars['cookie']){
- if(valType(vars['cookie'])=='array' && vars['cookie'].length>=2){
- if(vars['cookie'][0] && valType(vars['cookie'][0])=='string'){
- cookieName=vars['cookie'][0];
- }
- if(vars['cookie'][1] && valType(vars['cookie'][1])=='number'){
- cookieTime=vars['cookie'][1];
- }
- }
- if(valType(vars['cookie'])=='object' && !isUndefined(vars['cookie']['name'])){
- cookieName=vars['cookie']['name'];
- if(!isUndefined(vars['cookie']['hour']) && valType(vars['cookie']['hour'])=='number'){
- cookieTime=vars['cookie']['hour'];
- }
- }
- if(valType(vars['cookie'])=='string'){
- cookieName=vars['cookie'];
- }
- if(cookieName){
- cookieName=cookieName.replace(/[ ]*,[ ]*|[ ]+/g, '').replace(/[ ]*;[ ]*|[ ]+/g, '');
- }
- }
- if(!isUndefined(vars['seek']) && !seekTime){
- if(valType(vars['seek'])=='number' && vars['seek']>0){
- seekTime=vars['seek'];
- }
- if(valType(vars['seek'])=='string' && vars['seek']=='cookie' && cookieName){
- var cke=player.cookie(cookieName);
- if(cke){
- seekTime=cke['time'];
- }
-
- }
- }
- },
- /*
- * plugPlayer
- * 功能:使用插件进行播放
- */
- plugPlayer=function (url){
- switch(vars['plug']){
- case 'hls.js':
- hlsPlayer(url);
- break;
- case 'flv.js':
- flvPlayer(url);
- break;
- case 'mpegts.js':
- mpegtsPlayer(url);
- break;
- case 'dash.js':
- dashPlayer(url);
- break;
- default:
- if(valType(vars['plug'])=='function'){
- vars['plug'](video,url);
- }
- else{
- CT.error={code:10,message:language['error']['emptied']};
- eventTarget('error',CT.error);//注册监听error
- showError();
- }
-
- break;
- }
- },
- /*
- * hlsPlayer
- * 功能:使用hls.js插件进行播放
- */
- hlsPlayer=function (url){
- var path=getPath('hls.js')+'hls.min.js';
- loadJs(path,function(){
- if (!isUndefined(Hls) && Hls.isSupported()) {
- hls = new Hls();
- hls.loadSource(url);
- hls.attachMedia(video);
- hls.on(Hls.Events.ERROR, function(event, data){
- var code=9;
- var message=language['error']['loadingFailed'];
- var fatal=data.fatal;
- if(!isUndefined(data.response)){
- if(!isUndefined(data.response.code)){
- code=data.response.code;
- }
- if(!isUndefined(data.response.text) && data.response.text){
- message=data.response.text;
- }
- else{
- if(!isUndefined(event)){
- message=event;
- }
- }
- }
- CT.error={code:code,message:message};
- eventTarget('error',CT.error);//注册监听error
- if(fatal){
- showError();
- }
- });
- }
- else if(canPlay(url)){
- video.attr('src',url);
- }
- });
- },
- /*
- * flvPlayer
- * 功能:使用flv.js插件进行播放
- */
- flvPlayer=function (url){
- var path=getPath('flv.js')+'flv.min.js';
- loadJs(path,function(){
- if (typeof(flvjs)!='undefined' && !isUndefined(flvjs) && flvjs.isSupported()) {
- var config={
- type: 'flv',
- url: url
- };
- if(valType(url)=='object'){
- config=url;
- }
- if(vars['live']){
- config['isLive']=true;
- }
- if(pugPlayer){
- pugPlayer.pause();
- pugPlayer.unload();
- pugPlayer.detachMediaElement();
- pugPlayer.destroy();
- pugPlayer=null;
- }
- pugPlayer = flvjs.createPlayer(config);
- pugPlayer.attachMediaElement(video);
- pugPlayer.load();
- pugPlayer.on(flvjs.Events.METADATA_ARRIVED, function(res){
- videoHandler.loadedMetaData();
- });
- pugPlayer.on(flvjs.Events.ERROR, function(errorType, errorDetail, errorInfo){
- CT.error={code:errorInfo['code'],message:errorInfo['msg']};
- eventTarget('error',CT.error);//注册监听error
- showError();
- });
- }
- });
- },
- /*
- * mpegtsPlayer
- * 功能:使用mpegts.js插件进行播放
- */
- mpegtsPlayer=function (url){
- var path=getPath('mpegts.js')+'mpegts.js';
- loadJs(path,function(){
- if (typeof(mpegts)!='undefined' && !isUndefined(mpegts) && mpegts.getFeatureList().mseLivePlayback) {
- var config={
- type: 'mse',
- url: url
- };
- if(valType(url)=='object'){
- config=url;
- }
- if(vars['live']){
- config['isLive']=true;
- }
- if(pugPlayer){
- pugPlayer.pause();
- pugPlayer.unload();
- pugPlayer.detachMediaElement();
- pugPlayer.destroy();
- pugPlayer=null;
- }
- pugPlayer = mpegts.createPlayer(config);
- pugPlayer.attachMediaElement(video);
- pugPlayer.load();
-
- pugPlayer.on(mpegts.Events.METADATA_ARRIVED, function(res){
- videoHandler.loadedMetaData();
- });
- pugPlayer.on(mpegts.Events.ERROR, function(errorType, errorDetail, errorInfo){
- CT.error={code:errorInfo['code'],message:errorInfo['msg']};
- eventTarget('error',CT.error);//注册监听error
- showError();
- });
- }
- });
- },
- /*
- * canPlay
- * 功能:判断是否能支持相关视频格式
- */
- canPlay=function(vStr,num){
- var vTypeArr=[
- {vidType:'video/ogg',codType:'theora, vorbis'},
- {vidType:'video/mp4',codType:'avc1.4D401E, mp4a.40.2'},
- {vidType:'video/mp4',codType:'avc1'},
- {vidType:'video/mp4',codType:'hevc'},
- {vidType:'video/webm',codType:'vp8.0, vorbis'},
- {vidType:'video/webm',codType:'vp9'},
- {vidType:'',codType:'application/x-mpegURL'},
- {vidType:'',codType:'application/vnd.apple.mpegurl'}
- ];
- var vType={
- ogg:vTypeArr[0],
- mp4:[vTypeArr[1],vTypeArr[2],vTypeArr[3]],
- webm:[vTypeArr[4],vTypeArr[5]],
- m3u8:[vTypeArr[6],vTypeArr[7]]
- };
- var arr=[];
- var k='';
- var supportType=function(obj){
- var vType=obj['vidType'];
- var str='';
- if(vType){
- str=vType+'; '+ 'codecs="' + obj['codType'] + '"';
- }
- else{
- str=obj['codType'];
- }
- var sup = video.canPlayType(str);
- if(sup == '') {
- sup = 'no';
- }
- return sup;
- };
- var getExtension=function(filepath) {
- return filepath.replace(/.+\./, '');
- };
- if(isUndefined(num)){
- if(valType(vStr)=='string'){
- if(vars['type']){
- for(k in vTypeArr){
- if(vTypeArr[k]['vidType']==vars['type']){
- arr.push(vTypeArr[k]);
- }
- }
- }
- else{
- if(getExtension(vStr) && getExtension(vStr) in vType){
- var temp=vType[getExtension(vStr)];
- if(valType(temp)=='array'){
- for(var i=0;i0){
- for(var i=0;icTime && arr[i][0]!=cookieName && y<19){
- tempArr.push(arr[i]);
- y++;
- }
- }
- arr=tempArr;
- }
- if(arr.length>0){
- cookie(moeplayerCookie,'delete',vars['domain'],vars['cookiePath']);
- cookie(moeplayerCookie,arrayToString(arr),vars['domain'],vars['cookiePath']);
- }
- cookieArray=arr;
- },
- /*
- * loadTrack
- * 功能:加载track
- */
- loadTrack=function(){
- if(isUndefined(video.textTracks)){
- return;
- }
- var i=0;
- if(!isUndefined(vars['track']) && valType(vars['track'])=='array' && !video.find('track')){
- var track='';
- var arr=vars['track'];
- C['bar']['track'].show();
- for(i=0;i';
- }
- if(video){
- var html=video.htm()+track;
- video.htm(html);
- }
- if(video.find('track') && !loadedTrack){
- loadedTrack=true;
- checkTrack();
- }
- }
- },
- /*
- * loadedMetaData
- * 功能:获取元数据后执行的函数
- */
- loadedMetaData=function(){
- eventTarget('loadedMetaData',{
- width:CK.getWidth(),
- height:CK.getHeight(),
- videoWidth:CT.videoWidth,
- videoHeight:CT.videoHeight,
- duration:duration,
- volume:CT.volume
- });
- eventTarget('duration',duration);
- if('error' in C){
- C['error'].hide();
- }
- replaceInformation('videoWidth',CT.videoWidth);
- replaceInformation('videoHeight',CT.videoHeight);
- replaceInformation('volume',parseInt(CT.volume*100));
- replaceInformation('duration',parseInt(duration));
- documentHidden(function(state){
- if(vars['documentFocusPause']){
- if(state=='show'){
- if(!focusPause && paused){
- player.play();
- }
- }
- else{
- focusPause=paused;
- player.pause();
- }
- }
- });
- };
- /*
- * videoHandler
- * 功能:视频播放对象video注册内部监听调用函数
- */
- var videoHandler={
- loadStart:function(){
- if(!vars['controls'] && app!='iphone'){
- C['loading'].show();
- }
- C['centerPlay'].hide();
- eventTarget('loadstart');
-
- },
- canPlay:function(){
- C['loading'].hide();
- eventTarget('canplay');
- },
- loadedData:function(){
- eventTarget('loadeddata');
- },
- loadedMetaData:function(){
- duration=this.duration;
- if(!isUndefined(this.duration) && vars['duration']){
- duration=vars['duration'];
- }
- if(!vars['live']){
- C['time'].htm(formatSeconds(this.currentTime)+'/'+formatSeconds(duration));
- C['tempTime'].htm(formatSeconds(this.currentTime)+'/'+formatSeconds(duration));
- }
- C['loading'].hide();
- if(vars['poster']){
- video.attr('poster',vars['poster']);
- }
- if(!vars['autoplay'] && !vars['controls']){
- C['centerPlay'].show();
- C['buffer'].hide();
- }
-
- CT.duration=duration;
- CT.videoWidth=this.videoWidth;
- CT.videoHeight=this.videoHeight;
- CT.volume=this.volume;
- if(CT.videoWidth || CT.videoHeight || duration){
- loadedMetaData();
- }
- var len = 0;
- if(!isUndefined(this.buffered)){
- len=this.buffered.length;
- }
- if(len>0){
- changeLoad();
- }
- if(!vars['live']){
- changePreview(vars['preview']);//修改预览图片
- }
- else{
- changePreview();//修改预览图片
- }
- if(!isUndefined(vars['prompt']) && valType(vars['prompt'])=='array' && !vars['live']){
- changePrompt();
- }
- else{
- deletePrompt();
- }
- if(isChangeDef){
- checkDefinition();
- isChangeDef=false;
- }
- pSliderMouseDown=false;
- loadedmetadataNum++;
- if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && ad['frontPlay'] && loadedmetadataNum>1){//如果是贴片广告播放中,则进行播放和计算
- player.play();
- calculationAdFrontTime(duration);//计算贴片广告的时间
- }
- if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && !ad['frontPlay']){//如果广告播放结束则播放正片
- player.volume(vars['volume']);
- player.play();
- }
- if(!vars['autoplay'] && loadMeta){
- loadMeta=false;
- player.pause();
- setTimeout(player.pause,300);
- }
- },
- timeUpDate:function(){//监听播放时间
- if(!waited){
- waited=true;
- C['buffer'].hide();
- eventTarget('buffer','end');
- }
- var len = this.buffered.length;
- if(len>0){
- changeLoad();
- }
- if(!duration && this.duration){
- duration=this.duration;
- CT.duration=duration;
- CT.videoWidth=this.videoWidth;
- CT.videoHeight=this.videoHeight;
- if(CT.videoWidth || CT.videoHeight || duration){
- loadedMetaData();
- }
- }
- oldTime=playTime;
- playTime=this.currentTime;
- if(maxSeeTime1){//如果是贴片广告播放中,则进行播放
- calculationAdFrontTime(duration-playTime);//计算贴片广告的时间
- }
- if(!isUndefined(C['error']) && C['error'].css('display')=='block'){
- C['error'].hide();
- }
- if(cookieName){
- changeCookie(playTime);
- }
- replaceInformation('audioDecodedByteCount',this.webkitAudioDecodedByteCount || this.audioDecodedByteCount || 0);
- replaceInformation('videoDecodedByteCount',this.webkitVideoDecodedByteCount || this.videoDecodedByteCount || 0);
- },
- ended:function(){//监听播放结束
- if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && ad['frontPlay']){//如果是贴片广告播放中,则用广告结束函数对此进行判断
- adFrontEnded();
- }
- else{
- C['bar']['playAndPause']['pause'].hide();
- C['bar']['playAndPause']['play'].hide();
- C['bar']['playAndPause']['refresh'].show();
- eventTarget('ended');
- showEnded();
- message();
- }
- },
- error:function(event){
- if(!isUndefined(event.type)){
- var errorInfo=this.error;
- var errorBak=function(){
- var code=12;
- var msg=language['error']['loadingFailed'];
- if(!isUndefined(errorInfo)){
- if(!isUndefined(errorInfo.code)){
- code=errorInfo.code;
- }
- if(!isUndefined(errorInfo.message)){
- msg=errorInfo.message;
- }
- CT.error={code:code,message:msg};
- showError();
- }
- else{
- CT.error={code:code,message:msg};
- if(event.target.attr('src')){
- showError();
- }
- }
- eventTarget('error',CT.error);//注册监听error
- };
- if(event.type=='error'){
- try{
- if(video.currentSrc){
- ajax({url:video.currentSrc,error:function(info){
- if(info && valType(info)=='object' && 'code' in info && info['code']){
- CT.error=info;
- eventTarget('error',CT.error);//注册监听error
- showError();
- }
- else{
- errorBak();
- }
- },success:function(data){
- if(!data){
- errorBak();
- }
- }});
- }
- else{
- errorBak();
- }
- }
- catch(event){
- errorBak();
- }
- }
- }
- },
- stalled:function(){
- eventTarget('stalled');//注册监听error
- CT.error={code:13,message:'load:stalled'};
- eventTarget('error',CT.error);//注册监听error
- },
- suspend:function(){
- eventTarget('suspend');//注册监听error
- },
- emptied:function(){
- eventTarget('emptied');//注册监听error
- CT.error={code:7,message:language['error']['emptied']};
- eventTarget('error',CT.error);//注册监听error
- },
- seeked:function(){
- if(paused){
- player.play();
- }
- pSliderMouseDown=false;
- eventTarget('seek',{time:this.currentTime,state:'seeked'});
- eventTarget('seeked');
- },
- seeking:function(){
- if(paused){
- player.play();
- }
- var seekingTime=this.currentTime;
- if(firstSeekTime==-1){
- firstSeekTime=seekingTime;//记录第一次拖动的时间
- }
- switch(vars['timeScheduleAdjust']){
- case 0://禁止拖动
- if(oldTime!=seekingTime){
- waitingMessage=false;
- player.seek(oldTime);
- message(language['timeScheduleAdjust']['prohibit']);
- return;
- }
- break;
- case 2://只能前进(向右拖动
- if(seekingTimeoldTime){
- waitingMessage=false;
- player.seek(oldTime);
- message(language['timeScheduleAdjust']['prohibitForward']);
- return;
- }
- break;
- case 4://只能前进但能回到第一次拖动时的位置
- if(seekingTimemaxSeeTime){
- waitingMessage=false;
- player.seek(maxSeeTime);
- message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
- return;
- }
- break;
- }
- eventTarget('seek',{time:seekingTime,state:'seeking'});
- eventTarget('seeking');
- if(!vars['live']){
- C['time'].htm(formatSeconds(seekingTime)+'/'+formatSeconds(duration));
- C['tempTime'].htm(formatSeconds(seekingTime)+'/'+formatSeconds(duration));
- }
-
- },
- waiting:function(){
- waited=false;
- eventTarget('buffer','start');//注册监听视频缓冲
- C['centerPlay'].hide();
- if(!vars['controls']){
- C['buffer'].show();
- }
- if(!waitingMessage){
- waitingMessage=true;
- }
- else{
- message(language['waiting']);
- }
-
- },
- play:function(){
- paused=false;
- C['bar']['playAndPause']['play'].hide();
- C['bar']['playAndPause']['pause'].show();
- C['bar']['playAndPause']['refresh'].hide();
- C['centerPlay'].hide();
- if(playType=='button'){
- C['bar']['pbox'].removeClass('ck-bar-progress-out');
- }
- else{
- C['bar']['pbox'].addClass('ck-bar-progress-out');
- }
- if(recoveryVolume){
- recoveryVolume=false;
- player.exitMuted();
- }
- hideBar();
- closePauseAd();//关闭暂停广告
- playType='';
- if(!isUndefined(C['ended'])){
- player.closeLayer(C['ended']);
- }
- if('error' in C){
- C['error'].hide();
- }
- eventTarget('play');
- if(!isUndefined(ad)){//如果存在广告
- if(!isUndefined(ad['front'])){//如果存在贴片广告
- if(isUndefined(ad['frontPlay'])){//如果贴片广告还未播放
- ad['frontPlayI']=0;
- ad['frontPlay']=true;//开始播放贴片广告
- player.pause();//暂停视频
- adFrontPlay();
- return;
- }
- }
- }
- if(seekTime && (isUndefined(vars['live']) || (!isUndefined(vars['live']) && valType(vars['live'])=='boolean' && !vars['live'])) && seekTime0 && mutedState){
- this.muted=false;
- }
- if(mutedState!=this.muted){
- mutedState=this.muted;
- changeMuted(this.muted);
- CT.muted=this.muted;
- eventTarget('muted',CT.muted);//注册静音事件
- }
- CT.volume=this.volume;
- eventTarget('volume',this.volume);//注册音量事件
- if(!isUndefined(C['bar']['vbox'])){
- var vol=parseInt(this.volume*100);
- C['bar']['vbox']['volume']['txt'].htm(vol);
- if(!C['bar']['vbox']['mouseDown']){
- changeVolumeSlider(this.muted?0:this.volume);
- }
- if(!this.muted){//如果非静音状态
- message(language['volume']+vol+'%');
- }
- }
- replaceInformation('volume',parseInt(this.volume*100));
- },
- resize:function(){
- var fullState = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement;
- if(fullState) {
- C['bar']['fullAndExit']['exitFull'].show();
- C['bar']['fullAndExit']['full'].hide();
- C['ad']['bottom']['fullAndExit']['exitFull'].show();
- C['ad']['bottom']['fullAndExit']['full'].hide();
- if(!CM.hasClass('ck-main-full')){
- CM.addClass('ck-main-full');
- }
- message(language['full']);
- C['bar']['webFullAndExit'].hide();
- C['bar']['theatreAndExit'].hide();
- if(!isUndefined(C['menu'])){
- CM.append(C['menu']);
- }
- }
- else {
- fullState=false;
- C['bar']['fullAndExit']['full'].show();
- C['bar']['fullAndExit']['exitFull'].hide();
- C['ad']['bottom']['fullAndExit']['full'].show();
- C['ad']['bottom']['fullAndExit']['exitFull'].hide();
- if(CM.hasClass('ck-main-full')){
- CM.removeClass('ck-main-full');
- }
- if(!isUndefined(vars['webFull']) && vars['webFull']){
- C['bar']['webFullAndExit'].show();
- }
- if(!isUndefined(vars['theatre']) && !CT.webFull){
- C['bar']['theatreAndExit'].show();
- }
- if(!isUndefined(C['menu'])){
- $('body').append(C['menu']);
- }
- if(CV.css('width')!=CM.css('width')){
- player.zoom(100);
- }
- }
- if(CT.full!=fullState){
- CT.full=fullState;
- eventTarget('full',fullState);//注册播放事件
- }
- checkVideoRotate();
- changeProgress(player.time());
- },
- keydown:function(event){
- event=window.event || event;
- var keycode = event.keyCode || event.which;
- var v=player.volume();
- var pre=function(){
- if(event.preventDefault){
- event.preventDefault();
- }
- else{
- event.returnValue = false;
- }
- };
- switch(keycode) {
- case 32:
- pre();
- player.playOrPause();
- break;
- case 37:
- player.fastBack();
- break;
- case 39:
- player.fastNext();
- break;
- case 38:
- if(valType(vars['keyVolume'])=='number' && (vars['keyVolume']==1 || (vars['keyVolume']==2 && CT.full))){
- pre();
- player.volume(v+.1<1?v+=.1:1);
- }
- break;
- case 40:
- if(valType(vars['keyVolume'])=='number' && (vars['keyVolume']==1 || (vars['keyVolume']==2 && CT.full))){
- pre();
- player.volume(v-.1>0?v-=.1:0);
- }
- break;
- default:
- break;
- }
- },
- mouseWheel:function(event){
- if(valType(vars['mouseWheelVolume'])=='number' && (vars['mouseWheelVolume']==1 || (vars['mouseWheelVolume']==2 && CT.full))){
- event=window.event || event;
- var v=player.volume();
- if(event.preventDefault){
- event.preventDefault();
- }
- else{
- event.returnValue = false;
- }
- if(event.wheelDelta) {
- if(event.wheelDelta > 0) {
- player.volume(v+.1<1?v+=.1:1);
- }
- if(event.wheelDelta < 0) {
- player.volume(v-.1>0?v-=.1:0);
- }
- } else if(event.detail) {
- if(event.detail > 0) {
- player.volume(v-.1>0?v-=.1:0);
- }
- if(event.detail < 0) {
- player.volume(v+.1<1?v+=.1:1);
- }
- }
- }
-
- }
- };
- /*
- * adFrontPlay
- * 功能:播放贴片广告
- */
- var adFrontPlay=function(){
- if(ad['frontPlayI']==0){//如果是播放第一个广告,则显示相关组件
- allBarHide(false);
- C['ad'].show();
- ad['front']['video']=false;//初始化,不包含视频广告
- //判断是否需要启用固定时间后关闭广告按钮
- if(!isUndefined(ad['front']['closeTime'])){
- if(ad['front']['closeTime']>0){
- C['ad']['top']['closeTime'].show();
- adFrontCloseTime();
- }
- else{
- C['ad']['top']['closeAd'].show();
- }
- }
- }
- if(!isUndefined(ad['front']['node']) && ad['front']['node']!=null){
- CM.append(ad['front']['node']);
- player.closeLayer(ad['front']['node']);
- ad['front']['node']=null;
- }
- C['ad']['picture'].htm('');
- C['ad']['picture'].hide();
- C['ad']['link'].hide();
- if(!isUndefined(ad['front']['list'][ad['frontPlayI']])){
- var adv=ad['front']['list'][ad['frontPlayI']];
- frontAdPlay=true;//贴片广告播放状态
- eventTarget('frontAd',adv);
- if(adv['type']=='picture'){
- adPicturePlay(adv);
- }
- else if(adv['type']=='node'){
- adNode(adv);
- }
- else{
- C['ad']['link'].attr('data-link',adv['link']);
- adVideoPlay(adv['file']);
- }
- if(!isUndefined(adv['link'])){
- C['ad']['bottom']['details'].show();
- C['ad']['bottom']['details'].htm(''+language['details']+'');
- }
- else{
- C['ad']['bottom']['details'].hide();
- }
- }
- },
- /*
- * adFrontCloseTime
- * 功能:播放贴片广告时按指定时间后显示关闭广告按钮
- */
- adFrontCloseTime=function(){
- if(!isUndefined(ad['front']['closeSetTime'])){
- clearTimeout(ad['front']['closeSetTime']);
- ad['front']['closeSetTime']=null;
- }
- C['ad']['top']['closeTime'].htmReplace('{seconds}',ad['front']['closeTime'],language['closeTime']);
- ad['front']['closeTime']--;
- if(ad['front']['closeTime']>0){
- ad['front']['closeSetTime']=setTimeout(adFrontCloseTime,1000);
- }
- else{
- C['ad']['top']['closeAd'].show();
- C['ad']['top']['closeTime'].hide();
- }
- },
- /*
- * calculationAdFrontTime
- * 功能:计算贴片广告倒计时时间以及广告是视频时用于倒计时
- */
- calculationAdFrontTime=function(t){
- if(!isUndefined(t)){
- ad['front']['list'][ad['frontPlayI']]['time']=t;
- }
- ad['front']['countDown']=0;
- for(var i=ad['frontPlayI'];i0){
- adv['time']--;
- ad['front']['countDown']--;
- C['ad']['top']['countDown'].htm(ad['front']['countDown']+language['second']);
- adFrontSetTime=setTimeout(adFrontCountDown,1000);
- }
- else{
- adFrontEnded();
- }
- },
- /*
- * adFrontEnded
- * 功能:贴片广告单个播放完成后进行判断是否需要播放下一个广告还是播放正片
- */
- adFrontEnded=function(){
- if(ad['frontPlayI']0 || h>0){
- if(adv['link']){
- var a=createlA('',adv['link']);
- a.append(this);
- C['ad']['picture'].append(a);
- }
- else{
- C['ad']['picture'].append(this)
- }
- img.unbind();
- img.click(function(){
- eventTarget('frontAdClick',adv);
- });
- }
- else{
- if(imgloadNum<10){
- imgloadNum++;
- imgLoadHandler();
- }
- }
- });
- };
- imgLoadHandler();
- calculationAdFrontTime();//计算时间
- adFrontCountDown();//开启倒计时
- C['ad']['bottom']['mutedAndExit'].hide();
- },
- /*
- * adNode
- * 功能:贴片广告播放外部节点
- */
- adNode=function(adv){
- if(isUndefined(adv['content'])) return;
- ad['front']['node']=player.layer(adv);
- ad['front']['node'].css({'z-index':1});
- C['ad'].append(ad['front']['node']);
- ad['front']['node'].unbind();
- ad['front']['node'].click(function(){
- eventTarget('frontAdClick',adv);
- });
- calculationAdFrontTime();//计算时间
- adFrontCountDown();//开启倒计时
- C['ad']['bottom']['mutedAndExit'].hide();
- },
- /*
- * frontVideoClickHandler
- * 功能:视频广告上方层单击事件
- */
- frontVideoClickHandler=function(){
- var url=C['ad']['link'].attr('data-link');
- window.open(url,'_blank');
- },
- /*
- * closeFrontAd
- * 功能:关闭贴片广告
- */
- closeFrontAd=function(){
- if(!isUndefined(ad) && !isUndefined(ad['front']) && !isUndefined(ad['front']['closeButtonClick'])){
- if(valType(ad['front']['closeButtonClick'])=='function'){
- try{
- ad['front']['closeButtonClick']();
- }
- catch(event){console.error(event);}
- }
- else if(valType(ad['front']['closeButtonClick'])=='string'){
- try{
- eval(ad['front']['closeButtonClick']+ '()');
- }
- catch(event){console.error(event);}
- }
- }
- else{
- player.closeFrontAd();
- }
- },
- /*
- * adPausePlay
- * 功能:播放暂停广告
- */
- adPausePlay=function(){
- closePauseAd();
- if(!isUndefined(ad) && !isUndefined(ad['pause']) && !isUndefined(ad['pause']['list']) && ad['pause']['list'].length-1>=ad['pausePlayI']){
- var adv=ad['pause']['list'][ad['pausePlayI']];
- if(!isUndefined(ad['pause']['close']) && ad['pause']['close']){
- ad['pauseClose']=createlButton('ck-pause-close');
- ad['pauseClose'].click(function(){
- C['centerPlay'].show();
- C['buffer'].hide();
- closePauseAd();
- });
- }
- if(!isUndefined(adv['file'])){//图片
- var img = null;
- var imgloadNum=0;
- var imgLoadHandler=function(){
- img = createlImg(adv['file']);
- C['adPause'].show();
- C['adPause'].htm('');
- C['adPause'].append(img);
- img.addListener('load',function(){
- var w=this.getWidth(),h=this.getHeight();
- if(w>0 || h>0){
- C['adPause'].htm('');
- if(adv['link']){
- var a=createlA('',adv['link']);
- a.append(this);
- C['adPause'].append(a);
- }
- else{
- C['adPause'].append(this)
- }
-
- C['adPause'].css({
- 'width':w+'px',
- 'height':h+'px'
- });
- if(ad['pauseClose']){
- C['adPause'].append(ad['pauseClose']);
- }
- img.click(function(){
- eventTarget('pauseAdClick',adv);
- });
- }
- else{
- if(imgloadNum<10){
- imgloadNum++;
- imgLoadHandler();
- }
- }
- });
- };
- imgLoadHandler();
- }
- else if(!isUndefined(adv['content'])){
- ad['pause']['node']=player.layer(adv);
- if(ad['pauseClose']){
- ad['pause']['node'].append(ad['pauseClose']);
- }
- ad['pause']['node'].click(function(){
- eventTarget('pauseAdClick',adv);
- });
- }
- eventTarget('pauseAd',adv);
- if(!isUndefined(adv['time']) && adv['time']>0){
- adPauseSetTime=setTimeout(function(){
- ad['pausePlayI']++;
- if(ad['pausePlayI']>ad['pause']['list'].length-1){
- ad['pausePlayI']=0;
- }
- adPausePlay();
- },adv['time']*1000)
- }
- }
- },
- /*
- * closePauseAd
- * 功能:关闭暂停广告
- */
- closePauseAd=function(){
- if(adPauseSetTime){
- clearTimeout(adPauseSetTime);
- adPauseSetTime=null;
- }
- C['adPause'].hide();
- if(!isUndefined(ad) && !isUndefined(ad['pauseClose']) && ad['pauseClose']!=null){
- ad['pauseClose'].remove();
- ad['pauseClose']=null;
- }
- if(!isUndefined(ad) && !isUndefined(ad['pause']) && !isUndefined(ad['pause']['node']) && ad['pause']['node']){
- ad['pause']['node'].unbind();
- player.closeLayer(ad['pause']['node']);
- eventTarget('pauseAdClose');
- }
- };
- /*
- * player
- * 功能:开放接口,向外部提供播放器的交互功能列表,包含获取,执行,监听这三种功能
- */
- var player={
- /*
- * width
- * 功能:获取或设置播放器宽度
- * 这是一个动态的值,会随着全屏切换或播放器本身尺寸变化而变化
- * @value,支持数字,字符,当存在@value时则设置播放器宽度,@value为空时则获取播放器宽度
- */
- width:function(value){
- if(!isUndefined(value)){
- if(valType(value)=='number'){
- value+='px';
- }
- CT.css({'width':value});
- checkVideoRotate();
- }
- return CK.getWidth();
- },
- /*
- * height
- * 功能:获取或设置播放器显示高度
- * 这是一个动态的值,会随着全屏切换或播放器本身尺寸变化而变化
- * @value,支持数字,字符,当存在@value时则设置播放器高度,@value为空时则获取播放器高度
- */
- height:function(value){
- if(!isUndefined(value)){
- if(valType(value)=='number'){
- value+='px';
- }
- CT.css({'height':value});
- checkVideoRotate();
- }
- return CK.getHeight();
- },
- /*
- * videoWidth
- * 功能:获取视频本身的宽度,这是一个固定值
- */
- videoWidth:function(){
- if(video){
- return video.videoWidth;
- }
- return null;
- },
- /*
- * videoHeight
- * 功能:获取视频本身的高度,这是一个固定值
- */
- videoHeight:function(){
- if(video){
- return video.videoHeight;
- }
- return null;
- },
- /*
- * height
- * 功能:获取或设置播放器显示高度
- * 这是一个动态的值,会随着全屏切换或播放器本身尺寸变化而变化
- * @value,支持数字,字符,当存在@value时则设置播放器高度,@value为空时则获取播放器高度
- */
- zoom:function(fn){
- if(!isUndefined(fn)){
- if(valType(fn)=='function'){
- newEvent.addEventListener('zoom',fn);
- }
- if(valType(fn)=='number'){
- var arr=[C['topBar']['zoomEle']['zoom50'],C['topBar']['zoomEle']['zoom75'],C['topBar']['zoomEle']['zoom100']];
- for(var i=0;ifn && fn>0){
- rot=arr[fn];
- }
- else{
- if(arr.indexOf(fn)>-1){
- rot=fn;
- }
- }
- if(rot!=nowRotate){
- eventTarget('rotate',rot);
- nowRotate=rot;
- checkVideoRotate();//调整视频尺寸
- }
- }
- }
- },
- /*
- * vars
- * 提供给播放器外部使用
- * 修改vars,动态切换视频地址
- * @obj为新的播放配置对象
- */
- vars:function(obj,val){
- if(isUndefined(obj)){
- return;
- }
- if(valType(obj)=='string' && !isUndefined(val)){
- var temp={};
- temp[obj]=val;
- obj=temp;
- }
- var isChange=false;
- for(var k in obj){
- if(k in vars && obj[k]!=vars[k]){
- isChange=true;
- break;
- }
- }
- if(isChange){
- vars = standardization(vars, obj);
- }
- if(!isUndefined(obj['video'])){
- isChangeDef=true;
- changeVideo(vars['video']);
- }
- if(!isUndefined(obj['title'])){
- C['topBar']['titleEle'].htm(obj['title']);
- }
- },
- /*
- * 提供给播放器外部使用
- * 功能:监听视频准备加载
- */
- loadstart:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('loadstart',fn);
- }
- },
- /*
- * 提供给播放器外部使用
- * 功能:监听视频加载
- */
- loadeddata:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('loadeddata',fn);
- }
- },
- /*
- * 提供给播放器外部使用
- * 功能:监听视频元数据加载成功
- */
- loadedMetaData:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('loadedMetaData',fn);
- }
- },
- /*
- * 提供给播放器外部使用
- * 功能:监听视频可以播放
- */
- canplay:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('canplay',fn);
- }
- },
- /*
- * 提供给播放器外部使用
- * 功能:执行播放操作/监听播放
- * @fn为函数时则监听视频播放,@fn为空时,则控制视频播放
- */
- play:function(fn){
- if(valType(fn)=='object'){
- if(fn['target']==C['bar']['playAndPause']['play'] || fn['target']==C['bar']['playAndPause']['refresh']){
- playType='button';
- }
- }
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('play',fn);
- }
- else{
- if(loadedmetadataNum>0 && video){
- try{video.play();}catch(event){console.error(event)}
- }
- }
- return player;
- },
- /*
- * puase
- * 功能:执行暂停操作/监听暂停
- * @fn为函数时则监听视频暂停,@fn为空时,则控制视频暂停
- */
- pause:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('pause',fn);
- }
- else{
- if(loadedmetadataNum>0 && video){
- try{video.pause();}catch(event){console.error(event)}
- }
- }
- return player;
- },
- /*
- * playOrPause
- * 功能:在播放和暂停动作之间进行切换
- */
- playOrPause:function(){
- if(paused){
- player.play();
- }
- else{
- player.pause();
- }
- return player;
- },
- /*
- * volume
- * 功能:调节和监听以及获取音量
- * @fn为函数时,则进行音量变化的监听,@fn为数字时,则进行音量调节,@fn为空时,则获取当前音量
- */
- volume:function(fn){
- if(!isUndefined(fn)){
- if(valType(fn)=='function'){
- newEvent.addEventListener('volume', fn);
- }
- else if(valType(fn)=='number' && video){
- if(fn<0)fn=0;
- if(fn>1)fn=1;
- if(video.muted){
- video.volume=fn*.5;
- }
- video.volume=fn;
- }
- }
- else if(video){
- return video.volume;
- }
- return player;
- },
- /*
- * muted
- * 功能:执行静音操作/监听静音
- * @fn为函数时则监听视频静音,@fn为空时,则控制视频静音
- */
- muted:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('muted', fn);
- }
- else if(video){
- video.muted=true;
- }
- return player;
- },
- /*
- * exitMuted
- * 功能:执行取消静音操作
- */
- exitMuted:function(){
- if(video){
- video.muted=false;
- if(video.volume==0){
- player.volume(vars['volume']>0?vars['volume']:.8);
- }
- }
- return player;
- },
- /*
- * time
- * 功能:获取当前播放时间/监听播放时间
- * @fn为函数时监听当前播放时间,为空时获取当前播放时间
- */
- time:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('time',fn);
- }
- else if(video){
- return video.currentTime || 0;
- }
- },
- /*
- * seek
- * 功能:监听跳转/执行跳转操作
- * @fn为函数时则监听视频跳转动作,@fn为数字时执行跳转操作
- */
- seek:function(fn){
- if(!isUndefined(fn)){
- if(valType(fn)=='function'){
- newEvent.addEventListener('seek',fn);
- }
- if(valType(fn)=='number' && video){
- switch(vars['timeScheduleAdjust']){
- case 0://禁止拖动
- message(language['timeScheduleAdjust']['prohibit']);
- return;
- break;
- case 1://可以拖动
- break;
- case 2://只能前进(向右拖动
- if(fnoldTime){
- message(language['timeScheduleAdjust']['prohibitForward']);
- return;
- }
- break;
- case 4://只能前进但能回到第一次拖动时的位置
- if(fnmaxSeeTime){
- waitingMessage=false;
- video.currentTime=maxSeeTime;
- message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
- return;
- }
- break;
- }
- pSliderMouseDown=false;
- video.currentTime=fn;
- }
- }
- return player;
- },
- /*
- * buffer
- * 功能:监听视频缓冲
- * @fn为监听执行的函数
- */
- buffer:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('buffer',fn);
- }
- return player;
- },
- /*
- * ended
- * 功能:监听视频播放结束
- * @fn为监听执行的函数
- */
- ended:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('ended',fn);
- }
- return player;
- },
- /*
- * 提供给播放器外部使用
- * 功能:监听点击下一集按钮的动作
- */
- next:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('next',fn);
- }
- return player;
- },
- /*
- * error
- * 功能,监听播放器在加载视频过程和播放视频过程中出现的错误
- * @fn为监听执行的函数
- */
- error:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('error',fn);
- }
- return player;
- },
- /*
- * emptied
- * 功能,监听播放器播放的视频文件发生故障并且文件突然不可用时
- * @fn为监听执行的函数
- */
- emptied:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('emptied',fn);
- }
- return player;
- },
- /*
- * duration
- * 功能:获取视频总时间/监听视频总时间
- * @fn为函数时执行监听视频总时间,为空时获取视频总时间
- */
- duration:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('duration',fn);
- }
- else{
- return duration || 0;
- }
- },
- /*
- * playbackRate
- * 功能:监听或返回视频播放速度
- * @fn为函数时执行监听视频播放速度,为数字时切换播放速度,为空时获取视频播放速度
- */
- playbackRate:function(fn){
- if(!isUndefined(fn)){
- if(valType(fn)=='function'){
- newEvent.addEventListener('playbackRate',fn);
- }
- else if(valType(fn)=='number' && video){
- video.playbackRate=fn;
- CT.playbackRate=fn;
- eventTarget('playbackRate',fn);
- changePlaybackrateVal(fn);
- }
-
- }
- else{
- return video.playbackRate;
- }
- },
- /*
- * track
- * 功能:监听或返回视频的字幕
- * @fn为函数时执行监听视频字幕,为数字时切换字幕,为空时获取字幕
- */
- track:function(fn){
- if(!isUndefined(fn)){
- if(valType(fn)=='function'){
- newEvent.addEventListener('track',fn);
- }
- else if(valType(fn)=='number' && video){
- var track=null;
- if(!isUndefined(video.textTracks)){
- track=video.textTracks;
- }
- if(track && valType(track)=='texttracklist'){
- var arr=vars['track'];
- for(var i=track.length-1;i>-1;i--){
- video.find('track').eq(i).remove();
- }
- for(var i=0;i';
- }
- if(video){
- var html=video.htm()+track;
- video.htm(html);
- }
- changeTrackVal(fn);
- }
- }
-
- }
- else{
- return CT.track;
- }
- },
- /*
- * fastBack
- * 功能:快退
- * @num为数字时快退指定秒数,为空时快退20秒
- */
- fastBack:function(num){
- if(duration==0) return;
- if(isUndefined(num) || valType(num)!='number'){
- num=20;
- }
- var time=player.time();
- if(time-num>0){
- time-=num;
- }
- else{
- time=0;
- }
- player.seek(time);
- return player;
- },
- /*
- * fastNext
- * 功能:快进
- * @num为数字时快进指定秒数,为空时快进20秒
- */
- fastNext:function(num){
- if(duration==0) return;
- if(isUndefined(num) || valType(num)!='number'){
- num=20;
- }
- var time=player.time();
- if(time+num200) zIndex=200;
- if(isUndefined(ele.cssDisplay)){
- ele.cssPosition=ele.css('position');
- ele.cssDisplay=ele.css('display');
- }
- ele.css({
- 'position': 'absolute',
- 'z-index':zIndex
- });
- if(!cBar){
- CM.append(ele);
- }
- else{
- C['bar'].append(ele);
- }
- ele.CK=CK;
- ele.show();
- }
- return ele;
- },
- /*
- * closeLayer
- * 功能:关闭一个层
- */
- closeLayer:function(ele){
- if(valType(ele)=='string'){
- var temp=$(ele);
- if(!isUndefined(temp)){
- if(temp.length>0){
- ele=temp.eq(0);
- }
- }
- }
- if(!isUndefined(ele) && valType(ele)=='htmlobject'){
- if(!isUndefined(ele.captureParentNode)){
- var eleP=ele.captureParentNode;
- if (ele.nextElement) {
- try {
- eleP.insertBefore(ele, ele.nextElement);
- }
- catch (event) {
- eleP.append(ele);
- }
- }
- else if (ele.prevElement) {
- try {
- eleP.insertAfter(ele, ele.prevElement);
- }
- catch (event) {
- eleP.append(ele);
- }
- }
- else {
- eleP.append(ele);
- }
- ele.css({'display':ele.cssDisplay});
- }
- else{
- ele.remove();
- }
- if(!isUndefined(ele.cssDisplay)){
- ele.css({
- 'display':ele.cssDisplay,
- 'position':ele.cssPosition
- });
- }
- }
- return player;
- },
- /*
- * message
- * 在播放器内部显示一条提示信息
- */
- message:function(str){
- message(str);
- return player;
- },
- /*
- * closeFrontAd
- * 功能:关闭贴片广告
- */
- closeFrontAd:function(){
- if(frontAdPlay && !isUndefined(ad) && !isUndefined(ad['front']) && !isUndefined(ad['front']['list'])){
- ad['frontPlayI']=ad['front']['list'].length-1;
- adFrontEnded();
- clearAdFrontSetTime();
- }
- return player;
- },
- /*
- * addListener
- * 功能:监听功能
- */
- addListener:function(name,fn){
- newEvent.addEventListener(name,fn);
- },
- /*
- * removeListener
- * 功能:监听功能
- */
- removeListener:function(name,fn){
- newEvent.removeEventListener(name,fn);
- },
- /*
- * bar
- * 功能:显示/关闭底部控制栏
- */
- bar:function(bool){
- barShow=bool;
- if(bool){
- C['bar'].show();
- }
- else{
- C['bar'].hide();
- }
- },
- /*
- * rightBar
- * 功能:显示/关闭右边控制栏
- */
- rightBar:function(bool){
- rightBarShow=bool;
- if(bool){
- C['rightBar'].show();
- }
- else{
- C['rightBar'].hide();
- }
- },
- /*
- * mouseActive
- * 功能,监听鼠标是否经过播放器
- */
- mouseActive:function(fn){
- if(!isUndefined(fn) && valType(fn)=='function'){
- newEvent.addEventListener('mouseActive',fn);
- }
- return this;
- },
- /*
- * cookie
- * 功能,读取cookie
- */
- cookie:function(name){
- if(name=='delete'){
- cookie(moeplayerCookie,'delete',vars['domain']);
- return null;
- }
- if(!isUndefined(name) && name){
- name=name.replace(/[ ]*,[ ]*|[ ]+/g, '').replace(/[ ]*;[ ]*|[ ]+/g, '');
- }
- var cStr=cookie(moeplayerCookie);
- if(cStr){
- var arr=stringToArray(cStr);
- var tempArr=[];
- var cTime=parseInt(Date.now()*0.001);
- for(i=0;icTime){
- tempArr.push(arr[i]);
- }
- }
- arr=tempArr;
- if(arr.length>0){
- cookie(moeplayerCookie,'delete',vars['domain'],vars['cookiePath']);
- cookie(moeplayerCookie,arrayToString(arr),vars['domain'],vars['cookiePath']);
- for(var i=0;i-1;i--){
- var pTemp=createlButton('ck-list-p',playbackrate[i]+language['playbackrateSuffix']);
- pTemp.attr('data-i',i).attr('data-val',playbackrate[i]);
- C['bar']['playbackrate']['bg']['p'].push(pTemp);
- C['bar']['playbackrate']['bg'].append(pTemp);
- pTemp.click(playbackrateClick);
- }
- C['bar']['playbackrate'].hide();
- if(!isUndefined(vars['playbackrateOpen']) && vars['playbackrateOpen']){
- C['bar']['playbackrate'].show();
- C['bar']['playbackrate']['bgbox'].show();
- var w=C['bar']['playbackrate']['bg'].getWidth(),h=C['bar']['playbackrate']['bg'].getHeight();
- var bw=C['bar']['playbackrate']['button'].getWidth();
- C['bar']['playbackrate']['bg'].css({'width':w+10+'px'});
- w=C['bar']['playbackrate']['bg'].getWidth();
- if(getBarHeight()>C['bar'].getHeight()){
- h+=(getBarHeight()-C['bar'].getHeight());
- }
- C['bar']['playbackrate']['bgbox'].attr('style','');
- C['bar']['playbackrate']['bgbox'].css({
- 'width':w+'px',
- 'height':(h+2)+'px',
- 'left':-(w-bw)*0.5+'px'
- });
- C['bar']['playbackrate']['button'].mouseover(function(){
- w=C['bar']['playbackrate']['bg'].getWidth();
- bw=C['bar']['playbackrate']['button'].getWidth();
- C['bar']['playbackrate']['bgbox'].css({
- 'left':-(w-bw)*0.5+'px'
- });
- });
- changePlaybackrateVal(pbr);
- }
- },
- /*
- * playbackrateClick
- * 功能:选择播速
- */
- playbackrateClick=function(e){
- C['bar']['playbackrate']['bgbox'].hide();
- setTimeout(function(){C['bar']['playbackrate']['bgbox'].removeCss('display');},300);
- message(language['switchTo']+$(this).htm());
- player.playbackRate(parseFloat($(this).attr('data-val')));
- },
- /*
- * changePlaybackrateVal
- * 功能:根据速度检查播速
- */
- changePlaybackrateVal=function(num){
- C['bar']['playbackrate']['bg'].find('button').each(function(index,ele){
- var val=parseFloat(ele.attr('data-val'));
- ele.removeClass('ck-list-p-focus');
- if(num==val){
- ele.addClass('ck-list-p-focus');
- if(num!=1){
- C['bar']['playbackrate']['button'].htm(ele.htm());
- }
- else{
- C['bar']['playbackrate']['button'].htm(language['playbackrate']);
- }
- }
- else{
- ele.removeClass('ck-list-p-focus');
- }
- });
- },
- /*
- * checkTrack
- * 功能:初始化或重置字幕组件内容
- */
- checkTrack=function(){
- var track=vars['track'];
- var pbr=-1;
- C['bar']['track']['bgbox'].htm('');
- C['bar']['track']['bg']=createlDiv('ck-list-bg');
- C['bar']['track']['bgbox'].append(C['bar']['track']['bg']);
- C['bar']['track']['bg']['p']=[];
- var pTemp=null;
- for(var i=track.length-1;i>-1;i--){
- pTemp=createlButton('ck-list-p',track[i]['label']);
- pTemp.attr('data-i',i).attr('data-title',track[i]['label']);
- C['bar']['track']['bg']['p'].push(pTemp);
- C['bar']['track']['bg'].append(pTemp);
- if(!isUndefined(track[i]['default']) && track[i]['default']){
- pbr=i;
- }
- pTemp.click(trackClick);
- }
- //
- pTemp=createlButton('ck-list-p',language['noTrack']);
- pTemp.attr('data-i',-1).attr('data-title',language['noTrack']);
- C['bar']['track']['bg']['p'].push(pTemp);
- C['bar']['track']['bg'].append(pTemp);
- pTemp.click(trackClick);
- //
- C['bar']['track'].hide();
- C['bar']['track'].show();
- C['bar']['track']['bgbox'].show();
- var w=C['bar']['track']['bg'].getWidth(),h=C['bar']['track']['bg'].getHeight();
- var bw=C['bar']['track']['button'].getWidth();
- C['bar']['track']['bg'].css({'width':w+10+'px'});
- w=C['bar']['track']['bg'].getWidth();
- if(getBarHeight()>C['bar'].getHeight()){
- h+=(getBarHeight()-C['bar'].getHeight());
- }
- C['bar']['track']['bgbox'].attr('style','');
- C['bar']['track']['bgbox'].css({
- 'width':w+'px',
- 'height':(h+2)+'px',
- 'left':-(w-bw)*0.5+'px'
- });
- C['bar']['track']['button'].mouseover(function(){
- w=C['bar']['track']['bg'].getWidth();
- bw=C['bar']['track']['button'].getWidth();
- C['bar']['track']['bgbox'].css({
- 'left':-(w-bw)*0.5+'px'
- });
- });
- changeTrackVal(pbr);
- },
- /*
- * trackClick
- * 功能:选择字幕
- */
- trackClick=function(e){
- C['bar']['track']['bgbox'].hide();
- setTimeout(function(){C['bar']['track']['bgbox'].removeCss('display');},300);
- message(language['switchTo']+$(this).attr('data-title'));
- player.track(parseFloat($(this).attr('data-i')));
- },
- /*
- * changeTrackVal
- * 功能:根据字幕检查
- */
- changeTrackVal=function(num){
- C['bar']['track']['bg'].find('button').each(function(index,ele){
- var i=parseInt(ele.attr('data-i'));
- if(num==i){
- C['bar']['track']['button'].htm(ele.attr('data-title'));
- if(i>-1){
- CT.track=vars['track'][i];
- eventTarget('track',vars['track'][i]);
- }
- else{
- CT.track=null;
- eventTarget('track',null);
- }
- ele.addClass('ck-list-p-focus');
- }
- else{
- ele.removeClass('ck-list-p-focus');
- }
- });
- },
- /*
- * checkDefinition
- * 功能:初始化或重置清晰度组件内容
- */
- checkDefinition=function(){
- var pi=-1;
- var videoUrl=video['currentSrc'];
- if(!isUndefined(C['bar']['definition']['bg'])){
- C['bar']['definition']['bgbox'].htm('');
- C['bar']['definition']['bgbox'].attr('style','');
- C['bar']['definition']['button'].htm(language['definition']);
- }
- if(valType(vars['video'])=='array'){
- var arr=vars['video'];
- C['bar']['definition']['bg']=createlDiv('ck-list-bg');
- C['bar']['definition']['bgbox'].append(C['bar']['definition']['bg']);
- C['bar']['definition']['bg']['p']=[];
- for(var i=arr.length-1;i>-1;i--){
- var pTemp=createlButton('ck-list-p',arr[i][2]);
- pTemp.attr('data-i',i).attr('data-video',arr[i][0]).attr('data-type',arr[i][1]).attr('data-title',arr[i][2]);
- C['bar']['definition']['bg']['p'].push(pTemp);
- C['bar']['definition']['bg'].append(pTemp);
- if(videoUrl && videoUrl.indexOf(arr[i][0])>-1){
- pi=i;
- }
- pTemp.click(definitionClick);
- }
- C['bar']['definition'].show();
- C['bar']['definition']['bgbox'].show();
- var w=C['bar']['definition']['bg'].getWidth(),h=C['bar']['definition']['bg'].getHeight();
- var bw=C['bar']['definition']['button'].getWidth();
- C['bar']['definition']['bg'].css({'width':w+10+'px'});
- w=C['bar']['definition']['bg'].getWidth();
- if(getBarHeight()>C['bar'].getHeight()){
- h+=(getBarHeight()-C['bar'].getHeight());
- }
- C['bar']['definition']['bgbox'].attr('style','');
- C['bar']['definition']['bgbox'].css({
- 'width':w+'px',
- 'height':(h+2)+'px',
- 'left':-(w-bw)*0.5+'px'
- });
- C['bar']['definition']['button'].mouseover(function(){
- w=C['bar']['definition']['bg'].getWidth();
- bw=C['bar']['definition']['button'].getWidth();
- C['bar']['definition']['bgbox'].css({
- 'left':-(w-bw)*0.5+'px'
- });
- });
- }
- if(pi>-1){
- C['bar']['definition']['bg'].find('button').each(function(index,ele){
- var i=parseInt(ele.attr('data-i'));
- if(pi==i){
- ele.addClass('ck-list-p-focus');
- }
- else{
- ele.removeClass('ck-list-p-focus');
- }
- });
- }
- },
- /*
- * definitionClick
- * 功能:选择清晰度
- */
- definitionClick=function(e){
- C['bar']['definition']['bgbox'].hide();
- setTimeout(function(){
- C['bar']['definition']['bgbox'].removeCss('display');
- },300);
- changeDefinition(parseInt($(this).attr('data-i')));
- },
- /*
- * changeDefinition
- * 功能:检查清晰度
- */
- changeDefinition=function(num){
- C['bar']['definition']['bg'].find('button').each(function(index,ele){
- var i=parseInt(ele.attr('data-i'));
- if(num==i){
- if(!isUndefined(video.textTracks) && video.textTracks.length>0){
- for(var y=video.find('track').length-1;y>-1;y--){
- video.find('track').eq(y).remove();
- }
- }
- seekTime=player.time();
- video.attr('autoplay','autoplay');
- changeVideo(ele.attr('data-video'));
- message(language['switchTo']+ele.htm());
- C['bar']['definition']['button'].htm(ele.htm());
- ele.addClass('ck-list-p-focus');
- eventTarget('definition',{id:i,video:ele.attr('data-video'),title:ele.attr('data-title')});
- }
- else{
- ele.removeClass('ck-list-p-focus');
- }
- });
- },
- /*
- * deletePrompt
- * 功能:删除关键点
- */
- deletePrompt=function(){
- var i=0;
- if(!isUndefined(C['prompt']) && valType(C['prompt'])=='array'){
- for(i=C['prompt'].length;i>-1;i--){
- if(!isUndefined(C['prompt'][i])){
- C['prompt'][i].remove();
- }
- }
- C['prompt']=null;
- }
- C['prompt']=[];
- },
- /*
- * changePrompt
- * 功能:构建关键点
- */
- changePrompt=function(){
- deletePrompt();
- for(var i=0;i100) left=100;
- ele.css({'left':left+'%'});
- ele.mouseover(function(){
- if(this.attr('data-words')){
- showPromptWords(this);
- }
- });
- ele.mouseout(function(){
- if(this.attr('data-words')){
- showPromptWords();
- }
- });
- C['prompt'].push(ele);
- }
- }
- },
- /*
- * showPromptWords
- * 功能:显示关键点提示
- */
- showPromptWords=function(ele){
- if(isUndefined(C['promptWords'])){
- C['promptWords']=createlDiv('ck-prompt-words');
- CM.append(C['promptWords']);
- C['promptWords']['content']=createlDiv('ck-prompt-content');
- C['promptWords'].append(C['promptWords']['content']);
- }
- if(isUndefined(ele)){
- C['promptWords']['content'].htm('');
- C['promptWords'].hide();
- return;
- }
- C['promptWords']['content'].htm(ele.attr('data-words'));
- C['promptWords'].show();
- var pW=C['promptWords'].getWidth(),pH=C['promptWords'].getHeight();
- var bg=C['bar']['pbox']['bg'];
- var time=parseFloat(ele.attr('data-time'));
- var top=CK.getHeight()-getBarHeight();
- var left=ele.offset()['left']-CK.offset()['left']+ele.getWidth()*.5-pW*.5;
- if(!isUndefined(C['preview'])){
- top=CK.getHeight()-parseFloat((getBarHeight()+C['preview']['smallHight']+parseInt(C['preview'].css('margin-bottom'))));
- }
- else{
- top=CK.getHeight()-parseFloat((getBarHeight()+C['tip']['minHeight']+parseInt(C['tip'].css('margin-bottom'))));
- top-=(getBarHeight()-C['bar'].getHeight());
- }
- top-=parseFloat(C['promptWords'].css('margin-bottom'));
- top-=pH;
- left-=parseFloat(C['promptWords'].css('margin-right'));
- if(left<0)left=0;
- if(left>CK.getWidth()-pW)left=CK.getWidth()-pW;
- C['promptWords'].css({
- 'top':top+'px',
- 'left':left+'px'
- });
- },
- /*
- * changePreview
- * 功能:加载或重置预览图片
- */
- changePreview=function(preview){
- if(!isUndefined(C['preview'])){
- C['preview'].remove();
- C['preview']=null;
- }
- if(!isUndefined(preview)){
- C['preview']=createlDiv('ck-preview');
- CM.append(C['preview']);
- if(isUndefined(vars['preview']['type'])){
- vars['preview']['type']=0;
- }
- if(vars['preview']['type']==1){
- C['preview']['bg']=createlDiv('ck-preview-bg');
- C['preview'].append(C['preview']['bg']);
- }
- var files=[];
- var loadImg=function(bigW,bigH,smallW,smallH){
- if(vars['preview']['type']==1){
- C['preview']['bg']['img']=[];
- for(var i=0;i1){
- if(valType(vars['preview']['thumbnail'][0])=='number'){
- thumbnail[0]=vars['preview']['thumbnail'][0];
- }
- if(valType(vars['preview']['thumbnail'][1])=='number'){
- thumbnail[1]=vars['preview']['thumbnail'][1];
- }
- vars['preview']['thumbnail']=thumbnail;
- }
- if(files[0]){
- var img = createlImg(files[0],'ck-preview-load-img').addListener('load',function(){
- loadImg(this.getWidth(),this.getHeight(),this.getWidth()/thumbnail[0],this.getHeight()/thumbnail[1]);
- this.remove();
- });
- CM.append(img);
- }
- }
- else{
- C['preview'].removeChild();
- C['preview']=null;
- }
- }
- else{
- C['preview'].removeChild();
- C['preview']=null;
- }
- }
- },
- /*
- * showPreview
- * 功能:显示预览图
- */
- showPreview=function(time){
- if(hidePreviewSetTime){
- clearTimeout(hidePreviewSetTime);
- hidePreviewSetTime=null;
- }
- if(time<0){
- if(!isUndefined(C['preview'])){
- hidePreviewSetTime=setTimeout(function(){
- C['preview'].hide();
- hidePreviewSetTime=null;
- },200);
- return;
- }
- }
- if(!isUndefined(C['preview']) && !isUndefined(vars['preview']['thumbnail']) && duration>0){
- if(isUndefined(vars['preview']['type'])){
- vars['preview']['type']=0;
- }
- var scale=2,thumbnail=vars['preview']['thumbnail'];
- if(!isUndefined(vars['preview']['scale'])){
- scale=vars['preview']['scale'];
- }
- var divI=0,imgI=0;
- var left=0,frameLeft=0;
- var pW=0;
- var smallW=C['preview']['smallWidth'],smallH=C['preview']['smallHight'];
- var bgXw=time*C['bar']['pbox']['bg'].getWidth()/duration+(C['bar']['pbox']['bg'].offset()['left']-CK.offset()['left']);
- if(C['preview'].css('display')=='none'){
- C['preview'].show();
- }
- C['preview'].css({
- 'height':smallH+'px',
- });
- if(vars['preview']['type']==1){
- divI=parseInt(time/(scale*thumbnail[0]));
- imgI=parseInt(time/scale);
- var minI=divI-5,maxI=divI+5;
- if(minI<0) minI=0;
- if(maxI>C['preview']['bg']['img'].length-1){
- maxI=C['preview']['bg']['img'].length-1;
- }
- for(var i=minI;iC['preview'].getWidth()-C['preview']['frame'].getWidth()){
- var xz=frameLeft-(C['preview'].getWidth()-C['preview']['frame'].getWidth());
- frameLeft=C['preview'].getWidth()-C['preview']['frame'].getWidth();
- left-=xz;
- }
- C['preview']['bg'].css({'left':left+'px'});
- C['preview']['frame'].css({'left':frameLeft+'px'});
- }
- else{
- var temp=(time/scale)/(thumbnail[0]*thumbnail[1]);
- imgI=parseInt(temp);//计算显示的图片编号
- var smallI=parseInt((temp-imgI)*100);
- var rows=parseInt(smallI/thumbnail[0]);
- var column=smallI%thumbnail[0];
- var files=vars['preview']['file'];
- left=bgXw-smallW*.5;
- if(left<0){
- left=0;
- }
- if(left>CK.getWidth()-smallW){
- left=CK.getWidth()-smallW;
- }
- C['preview'].css({
- 'width':C['preview']['smallWidth']+'px',
- 'background':'url('+files[imgI]+') no-repeat',
- 'background-position':'-'+column*smallW+'px -'+rows*smallH+'px',
- 'left':left+'px'
- });
- }
- }
- },
- /*
- * showError
- * 功能:显示错误信息
- */
- showError=function(){
- C['loading'].hide();
- if(vars['controls'] || !vars['errorShow']){
- return;
- }
- if(isUndefined(C['error'])){
- C['error']=createlDiv('ck-error');
- CM.append(C['error']);
- }
- var msg=CT.error['message'];
- if(!msg) msg=language['error']['noMessage'];
- var html=msg+'(code:'+CT.error['code']+')';
- C['error'].htm(html);
- C['error'].show();
- },
- /*
- * showWindowsError
- * 功能:显示错误信息
- */
- showWindowsError=function(error){
- var ele=createlDiv('moeplayer-error',error);
- $('body').append(ele);
- },
- /*
- * showNextEpisode
- * 功能:鼠标经过下一集按钮的动作
- */
- showNextEpisode=function(){
- if(isUndefined(vars['next'])) return;
- if(valType(vars['next'])=='object'){
- if('content' in vars['next']){
- C['next']=player.layer(vars['next']);
- return;
- }
- if('title' in vars['next']){
- tip(C['bar']['nextEpisode'],vars['next']['title']);
- return;
- }
- }
- tip(C['bar']['nextEpisode'],language['next']);
- },
- /*
- * nextClick
- * 功能:点击下一集按钮的动作
- */
- nextClick=function(){
- if(valType(vars['next'])=='object'){
- if('click' in vars['next']){
- if(valType(vars['next']['click'])=='function'){
- vars['next']['click']();
- }
- else if(valType(vars['next']['click'])=='string'){
- eval(vars['next']['click']+'()');
- }
- }
- if('link' in vars['next']){
- window.location.href=vars['next']['link'];
- }
- eventTarget('next');
- }
- },
- /*
- * showEnded
- * 功能:播放结束后的显示内容
- */
- showEnded=function() {
- if(!CT.loop && !isUndefined(vars['ended'])){
- closePauseAd();
- C['ended']=player.layer(vars['ended']);
- if(C['ended']){
- C['centerPlay'].hide();
- }
- return;
- }
- },
- /*
- * windowScroll
- * 功能:监听页面滚动
- */
- windowScroll=function() {
- if(!CT.smallWindows) return;
- if(CT.webFull || CT.theatre || CT.full){
- exitSmallWindows();
- return;
- }
- var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
- if(scrollTop>CT.offset()['top']+CT.getHeight()){
- if(!CK.hasClass('moeplayer-smallwindow')){
- CK.addClass('moeplayer-smallwindow');
- eventTarget('smallWindows',true);
- smallWindowsState=true;
- if(vars['smallWindowsDrag']){
- drag(true);
- }
- allBarHide();
- checkVideoRotate();
- }
- }
- else{
- exitSmallWindows();
- }
- },
- /*
- * exitSmallWindows
- * 退出小窗口模式
- */
- exitSmallWindows=function(){
- if(CK.hasClass('moeplayer-smallwindow')){
- CK.removeClass('moeplayer-smallwindow');
- if(vars['smallWindowsDrag']){
- drag();
- }
- eventTarget('smallWindows',false);
- smallWindowsState=false;
- allBarShow();
- checkVideoRotate();
- }
- },
- /*
- * drag
- * 功能,使节点可拖动
- * state:是否开启可拖动,默认=false,关闭状态
- */
- drag=function(state) {
- var doc=$(document);
- var posX = 0,posY = 0,
- posXRecord = 0,posYRecord = 0;
- var open=false;
- if(!isUndefined(state)){
- open=state;
- }
- var mouseDown = function(e) {
- e.preventDefault && e.preventDefault();
- e = e || window.event;
- var client = getClient(e);
- posXRecord = client['x'];
- posYRecord = client['y'];
- doc.mousemove(docMouseMove);
- doc.mouseup(docMouseUp);
- CK.css({
- 'cursor':'move'
- });
- };
- var docMouseMove = function(e) {
- e = e || window.event;
- var client = getClient(e);
- var eleOffset = CK.offset();
- posY = client['y']-posYRecord;
- posX = client['x']-posXRecord;
- posXRecord = client['x'];
- posYRecord = client['y'];
- var left=eleOffset['left']+posX;
- var top=eleOffset['top']+posY;
- CK.css({
- 'left':left+'px',
- 'top':top+'px'
- });
- if(CK.css('position')!='fixed'){
- CK.css({
- 'position':'fixed'
- });
- }
- isDrag=true;
- };
- var docMouseUp = function() {
- doc.removeListener('mousemove', docMouseMove);
- doc.removeListener('mouseup', docMouseUp);
- CK.css({
- 'cursor':'default'
- });
- };
- if(open){
- CK.mousedown(mouseDown);
- }
- else{
- CK.unbind('mousedown');
- }
- },
- /*
- * checkVideoRotate
- * 检查播放器尺寸
- */
- checkVideoRotate=function(){
- var ckW=CK.getWidth()*nowZoom*0.01,ckH=CK.getHeight()*nowZoom*0.01;
- var vW=CV.getWidth(),vH=CV.getHeight();
- CV.css({
- 'transform':'rotate('+nowRotate+'deg)',
- '-ms-transform':'rotate('+nowRotate+'deg)',
- '-moz-transform':'rotate('+nowRotate+'deg)',
- '-webkit-transform':'rotate('+nowRotate+'deg)',
- '-o-transform':'rotate('+nowRotate+'deg)',
- 'width':nowZoom+'%',
- 'height':nowZoom+'%'
- });
- if(nowRotate!=0 && nowRotate!=180){
- if(vH>ckW && vW>ckH){
- if(vH / ckW > vW / ckH) {
- CV.css({
- 'height':nowZoom+'%',
- 'width':ckH+'px'
- });
- }
- else {
- CV.css({
- 'width':nowZoom+'%',
- 'height':ckW+'px'
- });
- }
- return;
- }
- if(vHckH){
- CV.css({
- 'height':nowZoom+'%',
- 'width':ckH+'px'
- });
- }
- else{
- if(vH / vW >= ckW / ckH) {
- CV.css({
- 'width':nowZoom+'%',
- 'height':ckW+'px'
- });
- }
- else {
- CV.css({
- 'height':nowZoom+'%',
- 'width':ckH+'px'
- });
- }
- }
- return;
- }
- if(vH>=ckW && vW<=ckH){
- CV.css({
- 'width':nowZoom+'%',
- 'height':ckW+'px'
- });
- return;
- }
- if(vW>=ckH && vHC['bar'].getHeight()){
- top-=(getBarHeight()-C['bar'].getHeight());
- }
- if(w>ew){
- left=offset['left']-ckOffset['left']-(w-ew)*.5;
- }
- else{
- left=offset['left']-ckOffset['left']+(ew-w)*.5;
- }
- if(align=='left'){
- left=offset['left']-ckOffset['left']-w;
- top=offset['top']-ckOffset['top'];
- }
- if(!isUndefined(cl)){
- left=cl['x']-ckOffset['left']-w*.5;
- }
- if(left<0){
- left=0;
- }
- if(top<0){
- top=0;
- }
- if(left>CM.getWidth()-w){
- left=CM.getWidth()-w;
- }
- if(top>CM.getHeight()-h){
- top=CM.getHeight()-h;
- }
- C['tip'].css({
- 'left':left+'px',
- 'top':top-parseInt(C['tip'].css('margin-bottom'))+'px'
- });
- },
- /*
- * progressDragX
- * 功能:制作进度调节框事件
- */
- progressDragX=function(){
- var bg=C['bar']['pbox']['bg'],
- play=C['bar']['pbox']['play'],
- slider=C['bar']['pbox']['slider'],
- mouseLine=C['bar']['pbox']['mouseLine'];
- slider.unbind();
- bg.unbind();
- var pos = 0,
- posRecord = 0;
- var doc=$(document);
- var sliderDownTime=0;
- var sliderMouseDown = function(e) {
- e.preventDefault && e.preventDefault();
- if(!vars['timeScheduleAdjust']){//禁止拖动
- return;
- }
- e = e || window.event;
- var eleOffset = slider.offset(),bgOffset=bg.offset(),client = getClient(e);
- pSliderMouseDown=true;
- posRecord = client['x'];
- //供比较
- var left = eleOffset['left']-bgOffset['left'];
- sliderDownTime=left*duration/(bg.getWidth()-slider.getWidth());
- slider.removeListener('mousedown', sliderMouseDown);
- slider.removeListener('touchstart', sliderMouseDown);
- doc.mousemove(docMouseMove);
- doc.mouseup(docMouseUp);
- slider.touchmove(docMouseMove);
- slider.touchend(docMouseUp);
- noScrolling(true);
- };
- var docMouseMove = function(e) {
- e = e || window.event;
- var eleOffset = slider.offset(),bgOffset=bg.offset(),client = getClient(e);
- pSliderMouseDown=true;
- pos = posRecord - client['x'];
- posRecord = client['x'];
- var left = eleOffset['left'] - pos-bgOffset['left'];
- if(left<0){
- left=0;
- }
- if(left>bg.getWidth()-slider.getWidth()){
- left=bg.getWidth()-slider.getWidth();
- }
- C['bar']['pbox'].addClass('ck-bar-progress-slider-move');
- //预览时间
- var time='';
- if(!vars['live']){
- time=left*duration/(bg.getWidth()-slider.getWidth());
- switch(vars['timeScheduleAdjust']){
- case 2://只能前进(向右拖动
- if(timesliderDownTime){
- left=-1000;
- message(language['timeScheduleAdjust']['prohibitForward']);
- return;
- }
- break;
- case 4://只能前进但能回到第一次拖动时的位置
- if(timemaxSeeTime){
- left=-1000;
- player.seek(maxSeeTime);
- message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
- return;
- }
- break;
- }
- time=formatSeconds(time);
- }
- else{
- time=formatLiveTime(left*getLiveTime()/(bg.getWidth()-slider.getWidth()));
- }
- tip(slider,time);
- if(left>=0){
- slider.css({
- 'left': left + 'px'
- });
- play.css({
- 'width': left+ slider.getWidth()*.5+ 'px'
- });
- }
- else{
- pSliderMouseDown=false;
- }
-
- };
- var docMouseUp = function() {
- noScrolling();
- doc.removeListener('mousemove', docMouseMove);
- doc.removeListener('mouseup', docMouseUp);
- slider.removeListener('touchmove', docMouseMove);
- slider.removeListener('touchend', docMouseUp);
- slider.mousedown(sliderMouseDown);
- slider.touchstart(sliderMouseDown);
- if(!vars['live']){
- var time=play.getWidth()*duration/(bg.getWidth()-slider.getWidth()*.5);
- if(time>duration){
- time=duration;
- }
- seekTime=0;
- player.seek(time);
- }
- else{
- var playbackTime=parseInt(vars['live']+play.getWidth()*getLiveTime()/(bg.getWidth()-slider.getWidth()*.5));
- eventTarget('playback',{time:playbackTime,date:date('Y-m-d H:i:s',playbackTime)});
- eventTarget('seek',{time:playbackTime,state:'seeking',date:date('Y-m-d H:i:s',playbackTime)});
- }
- C['bar']['pbox'].removeClass('ck-bar-progress-slider-move');
- if(isMouseLeave){
- tip();
- }
- };
- var isMouseLeave=true;//默认鼠标离开了进度按钮上
- var sliderMouseOver=function(){
- var time='';
- if(!vars['live']){
- time=formatSeconds(parseInt(slider.css('left'))*duration/(bg.getWidth()-slider.getWidth()));
- }
- else{
- time=language['live'];
- }
- isMouseLeave=false;
- tip(slider,time);
- };
-
- var sliderMouseLeave=function(){
- isMouseLeave=true;
- };
- slider.mousedown(sliderMouseDown);
- slider.mouseover(sliderMouseOver);
- slider.mouseleave(sliderMouseLeave);
- slider.touchstart(sliderMouseDown);
- var bgMouseDown=function(e){
- e = e || window.event;
- var client = getClient(e);
- var bgOffset=bg.offset();
- var w=client['x']-bgOffset['left'];
- if(CT.full){
- w+=CK.offset()['left'];
- }
- if(!vars['live']){
- var time=duration*w/bg.getWidth();
- switch(vars['timeScheduleAdjust']){
- case 0://禁止拖动
- message(language['timeScheduleAdjust']['prohibit']);
- return;
- break;
- case 2://只能前进(向右拖动
- if(timeoldTime){
- message(language['timeScheduleAdjust']['prohibitForward']);
- return;
- }
- break;
- case 4://只能前进但能回到第一次拖动时的位置
- if(timemaxSeeTime){
- message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
- return;
- }
- break;
- }
- seekTime=0;
- player.seek(time);
- }
- else{
- var playbackTime=parseInt(vars['live']+getLiveTime()*w/bg.getWidth());
- eventTarget('playback',{time:playbackTime,date:date('Y-m-d H:i:s',playbackTime)});
- eventTarget('seek',{time:playbackTime,state:'seeking',date:date('Y-m-d H:i:s',playbackTime)});
- }
- if(w>bg.getWidth()-slider.getWidth()*.5){
- w=bg.getWidth()-slider.getWidth()*.5
- }
- if(wmaxTop){
- sliderTop=maxTop;
- }
- slider.css({
- 'top':sliderTop+'px'
- });
- var ppMarginTop=sliderTop-minTop+slider.getHeight()*0.5;
- pp.css({
- 'margin-top':ppMarginTop+'px'
- });
- var vol=(bg.getHeight()-ppMarginTop-slider.getHeight()*0.5)/(bg.getHeight()-slider.getHeight());
- player.volume(vol);
- };
- var docMouseUp = function() {
- noScrolling();
- doc.removeListener('mousemove', docMouseMove);
- doc.removeListener('mouseup', docMouseUp);
- slider.removeListener('touchmove', docMouseMove);
- slider.removeListener('touchend', docMouseUp);
- slider.mousedown(sliderMouseDown);
- slider.touchstart(sliderMouseDown);
- C['bar']['vbox']['mouseDown']=false;
- };
- slider.mousedown(sliderMouseDown);
- slider.touchstart(sliderMouseDown);
- var bgMouseDown=function(e){
- e = e || window.event;
- var client = getClient(e);
- var bgOffset=bg.offset();
- var h=client['y']-bgOffset['top'];
- var max=bg.getHeight();
- var vol=1-h/max;
- player.volume(vol);
- };
- bg.mousedown(bgMouseDown);
- },
- /*
- * changeProgress
- * 功能:根据时间调节播放进度
- */
- changeProgress=function(time){
- if((valType(vars['live'])=='boolean' && vars['live'])){
- return;
- }
- if(!pSliderMouseDown){
- var bg=C['bar']['pbox']['bg'],slider=C['bar']['pbox']['slider'];
- var playW=(time/duration)*100;
-
- if(valType(vars['live'])=='number'){
- playW='100';
- }
- C['bar']['pbox']['play'].css({'width':playW+'%'});
- var sliderW=(slider.getWidth()/bg.getWidth())*100;
- var sliderLeft=playW-sliderW*.5;
- if(sliderLeft<0){
- sliderLeft=0;
- }
- if(sliderLeft>100-sliderW){
- sliderLeft=100-sliderW;
- }
- C['bar']['pbox']['slider'].css({'left':sliderLeft+'%'});
- checkProgressSlider();
- }
- },
- /*
- * checkProgressSlider
- * 功能:检查设置播放进度条位置
- */
- checkProgressSlider=function(){
- var bg=C['bar']['pbox']['bg'],slider=C['bar']['pbox']['slider'];
- var st=0;
- if(C['bar']['pbox'].css('transition-duration')){
- st=parseFloat(C['bar']['pbox'].css('transition-duration'))*1000+20;
- }
- var checkThis=function(){
- var sliderLeft=parseInt(C['bar']['pbox']['slider'].css('left'));
- if(sliderLeft<0){
- sliderLeft=0;
- C['bar']['pbox']['slider'].css({'left':sliderLeft+'px'});
- }
- if(sliderLeft>bg.getWidth()-slider.getWidth()){
- sliderLeft=bg.getWidth()-slider.getWidth();
- C['bar']['pbox']['slider'].css({'left':sliderLeft+'px'});
- }
- };
- setTimeout(checkThis,st);
- },
- /*
- * changeTopTime
- * 功能:修改顶部右侧时间
- */
- changeTopTime=function(){
- C['topBar']['timeEle'].htm(date('H:i:s'));
- setTimeout(changeTopTime,1000);
- },
- /*
- * changeVolumeSlider
- * 功能:根据音量改变滑块位置
- */
- changeVolumeSlider=function(vol){
- if(!isUndefined(C['bar']['vbox'])){
- var box=C['bar']['vbox']['volume']['box'],
- bg=C['bar']['vbox']['volume']['bg'],
- pp=C['bar']['vbox']['volume']['pp'],
- slider=C['bar']['vbox']['volume']['slider'];
- C['bar']['vbox']['volume']['txt'].htm(parseInt(vol*100));
- var bgH=bg.getHeight();
- if(bgH){
- var ppMarginTop=bgH-vol*bgH;
- pp.css({
- 'margin-top':ppMarginTop+'px'
- });
- var sliderTop=bg.offset()['top']-box.offset()['top']+ppMarginTop-slider.getHeight()*0.5;
- slider.css({
- 'top':sliderTop+'px'
- });
- }
- }
- },
- /*
- * changeLoad
- * 功能:获取视频已加载部分并修改加载进度栏
- */
- changeLoad=function(){
- if(video){
- var len = video.buffered.length;
- if(len>0){
- var bufferEnd = video.buffered.end(len-1);
- if(loadTime= 1000) {
- last += offset;
- appendFps(fps);
- fps = 0;
- }
- requestAnimationFrame(step);
- };
- var appendFps = function(fps) {
- if(fps!=CT.fps){
- CT.fps=fps;
- replaceInformation('fps',fps);
- eventTarget('fps',fps);
- }
-
- };
- if(isUndefined(CT.fps)){
- CT.fps=0;
- }
- step();
- },
- /*
- * getElement
- * 功能:获取一个外部节点
- */
- getElement=function(content){
- var ele=$(content);
- if(isUndefined(ele)) return;
- if(valType(ele)=='htmlarray'){
- ele=ele[0];
- }
- if(isUndefined(ele.captureParentNode)){
- ele.captureParentNode = ele.parentNode;
- ele.prevElement=ele.prev();
- ele.nextElement=ele.next();
- }
- return ele;
- },
- /*
- * $
- * 功能:根据ID或className或节点节点名称获取对象
- */
- $=function(obj, eL) {
- var parent = null;
- if (document) {
- parent = document;
- }
- if (!isUndefined(eL)) {
- parent = eL;
- }
- var res = [];
- if (obj) {
- if (valType(obj) == 'htmlobject' || valType(obj)=='object') {
- res = obj;
- if (!isUndefined(res.moeplayer)) {
- return res;
- }
- }
- else if (valType(obj) == 'string' && obj!='') {
- switch (obj.substr(0, 1)) {
- case '.':
- obj = obj.substr(1, obj.length);
- if (parent.getElementsByClassName) {
- res = parent.getElementsByClassName(obj);
- if (!res.length) {
- return null;
- }
- }
- else if (!parent && document.getElementsByClassName) {
- res = document.getElementsByClassName(obj);
- if (!res.length) {
- return null;
- }
- }
- else {
- var reg = new RegExp(' ' + obj + ' ', 'i');
- var ele = null;
- if (parent.getElementsByTagName) {
- ele = parent.getElementsByTagName('*');
- } else {
- ele = document.getElementsByTagName('*');
- }
- for (var i = 0; i < ele.length; i++) {
- if (reg.test(' ' + ele[i].className + ' ')) {
- res.push(ele[i]);
- }
- }
- }
- if (res) {
- if (res.length === 0) {
- res = null;
- }
- }
- break;
- case '#':
- obj = obj.substr(1, obj.length);
- if (parent.getElementById) {
- res = parent.getElementById(obj);
- } else {
- res=document.getElementById(obj);
+ function mergeObj(o,n){
+ var h = {};
+ var k;
+ for (k in o) {
+ h[k] = o[k];
+ }
+ for (k in n) {
+ if(k in h){
+ switch(valType(h[k])){
+ case 'object':
+ if(valType(n[k])=='object'){
+ h[k] = mergeObj(h[k],n[k]);
}
break;
default:
- var reg = new RegExp(' ' + obj + ' ', 'i');
- if (parent.getElementsByTagName) {
- res = parent.getElementsByTagName(obj);
- } else {
- res = document.getElementsByTagName(obj);
- }
- if (res) {
- if (obj == 'body' || obj == 'document' || obj == 'html') {
- res = res[0];
- } else if (res.length === 0) {
- res = null;
- }
- } else {
- res = null;
+ if(valType(h[k])==valType(n[k])){
+ h[k] = n[k];
}
break;
}
}
- else {
- res = obj;
+ }
+ return h;
+ }
+
+ /*
+ * valType
+ * 功能:判断变量类型
+ */
+ function valType(val) {
+ if(typeof val==='undefined') return 'undefined';
+ var str=Object.prototype.toString.call(val).split(' ')[1].replace(']','').toLowerCase();
+ if(str.substr(0,4)=='html' && (str.substr(-7)=='element' || str.substr(-8)=='document' || str=='window')){
+ str='htmlobject';
+ }
+ if(str=='htmlcollection' || str=='nodelist'){
+ str='htmlarray';
+ }
+ return str;
+ }
+
+ /*
+ * isUndefined
+ * 功能:判断变量是否存在或值是否为undefined
+ */
+ function isUndefined(val) {
+ try {
+ return valType(val)==='undefined' || val === undefined || val === null || (valType(val)==='number' && isNaN(val));
+ } catch (event) {
+ return true;
+ }
+ return false;
+ }
+
+ /*
+ * decodeURIString
+ * 功能,解码中文
+ */
+ function decodeURIString(obj){
+ for(var k in obj){
+ if(valType(obj[k])=='string' && obj[k]){
+ try{
+ obj[k]=decodeURI(obj[k]);
+ }
+ catch(event){}
+ }
+ if(valType(obj[k])=='object'){
+ obj[k]=decodeURIString(obj[k]);
}
}
- else {
- res = document;
- }
-
- if (res) {
- if (valType(res) == 'htmlobject' || valType(res) == 'object' || valType(res) == 'document') {
- res.moeplayer = 'Thanks for using';
- /*
- * find
- * 功能:在当前节点中查找指定节点
- */
- res.find = function(obj) {
- return $(obj, this);
- };
- /*
- * attr
- * 功能:修改或获取节点的属性值
- * @key不能为空,指属性名称,$value不为空则设置属性值,为空则获取属性值
- */
- res.attr = function(key, value) {
- if (isUndefined(value)) {
- return this.getAttribute(key);
- }
- else {
- this.setAttribute(key, value);
- return this;
- }
- };
- /*
- * removeAtt
- * 功能:删除节点的属性值
- * @key不能为空,指属性名称
- */
- res.removeAttr = function(key) {
- this.removeAttribute(key);
- return this;
- };
- /*
- * css
- * 功能:修改或获取节点的样式样式
- * @key不能为空,指属性名称,$value不为空则设置属性值,为空则获取属性值
- */
- res.css = function(key, value) {
- // 拆解字符串并将第二单词首字母大写
- var keyNew = function(str) {
- // 当属性名有横杠时
- if (str.indexOf('-') != -1) {
- var arr = str.split('-');
- var a = arr[0];
- var b = '',
- c = '';
- if (arr.length > 1) {
- b = arr[1].substr(0, 1).toLocaleUpperCase() + arr[1].substr(1, arr[1].length - 1);
- }
- if (arr.length > 2) {
- b = arr[2].substr(0, 1).toLocaleUpperCase() + arr[2].substr(1, arr[2].length - 1);
- }
- return a + b + c;
- }
- // 没有横杠就不进行字符串拆解
- return str;
- };
- if (isUndefined(value)){
- if (!isUndefined(key) && valType(key) == 'string') {
- if (this.currentStyle) {
- return this.currentStyle[key];
- } else {
- return document.defaultView.getComputedStyle(this, null)[key];
- }
- }
- if (isUndefined(key)) {
- if (this.currentStyle) {
- return this.currentStyle;
- } else {
- return document.defaultView.getComputedStyle(this, null);
- }
- }
- }
- // 当传进来的参数key不是一个对象,给节点添加css样式
- if (valType(key) != 'object') {
- var newKey = keyNew(key);
- if (this.length > 1) {
- // 如果this有多个值,那给每个节点都添加样式
- for (var i = 0; i < this.length; i++) {
- this[i].style[newKey] = value;
- }
- } else {
- this.style[newKey] = value;
- }
- } else {
- //如果第一个值是一个对象,遍历这个对象,并将属性名传进函数进行拆解
- for (var item in key) {
- var objKey = keyNew(item);
- if (valType(this) == 'htmlarray') {
- for (var i = 0; i < this.length; i++) {
- this[i].style[objKey] = key[item];
- }
- } else {
- this.style[objKey] = key[item];
- }
- }
- }
- return this;
- };
- res.hasClass = function(cName) {
- if (isUndefined(cName)) return false;
- var reg = new RegExp('(\\s|^)' + cName + '(\\s|$)');
- if (this.className && this.className.match(reg)) {
- return true;
- }
- return false;
- };
- res.addClass = function(cName) {
- if (!this.hasClass(cName)) {
- if (this.className && this.className.substr(this.className.length - 1, 1) != ' ') {
- this.className += ' ';
- }
- this.className += cName;
- };
- return this;
- };
- res.removeClass = function(cName) {
- if (this.hasClass(cName)) {
- this.className = this.className.replace(new RegExp('(\\s|^)' + cName + '(\\s|$)'), ' ');
- if (this.className.substr(this.className.length - 1, 1) == ' ') {
- this.className = this.className.substr(0, this.className.length - 1);
- }
- if (!this.className) {
- this.removeAttribute('class');
- }
- };
- return this;
- };
- res.searchClass = function(cName) {
- var arr = this.className.split(' ');
- for (var i = 0; i < arr.length; i++) {
- if (arr[i].substr(0, cName.length) == cName) {
- return arr[i];
- }
- }
- return this;
- };
- res.removeCss=function(cName){
- var cs=this.attr('style');
- if(cs){
- var arr=cs.split(';');
- var obj={};
- for(var i=0;i= m + 1) {
- return this[m];
- }
- return null;
- }
- return null;
- };
- for (var i = 0; i < res.length; i++) {
- if ($) {
- try {
- res[i] = $(res[i]);
- } catch (event) {}
- }
- }
- }
-
- }
- return res;
- },
- /*
- * createlDiv
- * 功能:新建一个DIV节点
+ return obj;
+ }
+
+ /*
+ * documentReady
+ * 功能:判断页面加载完成
+ * @fn:页面加载完成后执行的函数
*/
- createlDiv=function(className,html) {
- var ele = document.createElement('div');
- var eleObject = $(ele);
- if (className) {
- eleObject.addClass(className);
- }
- if(html){
- eleObject.htm(html);
- }
- return eleObject;
- },
- /*
- * createlVideo
- * 功能:新建一个video节点
- */
- createlVideo=function() {
- var ele = document.createElement('video');
- var eleObject = $(ele);
- return eleObject;
- },
- /*
- * createlButton
- * 功能新建一个button节点
- */
- createlButton=function(className,html) {
- var ele = document.createElement('button');
- var eleObject = $(ele);
- eleObject.attr('type','button');
- if (className) {
- eleObject.addClass(className);
- }
- if(html){
- eleObject.htm(html);
- }
- return eleObject;
- },
- /*
- * createlA
- * 功能新建一个a节点
- */
- createlA=function(html,href,className) {
- var ele = document.createElement('a');
- var eleObject = $(ele);
- if(html){
- eleObject.htm(html);
- }
- if(!isUndefined(href) && href){
- eleObject.attr('href',href);
- eleObject.attr('target','_blank');
- }
- if (className) {
- eleObject.addClass(className);
- }
- return eleObject;
- },
- /*
- * createlJsLink
- * 功能新建一个a节点
- */
- createlJsLink=function(html,js) {
- var ele = document.createElement('a');
- var eleObject = $(ele);
- if(html){
- eleObject.htm(html);
- }
- if(!isUndefined(js) && js){
- eleObject.attr('href','javascript:'+js+'()');
- }
- else{
- eleObject.attr('href','javascript:;');
- }
- return eleObject;
- },
- /*
- * createlImg
- * 功能新建一个img节点
- */
- createlImg=function(file,className) {
- var ele = document.createElement('img');
- var eleObject = $(ele);
- if (className) {
- ele.className = className;
- }
- if(file){
- ele.src=file;
- }
- return eleObject;
- },
- /*
- * getClient
- * 功能:获取clientX和clientY
- */
- getClient=function(event) {
- var eve = event || window.event;
- if (isUndefined(eve)) {
- eve = {
- clientX: 0,
- clientY: 0
- };
- }
- var x=eve.clientX + (document.documentElement.scrollLeft || $('body').scrollLeft),
- y=eve.clientY + (document.documentElement.scrollTop || $('body').scrollTop);
- if(isUndefined(x.toString()) || x.toString()=='NaN'){
- x=eve.touches[0].clientX
- }
- if(isUndefined(y.toString()) || y.toString()=='NaN'){
- y=eve.touches[0].clientY
- }
- if(x.toString()=='NaN'){
- x=0;
- }
- if(y.toString()=='NaN'){
- y=0;
- }
- return {
- x: x,
- y: y
- }
- },
- /*
- * getLiveTime
- * 功能:获取直播回放时间
- */
- getLiveTime=function(){
- var notTime=Date.now();
- var varsTime=vars['live'];
- if(varsTime.toString().length<13){
- varsTime=varsTime*1000;
- }
- return notTime-varsTime;
- },
- /*
- * formatLiveTime
- * 功能:将直播的时间戳格式化成标准时间
- */
- formatLiveTime=function(time){
- var varsTime=vars['live'];
- if(varsTime.toString().length<13){
- varsTime=varsTime*1000;
- }
- varsTime+=time;
- return language['lookBack']+date('H:i:s',varsTime);
- },
- /*
- * loadJs
- * 功能:加载js文件并在加载完成后执行callback函数
- * @file:js文件地址
- * @callback:加载完成后执行的函数
- */
- loadJs=function(file, callback) {
- var fn =function() {};
- if(!isUndefined(callback)){
- fn=callback;
- }
- if(checkJs(file)){
- fn();
- return;
- }
- var script = document.createElement('script');
- script.type = 'text/javascript';
+ function documentReady(fn) {
var isReady = false;
var timer = null;
var doReady = function() {
- if(timer){
- clearInterval(timer);
- }
+ if(timer) clearInterval(timer);
if(isReady) return;
isReady = true;
if(valType(fn) == 'function') {
@@ -6515,906 +255,7203 @@
var bodyLoad = function() {
timer = setInterval(function() {
try {
- if(!isUndefined(script.readyState) && script.readyState == 'complete') {
+ if(!isUndefined(document.readyState) && document.readyState == 'complete') {
doReady();
}
} catch(event) {};
}, 10);
};
var w3c = function() {
+
if(valType(fn) == 'function') {
fn();
}
- removeListener(script, 'load', w3c);
- removeListener(script, 'error', w3cError);
+ removeListener(window, 'load', w3c);
};
- var w3cError = function() {
+ if(!isUndefined(document.body)){
if(valType(fn) == 'function') {
fn();
}
- removeListener(script, 'load', w3c);
- removeListener(script, 'error', w3cError);
- };
- try {
- addListener(script, 'load', w3c);
- addListener(script, 'error', w3cError);
- } catch(event) {
- bodyLoad();
- }
- script.src = file;
- $('head').eq(0).append(script);
- },
-
- /*
- * doubleClickEvent
- * 功能:注册对象双击功能
- * @ele:注册对象,可以是页面中的任意节点,不支持数组形式
- */
- doubleClickEvent=function(ele){
- var setTime=null;//注册延时函数
- var clickTime=0;//记录点击时间
- ele=$(ele);
- ele.click(function(){
- if(!setTime){
- setTime=setTimeout(function(){
- try{
- ele.dispatchEvent(new Event('sigClick'));//注册单击,针对视频播放器使用
- }
- catch(event){
- var e = document.createEvent('HTMLEvents');
- e.initEvent('sigClick', false, true);
- ele.dispatchEvent(e);
- }
- clickTime=0;
- setTime=null;
- },260);
- }
- if(!clickTime){
- clickTime=new Date().getTime();
- }
- else{
- if(new Date().getTime()-clickTime<230){//认为是双击
- try{
- ele.dispatchEvent(new Event('dobClick'));//注册双击
- }
- catch(event){
- var e = document.createEvent('HTMLEvents');
- e.initEvent('dobClick', false, true);
- ele.dispatchEvent(e);
- }
- clearTimeout(setTime);
- clickTime=0;
- setTime=null;
- }
- }
- });
- },
- /*
- * noScrolling
- * 功能,禁止页面滚动操作
- */
- noScrolling=function(b){
- if(isUndefined(b)) b=false;
- var bodyScroll=function (event){
- event.preventDefault();
- };
- if(b){ //禁止滚动
- $('body').addListener('touchmove', bodyScroll, {passive: false });
- }
- else{ //开启滚动
- $('body').removeListener('touchmove',bodyScroll, {passive: false});
- }
- };
- return into(videoObj);
- }
- /*
- * ajax
- * 功能:ajax功能
- * @cObj:传递的参数,包含请求地址,请求类型,编码等
- */
- function ajax(cObj) {
- var callback = null;
- var obj = {
- method: 'get',//请求类型
- dataType: 'json',//请求的数据类型
- charset: 'utf-8',
- async: true,//true表示异步,false表示同步
- url: '',
- data: null,
- success: null,
- error:null
- };
- obj = standardization(obj, cObj);
- if (isUndefined(obj['url'])) {
- return;
- }
- /*
- * errorFun
- *功能:执行error
- */
- var errorFun=function(info){
- if(!isUndefined(obj['error']) && valType(obj['error'])=='function'){
- obj['error'](info);
- }
- else{
- obj['success'](null);
- }
- };
- /*
- * successFun
- *功能:执行success
- */
- var successFun=function(success){
- if(!isUndefined(obj['success']) && valType(obj['success'])=='function'){
- obj['success'](success);
- }
- };
- /*
- * createXHR
- *功能:用来为ajax函数提供支持
- */
- var createXHR=function() {
- if (window.XMLHttpRequest) {
- return new XMLHttpRequest();
- } else if (window.ActiveXObject) {
- try {
- return new ActiveXObject('Microsoft.XMLHTTP');
- } catch(event) {
- try {
- return new ActiveXObject('Msxml2.XMLHTTP');
- } catch(event) {}
- }
- }
- };
- /*
- * formatParams
- * 功能:将对象转成地址字符串,为ajax函数提供支持
- * @obj:传递一个对象
- */
- var formatParams=function(obj) {
- var arr = [];
- for (var key in obj) {
- arr.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
- }
- return arr.join('&');
- };
- if (valType(cObj) != 'object') {
- if(!isUndefined(obj['error'])){
- obj.error(event);
- }
- return;
- }
-
- if (obj.dataType === 'json' || obj.dataType === 'text' || obj.dataType === 'html' || obj.dataType === 'xml') {
- var xhr = createXHR();
- callback = function() {
- //判断http的交互是否成功
- if (xhr.status === 200) {
- if (obj.dataType === 'json') {
- try {
- successFun(eval('(' + xhr.responseText + ')')); //回调传递参数
- }
- catch(event) {
- successFun(null);
- }
- } else {
- successFun(xhr.responseText); //回调传递参数
- }
- }
- else {
- errorFun({code:xhr.status,message:xhr.statusText});
- }
- };
- obj.data = formatParams(obj.data); //通过params()将名值对转换成字符串
- if (obj.method === 'get' && !isUndefined(obj.data)) {
- if (obj.data != '') {
- if (obj.url.indexOf('?') == -1) {
- obj.url += '?' + obj.data
- } else {
- obj.url += '&' + obj.data;
- }
- }
- }
- if (obj.async === true) { //true表示异步,false表示同步
- addListener(xhr,'readystatechange',function(event){
- if (this.readyState === 4 && callback != null) { //判断对象的状态是否交互完成
- callback(); //回调
- }
- });
- }
- xhr.open(obj.method, obj.url, obj.async);
- if (obj.method === 'post') {
- try{
- xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
- xhr.setRequestHeader('charset', obj['charset']);
- xhr.send(obj.data);
- }
- catch(event){
- callback();
- }
}
else {
- try{
- xhr.send(null); //get方式则填null
- }
- catch(event){
- callback();
+ try {
+ addListener(window, 'load', w3c);
+ } catch(event) {
+ bodyLoad();
}
}
- if (obj.async === false) { //同步
- callback();
- }
-
+
}
- else if (obj.dataType === 'jsonp') {
- var oHead = document.getElementsByTagName('head')[0];
- var oScript = document.createElement('script');
- var callbackName = 'callback' + new Date().getTime();
- var params = formatParams(obj.data) + '&callback=' + callbackName; //按时间戳拼接字符串
- //拼接好src
- oScript.src = obj.url.split('?') + '?' + params;
- //插入script标签
- oHead.insertBefore(oScript, oHead.firstChild);
- //jsonp的回调函数
- window[callbackName] = function(json) {
- if(!isUndefined(obj['success']) && valType(obj['success'])==='function'){
- obj['success'](json);
+
+ /*
+ * checkJs
+ * 功能:判断js是否已加载
+ * @file:js文件路径
+ */
+ function checkJs(file) {
+ var scriptList = document.scripts;
+ for (var i = 0; i < scriptList.length; i++) {
+ if(scriptList[i].src==file){
+ return scriptList[i];
}
- oHead.removeChild(oScript);
+ }
+ return false;
+ }
+
+ /*
+ * getMaxZIndex
+ * 功能:获取当前页面最大深度
+ */
+ function getMaxZIndex() {
+ var arr = document.all || document.querySelectorAll('*');
+ var maxZ = -1;
+ for (var i = 0; i < arr.length; i++) {
+ var temp = null;
+ try {
+ temp = window.getComputedStyle(arr[i], null).zIndex;
+ } catch (event) {
+ if (arr[i].style) {
+ temp = arr[i].style.zIndex;
+ }
+ }
+ if (temp != 'auto' && parseInt(temp) > maxZ) {
+ maxZ = parseInt(temp);
+ }
+ }
+ return maxZ;
+ }
+
+ /*
+ * getWindowSize
+ * 功能:获取window的宽和高
+ */
+ function getWindowSize() {
+ return {
+ width: window.innerWidth,
+ height: window.innerHeight
};
}
- }
- /*
- * documentReady
- * 功能:判断页面加载完成
- * @fn:页面加载完成后执行的函数
- */
- function documentReady(fn) {
- var isReady = false;
- var timer = null;
- var doReady = function() {
- if(timer) clearInterval(timer);
- if(isReady) return;
- isReady = true;
- if(valType(fn) == 'function') {
- fn();
+
+ /*
+ * prev
+ * 功能:获取指定节点前一个同胞节点
+ * @ele:要获取的节点
+ */
+ function prev(ele) {
+ var e = ele.previousSibling;
+ if (e == null) { //测试同胞节点是否存在,否则返回空
+ return null;
}
- };
- var bodyLoad = function() {
- timer = setInterval(function() {
+ if (e.nodeType == 3) { //如果同胞节点为文本节点
+ var t = prev(e);
+ if (t && t.nodeType == 1) {
+ return t;
+ }
+ } else {
+ if (e.nodeType == 1) { //确认节点为节点节点才返回
+ return e;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ /*
+ * next
+ * 功能:获取指定节点下一个同胞节点
+ * @ele:要获取的节点
+ */
+ function next(ele) {
+ var e = ele.nextSibling;
+ if (e == null) { //测试同胞节点是否存在,否则返回空
+ return null;
+ }
+ if (e.nodeType == 3) { //如果同胞节点为文本节点
+ var t = next(e);
+ if (t && t.nodeType == 1) {
+ return t;
+ }
+ } else {
+ if (e.nodeType == 1) { //确认节点为节点才返回
+ return e;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ /*
+ * addListener
+ * 功能:事件监听
+ * @ele:监听对象,@e:事件名称,@f:返回事件函数
+ */
+ function addListener(ele, e, f, t) {
+ if (isUndefined(t)) {
+ t = false;
+ }
+ if (ele.addEventListener) {
try {
- if(!isUndefined(document.readyState) && document.readyState == 'complete') {
- doReady();
- }
- } catch(event) {};
- }, 10);
+ ele.addEventListener(e, f, t);
+ } catch (event) {}
+ } else if (ele.attachEvent) {
+ try {
+ ele.attachEvent('on' + e, f);
+ } catch (event) {}
+ } else {
+ ele['on' + e] = f;
+ }
+ if(isUndefined(ele.listenerList)){
+ ele.listenerList=[];
+ }
+ ele.listenerList.push([e,f]);
+ return ele;
};
- var w3c = function() {
+
+ /*
+ * removeListener
+ * 功能:删除事件监听
+ * @ele:监听对象,@e:事件名称,@f:返回事件函数
+ */
+ function removeListener(ele, e, f, t) {
+ if (isUndefined(t)) {
+ t = false;
+ }
+ if (ele.removeEventListener) {
+ try {
+ ele.removeEventListener(e, f, t);
+ } catch (e) {}
+ } else if (ele.detachEvent) {
+ try {
+ ele.detachEvent('on' + e, f);
+ } catch (e) {}
+ } else {
+ ele['on' + e] = null;
+ }
+ if(!isUndefined(ele.listenerList)){
+ var temp=[];
+ for(var i=0;i-1){
+ return 'iphone';
+ }
+ }
+
+ /*
+ * formatSeconds
+ * 功能:將秒转化成时分秒
+ */
+ function formatSeconds(val) {
+ if(isUndefined(val)) val=0;
+ var result = parseInt(val);
+ if(isUndefined(result)) result=0;
+ if(result<0) result=0;
+ var h = Math.floor(result / 3600) < 10 ? '0' + Math.floor(result / 3600) : Math.floor(result / 3600),
+ m = Math.floor((result / 60 % 60)) < 10 ? '0' + Math.floor((result / 60 % 60)) : Math.floor((result / 60 % 60)),
+ s = Math.floor((result % 60)) < 10 ? '0' + Math.floor((result % 60)) : Math.floor((result % 60)),
+ res = '';
+ if(h !== '00') res += h+':';
+ res += m+':'+s;
+ return res;
+ }
+
+ /*
+ * date
+ * 功能:格式化的时间字符串
+ */
+ function date(format, timestamp) {
+ if(isUndefined(timestamp)){
+ timestamp=new Date();
+ }
+ if(timestamp.toString().length<13) timestamp=timestamp*1000;
+ var a, jsdate = ((timestamp) ? new Date(timestamp) : new Date());
+ var pad = function(n, c) {
+ if((n = n + '').length < c) {
+ return new Array(++c - n.length).join('0') + n;
+ } else {
+ return n;
+ }
+ };
+ var txt_weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
+ var txt_ordin = {
+ 1: 'st',
+ 2: 'nd',
+ 3: 'rd',
+ 21: 'st',
+ 22: 'nd',
+ 23: 'rd',
+ 31: 'st'
+ };
+ var txt_months = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
+ var f = {
+ // Day
+ d: function() {
+ return pad(f.j(), 2)
+ },
+ D: function() {
+ return f.l().substr(0, 3)
+ },
+ j: function() {
+ return jsdate.getDate()
+ },
+ l: function() {
+ return txt_weekdays[f.w()]
+ },
+ N: function() {
+ return f.w() + 1
+ },
+ S: function() {
+ return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'
+ },
+ w: function() {
+ return jsdate.getDay()
+ },
+ z: function() {
+ return (jsdate - new Date(jsdate.getFullYear() + '/1/1')) / 864e5 >> 0
+ },
- }
- /*
- * getPath
- * 功能:获取该js文件所在路径
- */
- function getPath(siz) {
- var scriptList = document.scripts,
- thisPath = scriptList[scriptList.length - 1].src;
- for (var i = 0; i < scriptList.length; i++) {
- var scriptName = scriptList[i].getAttribute('name') || scriptList[i].getAttribute('data-name');
- var src = scriptList[i].src.slice(scriptList[i].src.lastIndexOf('/') + 1, scriptList[i].src.lastIndexOf('.'));
- if ((scriptName && (scriptName == 'moeplayer' || scriptName == 'moeplayer.min')) || (scriptList[i].src && (src == 'moeplayer' || src == 'moeplayer.min'))) {
- thisPath = scriptList[i].src;
- break;
- }
- }
- var path=thisPath.substring(0, thisPath.lastIndexOf('/js/') + 1);
- if(!isUndefined(siz)){
- path+=siz+'/';
- }
- return path;
- }
- /*
- * checkJs
- * 功能:判断js是否已加载
- * @file:js文件路径
- */
- function checkJs(file) {
- var scriptList = document.scripts;
- for (var i = 0; i < scriptList.length; i++) {
- if(scriptList[i].src==file){
- return scriptList[i];
- }
- }
- return false;
- }
- /*
- * getMaxZIndex
- * 功能:获取当前页面最大深度
- */
- function getMaxZIndex() {
- var arr = document.all || document.querySelectorAll('*');
- var maxZ = -1;
- for (var i = 0; i < arr.length; i++) {
- var temp = null;
- try {
- temp = window.getComputedStyle(arr[i], null).zIndex;
- } catch (event) {
- if (arr[i].style) {
- temp = arr[i].style.zIndex;
- }
- }
- if (temp != 'auto' && parseInt(temp) > maxZ) {
- maxZ = parseInt(temp);
- }
- }
- return maxZ;
- }
- /*
- * getWindowSize
- * 功能:获取window的宽和高
- */
- function getWindowSize() {
- return {
- width: window.innerWidth,
- height: window.innerHeight
- };
- }
- /*
- * standardization
- * 功能:将对象Object标准化,将n对象替换进o对象
- * @o:标准化对象,@n:外部传递对象
- */
- function standardization(o, n) { //n替换进o
- var h = {};
- var k;
- for (k in o) {
- h[k] = o[k];
- }
- for (k in n) {
- if(k in h){
- h[k] = n[k];
- }
- }
- return h;
- }
- /*
- * mergeObj
- * 功能:将新对象合并到原对象中,需要确保原对像里有对应的值并且类型一样
- * @o:原对象,@n:新对象
- */
- function mergeObj(o,n){
- var h = {};
- var k;
- for (k in o) {
- h[k] = o[k];
- }
- for (k in n) {
- if(k in h){
- switch(valType(h[k])){
- case 'object':
- if(valType(n[k])=='object'){
- h[k] = mergeObj(h[k],n[k]);
- }
- break;
- default:
- if(valType(h[k])==valType(n[k])){
- h[k] = n[k];
- }
- break;
- }
- }
- }
- return h;
- }
- /*
- * valType
- * 功能:判断变量类型
- */
- function valType(val) {
- if(typeof val==='undefined') return 'undefined';
- var str=Object.prototype.toString.call(val).split(' ')[1].replace(']','').toLowerCase();
- if(str.substr(0,4)=='html' && (str.substr(-7)=='element' || str.substr(-8)=='document' || str=='window')){
- str='htmlobject';
- }
- if(str=='htmlcollection' || str=='nodelist'){
- str='htmlarray';
- }
- return str;
- }
- /*
- * isUndefined
- * 功能:判断变量是否存在或值是否为undefined
- */
- function isUndefined(val) {
- try {
- return valType(val)==='undefined' || val === undefined || val === null || (valType(val)==='number' && isNaN(val));
- } catch (event) {
- return true;
- }
- return false;
- }
- /*
- * prev
- * 功能:获取指定节点前一个同胞节点
- * @ele:要获取的节点
- */
- function prev(ele) {
- var e = ele.previousSibling;
- if (e == null) { //测试同胞节点是否存在,否则返回空
- return null;
- }
- if (e.nodeType == 3) { //如果同胞节点为文本节点
- var t = prev(e);
- if (t && t.nodeType == 1) {
- return t;
- }
- } else {
- if (e.nodeType == 1) { //确认节点为节点节点才返回
- return e;
- } else {
- return false;
- }
- }
- }
- /*
- * next
- * 功能:获取指定节点下一个同胞节点
- * @ele:要获取的节点
- */
- function next(ele) {
- var e = ele.nextSibling;
- if (e == null) { //测试同胞节点是否存在,否则返回空
- return null;
- }
- if (e.nodeType == 3) { //如果同胞节点为文本节点
- var t = next(e);
- if (t && t.nodeType == 1) {
- return t;
- }
- } else {
- if (e.nodeType == 1) { //确认节点为节点才返回
- return e;
- } else {
- return false;
- }
- }
- }
- /*
- * addListener
- * 功能:事件监听
- * @ele:监听对象,@e:事件名称,@f:返回事件函数
- */
- function addListener(ele, e, f, t) {
- if (isUndefined(t)) {
- t = false;
- }
- if (ele.addEventListener) {
- try {
- ele.addEventListener(e, f, t);
- } catch (event) {}
- } else if (ele.attachEvent) {
- try {
- ele.attachEvent('on' + e, f);
- } catch (event) {}
- } else {
- ele['on' + e] = f;
- }
- if(isUndefined(ele.listenerList)){
- ele.listenerList=[];
- }
- ele.listenerList.push([e,f]);
- return ele;
- };
- /*
- * removeListener
- * 功能:删除事件监听
- * @ele:监听对象,@e:事件名称,@f:返回事件函数
- */
- function removeListener(ele, e, f, t) {
- if (isUndefined(t)) {
- t = false;
- }
- if (ele.removeEventListener) {
- try {
- ele.removeEventListener(e, f, t);
- } catch (e) {}
- } else if (ele.detachEvent) {
- try {
- ele.detachEvent('on' + e, f);
- } catch (e) {}
- } else {
- ele['on' + e] = null;
- }
- if(!isUndefined(ele.listenerList)){
- var temp=[];
- for(var i=0;i> 0
- },
-
- // Week
- W: function() {
- var a = f.z(),
- b = 364 + f.L() - a;
- var nd2, nd = (new Date(jsdate.getFullYear() + '/1/1').getDay() || 7) - 1;
- if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b) {
- return 1;
- } else {
- if(a <= 2 && nd >= 4 && a >= (6 - nd)) {
- nd2 = new Date(jsdate.getFullYear() - 1 + '/12/31');
- return date('W', Math.round(nd2.getTime() / 1000));
+ // Week
+ W: function() {
+ var a = f.z(),
+ b = 364 + f.L() - a;
+ var nd2, nd = (new Date(jsdate.getFullYear() + '/1/1').getDay() || 7) - 1;
+ if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b) {
+ return 1;
} else {
- return(1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
+ if(a <= 2 && nd >= 4 && a >= (6 - nd)) {
+ nd2 = new Date(jsdate.getFullYear() - 1 + '/12/31');
+ return date('W', Math.round(nd2.getTime() / 1000));
+ } else {
+ return(1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
+ }
+ }
+ },
+
+ // Month
+ F: function() {
+ return txt_months[f.n()]
+ },
+ m: function() {
+ return pad(f.n(), 2)
+ },
+ M: function() {
+ return f.F().substr(0, 3)
+ },
+ n: function() {
+ return jsdate.getMonth() + 1
+ },
+ t: function() {
+ var n;
+ if((n = jsdate.getMonth() + 1) == 2) {
+ return 28 + f.L();
+ } else {
+ if(n & 1 && n < 8 || !(n & 1) && n > 7) {
+ return 31;
+ } else {
+ return 30;
+ }
+ }
+ },
+
+ // Year
+ L: function() {
+ var y = f.Y();
+ return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0
+ },
+ //o not supported yet
+ Y: function() {
+ return jsdate.getFullYear()
+ },
+ y: function() {
+ return (jsdate.getFullYear() + '').slice(2)
+ },
+
+ // Time
+ a: function() {
+ return jsdate.getHours() > 11 ? 'pm' : 'am'
+ },
+ A: function() {
+ return f.a().toUpperCase()
+ },
+ B: function() {
+ // peter paul koch:
+ var off = (jsdate.getTimezoneOffset() + 60) * 60;
+ var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;
+ var beat = Math.floor(theSeconds / 86.4);
+ if(beat > 1000) beat -= 1000;
+ if(beat < 0) beat += 1000;
+ if((String(beat)).length == 1) beat = '00' + beat;
+ if((String(beat)).length == 2) beat = '0' + beat;
+ return beat;
+ },
+ g: function() {
+ return jsdate.getHours() % 12 || 12
+ },
+ G: function() {
+ return jsdate.getHours()
+ },
+ h: function() {
+ return pad(f.g(), 2)
+ },
+ H: function() {
+ return pad(jsdate.getHours(), 2)
+ },
+ i: function() {
+ return pad(jsdate.getMinutes(), 2)
+ },
+ s: function() {
+ return pad(jsdate.getSeconds(), 2)
+ },
+ //u not supported yet
+
+ // Timezone
+ //e not supported yet
+ //I not supported yet
+ O: function() {
+ var t = pad(Math.abs(jsdate.getTimezoneOffset() / 60 * 100), 4);
+ if(jsdate.getTimezoneOffset() > 0) t = '-' + t;
+ else t = '+' + t;
+ return t;
+ },
+ P: function() {
+ var O = f.O();
+ return(O.substr(0, 3) + ':' + O.substr(3, 2))
+ },
+ //T not supported yet
+ //Z not supported yet
+
+ // Full Date/Time
+ c: function() {
+ return f.Y() + '-' + f.m() + '-' + f.d() + 'T' + f.h() + ':' + f.i() + ':' + f.s() + f.P()
+ },
+ //r not supported yet
+ U: function() {
+ return Math.round(jsdate.getTime() / 1000)
+ }
+ };
+
+ return format.replace(/([a-zA-Z])/g,function(t, s) {
+ var ret='';
+ if(t != s) {
+ // escaped
+ ret = s;
+ } else if(f[s]) {
+ // a date function exists
+ ret = f[s]();
+ } else {
+ // nothing special
+ ret = s;
+ }
+ return ret;
+ });
+ }
+
+ /*
+ * arrayToString
+ * 功能,二维数组传化成字符串
+ */
+ function arrayToString(arr) {
+ var str='';
+ if(!isUndefined(arr)){
+ for(var i=0;i0){
+ str+=',';
+ }
+ for(var y=0;y0){
+ str+=';';
+ }
+ if(valType(temp[y])=='number'){
+ str+=parseInt(temp[y]*100);
+ }
+ else {
+ str+=temp[y];
+ }
+
}
}
- },
-
- // Month
- F: function() {
- return txt_months[f.n()]
- },
- m: function() {
- return pad(f.n(), 2)
- },
- M: function() {
- return f.F().substr(0, 3)
- },
- n: function() {
- return jsdate.getMonth() + 1
- },
- t: function() {
- var n;
- if((n = jsdate.getMonth() + 1) == 2) {
- return 28 + f.L();
- } else {
- if(n & 1 && n < 8 || !(n & 1) && n > 7) {
- return 31;
- } else {
- return 30;
- }
- }
- },
-
- // Year
- L: function() {
- var y = f.Y();
- return(!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0
- },
- //o not supported yet
- Y: function() {
- return jsdate.getFullYear()
- },
- y: function() {
- return(jsdate.getFullYear() + '').slice(2)
- },
-
- // Time
- a: function() {
- return jsdate.getHours() > 11 ? 'pm' : 'am'
- },
- A: function() {
- return f.a().toUpperCase()
- },
- B: function() {
- // peter paul koch:
- var off = (jsdate.getTimezoneOffset() + 60) * 60;
- var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;
- var beat = Math.floor(theSeconds / 86.4);
- if(beat > 1000) beat -= 1000;
- if(beat < 0) beat += 1000;
- if((String(beat)).length == 1) beat = '00' + beat;
- if((String(beat)).length == 2) beat = '0' + beat;
- return beat;
- },
- g: function() {
- return jsdate.getHours() % 12 || 12
- },
- G: function() {
- return jsdate.getHours()
- },
- h: function() {
- return pad(f.g(), 2)
- },
- H: function() {
- return pad(jsdate.getHours(), 2)
- },
- i: function() {
- return pad(jsdate.getMinutes(), 2)
- },
- s: function() {
- return pad(jsdate.getSeconds(), 2)
- },
- //u not supported yet
-
- // Timezone
- //e not supported yet
- //I not supported yet
- O: function() {
- var t = pad(Math.abs(jsdate.getTimezoneOffset() / 60 * 100), 4);
- if(jsdate.getTimezoneOffset() > 0) t = '-' + t;
- else t = '+' + t;
- return t;
- },
- P: function() {
- var O = f.O();
- return(O.substr(0, 3) + ':' + O.substr(3, 2))
- },
- //T not supported yet
- //Z not supported yet
-
- // Full Date/Time
- c: function() {
- return f.Y() + '-' + f.m() + '-' + f.d() + 'T' + f.h() + ':' + f.i() + ':' + f.s() + f.P()
- },
- //r not supported yet
- U: function() {
- return Math.round(jsdate.getTime() / 1000)
}
- };
-
- return format.replace(/([a-zA-Z])/g,function(t, s) {
- var ret='';
- if(t != s) {
- // escaped
- ret = s;
- } else if(f[s]) {
- // a date function exists
- ret = f[s]();
- } else {
- // nothing special
- ret = s;
- }
- return ret;
- });
- }
- /*
- * dataURLtoBlob
- * 功能,base64转blob
- */
- function dataURLtoBlob(dataurl) {
- var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
- while (n--) {
- u8arr[n] = bstr.charCodeAt(n);
+ return str;
}
- return new Blob([u8arr], { type: mime });
- }
+
+ /*
+ * stringToArray
+ * 功能,字符串转化成二维数组
+ */
+ function stringToArray(str) {
+ var newArr=[];
+ if(!isUndefined(str)){
+ var arr=str.split(',');
+ for(var i=0;i-1){
- return 'iphone';
- }
- }
- /*
- * cookie
- * 功能,操作cookie
- */
- function cookie(name,value,domain,path){
- if(isUndefined(domain)){
- domain='';
- }
- if(isUndefined(path)){
- path='/';
- }
- var ckStr=';domain='+domain+';path='+path;
- if(location.protocol=='https'){
- ckStr+=';SameSite=None;Secure=true';
- }
- var set=function(name,value){
- var time = 360*24*60*60*1000;
- var exp = new Date();
- exp.setTime(exp.getTime() + time);
- try{
- document.cookie = name + '='+ escape (value) + ';expires=' + exp.toGMTString()+ckStr;
- }
- catch(event){console.error(event)}
- },
- get=function(name){
- var arr,reg=new RegExp('(^| )'+name+'=([^;]*)(;|$)');
- if(arr=document.cookie.match(reg)){
- return unescape(arr[2]);
- }
- else{
- return null;
- }
- },
- del=function(name){
- var exp = new Date();
- exp.setTime(exp.getTime() - 1);
- var cval=get(name);
- if(cval!=null){
- document.cookie= name + '='+cval+';expires='+exp.toGMTString()+ckStr;
- }
- };
- if(!isUndefined(name) && !isUndefined(value)){
- if(value=='delete'){
- del(name);
- return null;
- }
- else{
- set(name,value);
+ else if(!isUndefined(name) && isUndefined(value)){
return get(name);
}
-
- }
- else if(!isUndefined(name) && isUndefined(value)){
- return get(name);
- }
- else if(!isUndefined(name)){
-
- }
- }
+ else if(!isUndefined(name)){
+
+ }
+ }
+
/*
- * arrayToString
- * 功能,二维数组传化成字符串
- */
- function arrayToString(arr) {
- var str='';
- if(!isUndefined(arr)){
- for(var i=0;i0){
- str+=',';
+ * getPath
+ * 功能:获取该js文件所在路径
+ */
+ function getPath(siz) {
+ var scriptList = document.scripts,
+ thisPath = scriptList[scriptList.length - 1].src;
+ for (var i = 0; i < scriptList.length; i++) {
+ var scriptName = scriptList[i].getAttribute('name') || scriptList[i].getAttribute('data-name');
+ var src = scriptList[i].src.slice(scriptList[i].src.lastIndexOf('/') + 1, scriptList[i].src.lastIndexOf('.'));
+ if ((scriptName && (scriptName == 'moeplayer' || scriptName == 'moeplayer.min')) || (scriptList[i].src && (src == 'moeplayer' || src == 'moeplayer.min'))) {
+ thisPath = scriptList[i].src;
+ break;
}
- for(var y=0;y0){
- str+=';';
+ }
+ var path=thisPath.substring(0, thisPath.lastIndexOf('/js/') + 1);
+ if(!isUndefined(siz)){
+ path+=siz+'/';
+ }
+ return path;
+ }
+
+ var language = language$1;
+
+ function moeplayerEmbed(videoObj){
+ /*
+ * rightMenu
+ * 功能:全局变量,右键内容
+ * 初始化设置menu可替换该变量内容
+ */
+ var rightMenu=[
+ {
+ title:'MoePlayer'
+ },
+ {
+ title:'version:X3',
+ underline:true
+ },
+ {
+ title:'about',
+ click:'aboutShow'
+ }
+ ];
+ var vars={},varsTemp={};//保存传递过来的videoObject
+ var video=null;//视频播放器对象
+ var duration=0;//总时间
+ var mutedState='';//默认静音状态
+ var recoveryVolume=false;//是否需要在播放时恢复音量
+ var waited=true;//是否缓冲结束
+ var paused=true;//默认暂停状态
+ var loadTime=0;//已加载部分
+ var seekTime=0;//需要跳转的时间,初次播放以及切换清晰度后会用该变量记录需要seek的时间
+ var oldTime=0,playTime=0,firstSeekTime=-1,maxSeeTime=0;//oldTime=记录上次播放时间,playTime=当前播放时间,firstSeekTime=记录第一次拖动的时间,maxSeeTime=看过的最大时间
+ var isChangeDef=true;//是否需要重置清晰度
+ var playType='';//播放类别,默认='',是通过api接口播放,='button'则判定是通过点击按钮播放
+ var msgSetTime=null,tipSetTime=null,mouseSetTime=null;//用于显示提示后自动隐藏的计时器
+ var adFrontSetTime=null,adPauseSetTime=null;//贴片广告和暂停广告的计时器
+ var closeTipFun=null;//关闭提示的函数
+ var closeTipMouseOut=null;//鼠标离开节点时执行的函数
+ var waitingMessage=true;//显示缓冲提示
+ var hidePreviewSetTime=null;//隐藏预览图的计时器
+ var pSliderMouseDown=false;//判断是否在进度条上的滑块上按下
+ var playbackTime=0;//记录回放时间
+ var loadedmetadataNum=0;//记录元数据加载成功次数,记录视频播放数量
+ var screenshotImg=null;//记录最新一张截图
+ var ad=null;//广告对象
+ var frontAdPlay=false,pauseAdPlay=false;//贴片广告是否播放,暂停广告是否播放
+ var barShow=true,rightBarShow=true;
+ var EventTarget=null,newEvent=null,eventTargetList=null;//注册监听
+ var loadedTrack=false;//默认未加载字幕
+ var C={};//保存播放器界面上的所有节点
+ var CT=null,CK=null,CM=null,CV=null;//CT=播放器容器,页面中已存的,CT>CK>CM>CV>video
+ var pugPlayer=null;//插件播放器
+ var hls=null;//播放hls
+ var loadMeta=true;//第一次加载到元数据
+ var app='';//平台类型
+ var nowRotate=0;//当前视频旋转角度
+ var nowZoom=100;//当前缩放比例
+ var smallWindowsState=false;//当前是否处理小窗口状态
+ var isDrag=false;//是否在播放器上按下并且拖动
+ var moeplayerCookie='moeplayer-player-cookie';
+ var cookieName='';//cookie名称
+ var cookieTime=0;//cookie保存时间,单位:秒
+ var cookieArray=[];//保存当前所有记录
+ var focusPause=true;//失去焦点前是否是暂停状态
+ var existenceObj=false;//是否使用源码里已有的dom
+ /*
+ * into
+ * 功能:初始化,调用播放器则首先调用该函数
+ * @obj=初始化时的配置对象:videoObject
+ */
+ var into=function(obj){
+ /*
+ * 如果未传递初始化配置对象,则为player变量增加一个add函数,功能相当于into
+ */
+ if(isUndefined(obj)){
+ player.add=player.into=into;
+ return player;
+ }
+ /*
+ * 转码默认语言包
+ */
+ language=decodeURIString(language);
+ /*
+ * 检查是否在顶部引入了外部语言包文件,如果引入了,则使用外部语言包替换进language变量
+ */
+ if(!isUndefined(window.moeplayerLanguage)){
+ language=mergeObj(language,window.moeplayerLanguage);
+ }
+ /*
+ * 初始化注册事件函数,该函数的作用是将所有相关的事件都注册进一个变量newEvent
+ * newEvent是提供给播放器外部监听函数使用的,如监听时间player.time(function(t){console.log('已播放:'+t);});
+ */
+ eventTarget();
+ /*
+ * 监听页面标签状态(判断是否失去焦点)
+ */
+ documentHidden(function(state){
+ eventTarget('visibilityState',state);
+ });
+ /*
+ * 判断平台类型,主要是判断是否是iphone类型的平台
+ */
+ app=getApp();
+ /*
+ * 简单复制一下初始化时的默认配置
+ */
+ varsTemp={};
+ for(var key in videoObjectDefault){
+ varsTemp[key]=videoObjectDefault[key];
+ }
+ /*
+ * 如果初始化配置是字符串并且是以website:开头或url:开头的,则认为需要请求一个json文件来获取配置
+ */
+ if(valType(obj)=='string' && (obj.substr(0,8)=='website:' || obj.substr(0,4)=='url:')){
+ var ajaxUrl='';
+ if(obj.substr(0,8)=='website:'){
+ ajaxUrl=obj.substring(8);
}
- if(valType(temp[y])=='number'){
- str+=parseInt(temp[y]*100);
+ if(obj.substr(0,4)=='url:'){
+ ajaxUrl=obj.substring(4);
}
- else{
- str+=temp[y];
+ ajax({url:ajaxUrl,success:function(data){
+ if(data){
+ return into(data);
+ }
+ else {
+ showWindowsError(language['error']['ajax']+',url:'+ajaxUrl);
+ return null;
+ }
+ }});
+ }
+ /*
+ * 如果初始化配置是一个object,则进行下面的操作
+ */
+ else if(valType(obj)=='object'){
+ varsTemp = standardization(varsTemp, obj);//将obj合并到varsTemp对象里
+ if(!isUndefined(obj['container']) && obj['container']){
+ CT=$(obj['container']);
+ if(CT){//如果播放容器存在,则调用语言判断函数
+ return loadLanguage(obj);
+ }
+ else {//如果播放容器不存在,则则等页面加载完成后运行
+ return bodyReady(obj);
+ }
+ }
+ else {//不存在播放容器配置则等页面加载完成后运行
+ return bodyReady(obj);
+ }
+ }
+ else {
+ showWindowsError(language['error']['noVideoContainer']);
+ return null;
+ }
+ },
+ /*
+ * bodyReady
+ * 功能:页面加载完成后构建播放器
+ * @obj=初始化时的配置对象
+ */
+ bodyReady=function (obj){
+ documentReady(function(){
+ if(!isUndefined(obj['container'])){
+ CT=$(obj['container']);
+ if(CT){//如果播放容器存在,则调用语言判断函数
+ return loadLanguage(obj);
+ }
+ else {
+ showWindowsError(language['error']['noVideoContainer']);
+ return null;
+ }
+ }
+ else {//不存在播放容器则重新判断
+ return ajaxWebsite(obj);
+ }
+ });
+ return null;
+ },
+ /*
+ * ajaxWebsite
+ * 功能:页面加载完成后重新初始化
+ * @obj=初始化时的配置对象
+ */
+ ajaxWebsite=function (obj){
+ if(valType(obj['video'])=='string' && (obj['video'].substr(0,8)=='website:' || obj['video'].substr(0,4)=='url:')){
+ varsTemp = standardization(varsTemp, obj);
+ var ajaxUrl='';
+ if(obj['video'].substr(0,8)=='website:'){
+ ajaxUrl=obj['video'].substring(8);
+ }
+ if(obj['video'].substr(0,4)=='url:'){
+ ajaxUrl=obj['video'].substring(4);
+ }
+ ajax({url:ajaxUrl,success:function(data){
+ if(data){
+ return into(data);
+ }
+ else {
+ showWindowsError(language['error']['ajax']+',url:'+ajaxUrl);
+ return null;
+ }
+ }});
+ }
+ else {
+ showWindowsError(language['error']['noVideoContainer']);
+ return null;
+ }
+ },
+ /*
+ * loadLanguage
+ * 功能:加载Language
+ * @obj=初始化时的配置对象
+ */
+ loadLanguage=function (obj){
+ vars = standardization(varsTemp, obj);
+ if(vars['language']){
+ var path=getPath('language')+vars['language']+'.js';
+ loadJs(path,function(){
+ if(!isUndefined(window['moeplayerLanguage'])){
+ language=mergeObj(language,window['moeplayerLanguage']);
+ }
+ return embed(obj);
+ });
+ }
+ else {
+ return embed(obj);
+ }
+ },
+ /*
+ * embed
+ * 功能:构建播放器
+ * @obj=初始化时的配置对象
+ */
+ embed=function (obj){
+ /*
+ * 判断静音状态
+ */
+ mutedState=vars['volume']>0?false:true;
+ if(!isUndefined(CT) && CT!=null){
+ if(valType(CT)=='htmlarray'){
+ CT=CT.eq(0);
+ }
+ }
+ else {
+ return null;
+ }
+ /*
+ * 注册获取fps的函数
+ */
+ calculationFps();
+ /*
+ * 如果video指向一个已存在的video标签对象
+ */
+ existenceObj=valType(vars['video'])=='string' && ((vars['video'].substr(0,1)=='.' && vars['video'].indexOf('/')==-1) || vars['video'].substr(0,1)=='#');
+ /*
+ * 清空容器
+ */
+ if(existenceObj){
+ CK=CT.find('.moeplayer')?CT.find('.moeplayer').eq(0):null;
+ if(CK){
+ CM=CK.find('.ck-main')?CK.find('.ck-main').eq(0):null;
+ }
+ if(CM){
+ CV=CM.find('.ck-video')?CM.find('.ck-video').eq(0):null;
+ }
+ }
+ if(!CK || !CM || !CV){
+ CT.htm('');
+ /*
+ * 在播放容器里新建一个总的容器
+ */
+ CK=createlDiv('moeplayer');
+ CT.append(CK);
+ /*
+ * 在总容器里再新建一个容器
+ */
+ CM=createlDiv('ck-main');
+ CK.append(CM);
+ /*
+ * 新建一个放置video标签的容器
+ */
+ CV=createlDiv('ck-video');
+ CM.append(CV);
+ }
+ /*
+ * 如果已存在video.则先设置成空
+ */
+ if(video){
+ video.remove();
+ video=null;
+ }
+ /*
+ * 如果video指向一个已存在的video标签对象,则直接调用该对象
+ */
+ if(existenceObj){
+ video=$(vars['video'])?$(vars['video']).eq(0):null;
+ }
+ /*
+ * 新建一个video标签
+ */
+ if(!video){
+ video = createlVideo();
+ video.attr('width','100%').attr('height','100%');
+ CV.append(video);
+ }
+ video.volume=vars['volume'];
+ if(vars['autoplay']){
+ player.volume(0);
+ player.muted();
+ recoveryVolume=true;
+ video.attr('autoplay','autoplay');
+ paused=false;
+ }
+ else {
+ video.attr('preload','metadata');
+ }
+ CT.loop=vars['loop'];
+ if(CT.loop){
+ video.attr('loop','loop');
+ }
+ if(vars['controls']){
+ video.controls=true;
+ }
+ else {
+ video.controls=false;
+ }
+ try{
+ if(!existenceObj){
+ video.attr('controlslist','nodownload');
+ video.attr('x-webkit-airplay','true');
+ video.attr('x5-video-orientation','portraint');
+ video.attr('playsinline','true');
+ video.attr('webkit-playsinline','true');
+ video.attr('x5-playsinline','true');
+ }
+ if(vars['crossOrigin']){
+ video.useCORS=true;//解决跨域
+ video.crossOrigin=vars['crossOrigin'];//解决跨域
+ }
+ }
+ catch(event){}
+ /*
+ * 默认设置支持小窗口模式
+ */
+ CT.smallWindows=true;
+ /*
+ * 默认设置不显示页面全屏按钮
+ */
+ CT.webFull=false;
+ /*
+ * 默认设置不显示剧场模式按钮
+ */
+ CT.theatre=false;
+ /*
+ * 加载播放器界面
+ */
+ loadFace();
+ /*
+ * 判断是否需要默认旋转视频
+ */
+ if(vars['rotate']>0){
+ player.rotate(vars['rotate']);
+ }
+ /*
+ * 判断是否需要默认缩放视频
+ */
+ if(vars['zoom']>0){
+ player.zoom(vars['zoom']);
+ }
+ /*
+ * 判断是否支持video标签
+ */
+ if(isUndefined(video.canPlayType)){
+ CT.error={code:5,message:language['error']['supportVideoError']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ return player;
+ }
+ /*
+ * 注册视频播放器内部监听,监听到事件后注册给CT使用
+ */
+ addAllListener();
+ /*
+ * 如果需要在视频播放器加载成功后调用相关函数,此时则开始调用
+ */
+ if(!isUndefined(vars['loaded'])){
+ if(valType(vars['loaded'])=='function'){
+ try{
+ vars['loaded'](player);
+ }
+ catch(event){}
+ }
+ else if(valType(vars['loaded'])=='string'){
+ try{
+ eval(vars['loaded']+ '(player)');
+ }
+ catch(event){}
+ }
+ }
+ /*
+ * 播放视频
+ */
+ if(!existenceObj){
+ changeVideo(vars['video']);
+ }
+ else {
+ changeVideo(video.attr('src'));
+ }
+ /*
+ * 返回 播放器
+ */
+ return player;
+ },
+ /*
+ * changeVideo
+ * 功能:初始化视频地址或修改视频地址
+ */
+ changeVideo=function (vstr){
+ var i=0;
+ if(video.attr('src') || video.htm()){
+ player.pause();
+ }
+ if(video.attr('src') && !existenceObj){
+ video.attr('src','');
+ video.removeAttr('src');
+ }
+ if(!isUndefined(video.textTracks) && video.textTracks.length>0){
+ for(i=video.find('track').length-1;i>-1;i--){
+ video.find('track').eq(i).remove();
+ }
+ }
+ if(!existenceObj){
+ video.htm('');
+ }
+ if(!isUndefined(vars['ad'])){
+ ad=vars['ad'];
+ }
+ var source='';
+ if(valType(vstr)=='string'){
+ if(vstr.substr(0,8)=='website:' || vstr.substr(0,4)=='url:'){
+ var ajaxUrl='';
+ if(vstr.substr(0,8)=='website:'){
+ ajaxUrl=vstr.substring(8);
+ }
+ if(vstr.substr(0,4)=='url:'){
+ ajaxUrl=vstr.substring(4);
+ }
+ ajax({url:ajaxUrl,success:function(data){
+ if(data!=null){
+ vars = standardization(varsTemp, data);
+ changeVideo(vars['video']);
+ }
+ else {
+ CT.error={code:8,message:language['error']['ajax']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ }
+ }});
+ return;
+ }
+ else {
+ if(vars['plug'] && !canPlay(vstr)){
+ plugPlayer(vstr);
+ }
+ else {
+ if(!existenceObj){
+ video.attr('src',vstr);
+ }
+ }
+ loadTrack();
+ }
+ }
+ else if(valType(vstr)=='array'){
+ for(i=0;i1){
+ source += '';
+ }
+ }
+ }
+ }
+ if(source){
+ video.htm(source);
+ }
+ loadTrack();
+ }
+ else if(valType(vstr)=='object'){
+ if(vars['plug']){
+ plugPlayer(vstr);
+ }
+ else {
+ CT.error={code:10,message:language['error']['emptied']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ }
+ loadTrack();
+ }
+ if(!isUndefined(video.find('source')) && video.find('source').length>0){
+ video.find('source').eq(video.find('source').length-1).addListener('error',videoHandler.error);
+ }
+ checkBar();
+ loadLogo();
+ if(isChangeDef){
+ checkDefinition();
+ }
+ /*
+ * 对cookie进行相关分析
+ */
+ if(vars['cookie']){
+ if(valType(vars['cookie'])=='array' && vars['cookie'].length>=2){
+ if(vars['cookie'][0] && valType(vars['cookie'][0])=='string'){
+ cookieName=vars['cookie'][0];
+ }
+ if(vars['cookie'][1] && valType(vars['cookie'][1])=='number'){
+ cookieTime=vars['cookie'][1];
+ }
+ }
+ if(valType(vars['cookie'])=='object' && !isUndefined(vars['cookie']['name'])){
+ cookieName=vars['cookie']['name'];
+ if(!isUndefined(vars['cookie']['hour']) && valType(vars['cookie']['hour'])=='number'){
+ cookieTime=vars['cookie']['hour'];
+ }
+ }
+ if(valType(vars['cookie'])=='string'){
+ cookieName=vars['cookie'];
+ }
+ if(cookieName){
+ cookieName=cookieName.replace(/[ ]*,[ ]*|[ ]+/g, '').replace(/[ ]*;[ ]*|[ ]+/g, '');
+ }
+ }
+ if(!isUndefined(vars['seek']) && !seekTime){
+ if(valType(vars['seek'])=='number' && vars['seek']>0){
+ seekTime=vars['seek'];
+ }
+ if(valType(vars['seek'])=='string' && vars['seek']=='cookie' && cookieName){
+ var cke=player.cookie(cookieName);
+ if(cke){
+ seekTime=cke['time'];
+ }
+
+ }
+ }
+ },
+ /*
+ * plugPlayer
+ * 功能:使用插件进行播放
+ */
+ plugPlayer=function (url){
+ switch(vars['plug']){
+ case 'hls.js':
+ hlsPlayer(url);
+ break;
+ case 'flv.js':
+ flvPlayer(url);
+ break;
+ case 'mpegts.js':
+ mpegtsPlayer(url);
+ break;
+ case 'dash.js':
+ dashPlayer(url);
+ break;
+ default:
+ if(valType(vars['plug'])=='function'){
+ vars['plug'](video,url);
+ }
+ else {
+ CT.error={code:10,message:language['error']['emptied']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ }
+
+ break;
+ }
+ },
+ /*
+ * hlsPlayer
+ * 功能:使用hls.js插件进行播放
+ */
+ hlsPlayer=function (url){
+ var path=getPath('hls.js')+'hls.min.js';
+ loadJs(path,function(){
+ if (!isUndefined(Hls) && Hls.isSupported()) {
+ hls = new Hls();
+ hls.loadSource(url);
+ hls.attachMedia(video);
+ hls.on(Hls.Events.ERROR, function(event, data){
+ var code=9;
+ var message=language['error']['loadingFailed'];
+ var fatal=data.fatal;
+ if(!isUndefined(data.response)){
+ if(!isUndefined(data.response.code)){
+ code=data.response.code;
+ }
+ if(!isUndefined(data.response.text) && data.response.text){
+ message=data.response.text;
+ }
+ else {
+ if(!isUndefined(event)){
+ message=event;
+ }
+ }
+ }
+ CT.error={code:code,message:message};
+ eventTarget('error',CT.error);//注册监听error
+ if(fatal){
+ showError();
+ }
+ });
+ }
+ else if(canPlay(url)){
+ video.attr('src',url);
+ }
+ });
+ },
+ /*
+ * flvPlayer
+ * 功能:使用flv.js插件进行播放
+ */
+ flvPlayer=function (url){
+ var path=getPath('flv.js')+'flv.min.js';
+ loadJs(path,function(){
+ if (typeof(flvjs)!='undefined' && !isUndefined(flvjs) && flvjs.isSupported()) {
+ var config={
+ type: 'flv',
+ url: url
+ };
+ if(valType(url)=='object'){
+ config=url;
+ }
+ if(vars['live']){
+ config['isLive']=true;
+ }
+ if(pugPlayer){
+ pugPlayer.pause();
+ pugPlayer.unload();
+ pugPlayer.detachMediaElement();
+ pugPlayer.destroy();
+ pugPlayer=null;
+ }
+ pugPlayer = flvjs.createPlayer(config);
+ pugPlayer.attachMediaElement(video);
+ pugPlayer.load();
+ pugPlayer.on(flvjs.Events.METADATA_ARRIVED, function(res){
+ videoHandler.loadedMetaData();
+ });
+ pugPlayer.on(flvjs.Events.ERROR, function(errorType, errorDetail, errorInfo){
+ CT.error={code:errorInfo['code'],message:errorInfo['msg']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ });
+ }
+ });
+ },
+ /*
+ * mpegtsPlayer
+ * 功能:使用mpegts.js插件进行播放
+ */
+ mpegtsPlayer=function (url){
+ var path=getPath('mpegts.js')+'mpegts.js';
+ loadJs(path,function(){
+ if (typeof(mpegts)!='undefined' && !isUndefined(mpegts) && mpegts.getFeatureList().mseLivePlayback) {
+ var config={
+ type: 'mse',
+ url: url
+ };
+ if(valType(url)=='object'){
+ config=url;
+ }
+ if(vars['live']){
+ config['isLive']=true;
+ }
+ if(pugPlayer){
+ pugPlayer.pause();
+ pugPlayer.unload();
+ pugPlayer.detachMediaElement();
+ pugPlayer.destroy();
+ pugPlayer=null;
+ }
+ pugPlayer = mpegts.createPlayer(config);
+ pugPlayer.attachMediaElement(video);
+ pugPlayer.load();
+
+ pugPlayer.on(mpegts.Events.METADATA_ARRIVED, function(res){
+ videoHandler.loadedMetaData();
+ });
+ pugPlayer.on(mpegts.Events.ERROR, function(errorType, errorDetail, errorInfo){
+ CT.error={code:errorInfo['code'],message:errorInfo['msg']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ });
+ }
+ });
+ },
+ /*
+ * canPlay
+ * 功能:判断是否能支持相关视频格式
+ */
+ canPlay=function(vStr,num){
+ var vTypeArr=[
+ {vidType:'video/ogg',codType:'theora, vorbis'},
+ {vidType:'video/mp4',codType:'avc1.4D401E, mp4a.40.2'},
+ {vidType:'video/mp4',codType:'avc1'},
+ {vidType:'video/mp4',codType:'hevc'},
+ {vidType:'video/webm',codType:'vp8.0, vorbis'},
+ {vidType:'video/webm',codType:'vp9'},
+ {vidType:'',codType:'application/x-mpegURL'},
+ {vidType:'',codType:'application/vnd.apple.mpegurl'}
+ ];
+ var vType={
+ ogg:vTypeArr[0],
+ mp4:[vTypeArr[1],vTypeArr[2],vTypeArr[3]],
+ webm:[vTypeArr[4],vTypeArr[5]],
+ m3u8:[vTypeArr[6],vTypeArr[7]]
+ };
+ var arr=[];
+ var k='';
+ var supportType=function(obj){
+ var vType=obj['vidType'];
+ var str='';
+ if(vType){
+ str=vType+'; '+ 'codecs="' + obj['codType'] + '"';
+ }
+ else {
+ str=obj['codType'];
+ }
+ var sup = video.canPlayType(str);
+ if(sup == '') {
+ sup = 'no';
+ }
+ return sup;
+ };
+ var getExtension=function(filepath) {
+ return filepath.replace(/.+\./, '');
+ };
+ if(isUndefined(num)){
+ if(valType(vStr)=='string'){
+ if(vars['type']){
+ for(k in vTypeArr){
+ if(vTypeArr[k]['vidType']==vars['type']){
+ arr.push(vTypeArr[k]);
+ }
+ }
+ }
+ else {
+ if(getExtension(vStr) && getExtension(vStr) in vType){
+ var temp=vType[getExtension(vStr)];
+ if(valType(temp)=='array'){
+ for(var i=0;i0){
+ for(var i=0;icTime && arr[i][0]!=cookieName && y<19){
+ tempArr.push(arr[i]);
+ y++;
+ }
+ }
+ arr=tempArr;
+ }
+ if(arr.length>0){
+ cookie(moeplayerCookie,'delete',vars['domain'],vars['cookiePath']);
+ cookie(moeplayerCookie,arrayToString(arr),vars['domain'],vars['cookiePath']);
+ }
+ cookieArray=arr;
+ },
+ /*
+ * loadTrack
+ * 功能:加载track
+ */
+ loadTrack=function(){
+ if(isUndefined(video.textTracks)){
+ return;
+ }
+ var i=0;
+ if(!isUndefined(vars['track']) && valType(vars['track'])=='array' && !video.find('track')){
+ var track='';
+ var arr=vars['track'];
+ C['bar']['track'].show();
+ for(i=0;i';
+ }
+ if(video){
+ var html=video.htm()+track;
+ video.htm(html);
+ }
+ if(video.find('track') && !loadedTrack){
+ loadedTrack=true;
+ checkTrack();
+ }
+ }
+ },
+ /*
+ * loadedMetaData
+ * 功能:获取元数据后执行的函数
+ */
+ loadedMetaData=function(){
+ eventTarget('loadedMetaData',{
+ width:CK.getWidth(),
+ height:CK.getHeight(),
+ videoWidth:CT.videoWidth,
+ videoHeight:CT.videoHeight,
+ duration:duration,
+ volume:CT.volume
+ });
+ eventTarget('duration',duration);
+ if('error' in C){
+ C['error'].hide();
+ }
+ replaceInformation('videoWidth',CT.videoWidth);
+ replaceInformation('videoHeight',CT.videoHeight);
+ replaceInformation('volume',parseInt(CT.volume*100));
+ replaceInformation('duration',parseInt(duration));
+ documentHidden(function(state){
+ if(vars['documentFocusPause']){
+ if(state=='show'){
+ if(!focusPause && paused){
+ player.play();
+ }
+ }
+ else {
+ focusPause=paused;
+ player.pause();
+ }
+ }
+ });
+ };
+ /*
+ * videoHandler
+ * 功能:视频播放对象video注册内部监听调用函数
+ */
+ var videoHandler={
+ loadStart:function(){
+ if(!vars['controls'] && app!='iphone'){
+ C['loading'].show();
+ }
+ C['centerPlay'].hide();
+ eventTarget('loadstart');
+
+ },
+ canPlay:function(){
+ C['loading'].hide();
+ eventTarget('canplay');
+ },
+ loadedData:function(){
+ eventTarget('loadeddata');
+ },
+ loadedMetaData:function(){
+ duration=this.duration;
+ if(!isUndefined(this.duration) && vars['duration']){
+ duration=vars['duration'];
+ }
+ if(!vars['live']){
+ C['time'].htm(formatSeconds(this.currentTime)+'/'+formatSeconds(duration));
+ C['tempTime'].htm(formatSeconds(this.currentTime)+'/'+formatSeconds(duration));
+ }
+ C['loading'].hide();
+ if(vars['poster']){
+ video.attr('poster',vars['poster']);
+ }
+ if(!vars['autoplay'] && !vars['controls']){
+ C['centerPlay'].show();
+ C['buffer'].hide();
+ }
+
+ CT.duration=duration;
+ CT.videoWidth=this.videoWidth;
+ CT.videoHeight=this.videoHeight;
+ CT.volume=this.volume;
+ if(CT.videoWidth || CT.videoHeight || duration){
+ loadedMetaData();
+ }
+ var len = 0;
+ if(!isUndefined(this.buffered)){
+ len=this.buffered.length;
+ }
+ if(len>0){
+ changeLoad();
+ }
+ if(!vars['live']){
+ changePreview(vars['preview']);//修改预览图片
+ }
+ else {
+ changePreview();//修改预览图片
+ }
+ if(!isUndefined(vars['prompt']) && valType(vars['prompt'])=='array' && !vars['live']){
+ changePrompt();
+ }
+ else {
+ deletePrompt();
+ }
+ if(isChangeDef){
+ checkDefinition();
+ isChangeDef=false;
+ }
+ pSliderMouseDown=false;
+ loadedmetadataNum++;
+ if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && ad['frontPlay'] && loadedmetadataNum>1){//如果是贴片广告播放中,则进行播放和计算
+ player.play();
+ calculationAdFrontTime(duration);//计算贴片广告的时间
+ }
+ if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && !ad['frontPlay']){//如果广告播放结束则播放正片
+ player.volume(vars['volume']);
+ player.play();
+ }
+ if(!vars['autoplay'] && loadMeta){
+ loadMeta=false;
+ player.pause();
+ setTimeout(player.pause,300);
+ }
+ },
+ timeUpDate:function(){//监听播放时间
+ if(!waited){
+ waited=true;
+ C['buffer'].hide();
+ eventTarget('buffer','end');
+ }
+ var len = this.buffered.length;
+ if(len>0){
+ changeLoad();
+ }
+ if(!duration && this.duration){
+ duration=this.duration;
+ CT.duration=duration;
+ CT.videoWidth=this.videoWidth;
+ CT.videoHeight=this.videoHeight;
+ if(CT.videoWidth || CT.videoHeight || duration){
+ loadedMetaData();
+ }
+ }
+ oldTime=playTime;
+ playTime=this.currentTime;
+ if(maxSeeTime1){//如果是贴片广告播放中,则进行播放
+ calculationAdFrontTime(duration-playTime);//计算贴片广告的时间
+ }
+ if(!isUndefined(C['error']) && C['error'].css('display')=='block'){
+ C['error'].hide();
+ }
+ if(cookieName){
+ changeCookie(playTime);
+ }
+ replaceInformation('audioDecodedByteCount',this.webkitAudioDecodedByteCount || this.audioDecodedByteCount || 0);
+ replaceInformation('videoDecodedByteCount',this.webkitVideoDecodedByteCount || this.videoDecodedByteCount || 0);
+ },
+ ended:function(){//监听播放结束
+ if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && ad['frontPlay']){//如果是贴片广告播放中,则用广告结束函数对此进行判断
+ adFrontEnded();
+ }
+ else {
+ C['bar']['playAndPause']['pause'].hide();
+ C['bar']['playAndPause']['play'].hide();
+ C['bar']['playAndPause']['refresh'].show();
+ eventTarget('ended');
+ showEnded();
+ message();
+ }
+ },
+ error:function(event){
+ if(!isUndefined(event.type)){
+ var errorInfo=this.error;
+ var errorBak=function(){
+ var code=12;
+ var msg=language['error']['loadingFailed'];
+ if(!isUndefined(errorInfo)){
+ if(!isUndefined(errorInfo.code)){
+ code=errorInfo.code;
+ }
+ if(!isUndefined(errorInfo.message)){
+ msg=errorInfo.message;
+ }
+ CT.error={code:code,message:msg};
+ showError();
+ }
+ else {
+ CT.error={code:code,message:msg};
+ if(event.target.attr('src')){
+ showError();
+ }
+ }
+ eventTarget('error',CT.error);//注册监听error
+ };
+ if(event.type=='error'){
+ try{
+ if(video.currentSrc){
+ ajax({url:video.currentSrc,error:function(info){
+ if(info && valType(info)=='object' && 'code' in info && info['code']){
+ CT.error=info;
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ }
+ else {
+ errorBak();
+ }
+ },success:function(data){
+ if(!data){
+ errorBak();
+ }
+ }});
+ }
+ else {
+ errorBak();
+ }
+ }
+ catch(event){
+ errorBak();
+ }
+ }
+ }
+ },
+ stalled:function(){
+ eventTarget('stalled');//注册监听error
+ CT.error={code:13,message:'load:stalled'};
+ eventTarget('error',CT.error);//注册监听error
+ },
+ suspend:function(){
+ eventTarget('suspend');//注册监听error
+ },
+ emptied:function(){
+ eventTarget('emptied');//注册监听error
+ CT.error={code:7,message:language['error']['emptied']};
+ eventTarget('error',CT.error);//注册监听error
+ },
+ seeked:function(){
+ if(paused){
+ player.play();
+ }
+ pSliderMouseDown=false;
+ eventTarget('seek',{time:this.currentTime,state:'seeked'});
+ eventTarget('seeked');
+ },
+ seeking:function(){
+ if(paused){
+ player.play();
+ }
+ var seekingTime=this.currentTime;
+ if(firstSeekTime==-1){
+ firstSeekTime=seekingTime;//记录第一次拖动的时间
+ }
+ switch(vars['timeScheduleAdjust']){
+ case 0://禁止拖动
+ if(oldTime!=seekingTime){
+ waitingMessage=false;
+ player.seek(oldTime);
+ message(language['timeScheduleAdjust']['prohibit']);
+ return;
+ }
+ break;
+ case 2://只能前进(向右拖动
+ if(seekingTimeoldTime){
+ waitingMessage=false;
+ player.seek(oldTime);
+ message(language['timeScheduleAdjust']['prohibitForward']);
+ return;
+ }
+ break;
+ case 4://只能前进但能回到第一次拖动时的位置
+ if(seekingTimemaxSeeTime){
+ waitingMessage=false;
+ player.seek(maxSeeTime);
+ message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
+ return;
+ }
+ break;
+ }
+ eventTarget('seek',{time:seekingTime,state:'seeking'});
+ eventTarget('seeking');
+ if(!vars['live']){
+ C['time'].htm(formatSeconds(seekingTime)+'/'+formatSeconds(duration));
+ C['tempTime'].htm(formatSeconds(seekingTime)+'/'+formatSeconds(duration));
+ }
+
+ },
+ waiting:function(){
+ waited=false;
+ eventTarget('buffer','start');//注册监听视频缓冲
+ C['centerPlay'].hide();
+ if(!vars['controls']){
+ C['buffer'].show();
+ }
+ if(!waitingMessage){
+ waitingMessage=true;
+ }
+ else {
+ message(language['waiting']);
+ }
+
+ },
+ play:function(){
+ paused=false;
+ C['bar']['playAndPause']['play'].hide();
+ C['bar']['playAndPause']['pause'].show();
+ C['bar']['playAndPause']['refresh'].hide();
+ C['centerPlay'].hide();
+ if(playType=='button'){
+ C['bar']['pbox'].removeClass('ck-bar-progress-out');
+ }
+ else {
+ C['bar']['pbox'].addClass('ck-bar-progress-out');
+ }
+ if(recoveryVolume){
+ recoveryVolume=false;
+ player.exitMuted();
+ }
+ hideBar();
+ closePauseAd();//关闭暂停广告
+ playType='';
+ if(!isUndefined(C['ended'])){
+ player.closeLayer(C['ended']);
+ }
+ if('error' in C){
+ C['error'].hide();
+ }
+ eventTarget('play');
+ if(!isUndefined(ad)){//如果存在广告
+ if(!isUndefined(ad['front'])){//如果存在贴片广告
+ if(isUndefined(ad['frontPlay'])){//如果贴片广告还未播放
+ ad['frontPlayI']=0;
+ ad['frontPlay']=true;//开始播放贴片广告
+ player.pause();//暂停视频
+ adFrontPlay();
+ return;
+ }
+ }
+ }
+ if(seekTime && (isUndefined(vars['live']) || (!isUndefined(vars['live']) && valType(vars['live'])=='boolean' && !vars['live'])) && seekTime0 && mutedState){
+ this.muted=false;
+ }
+ if(mutedState!=this.muted){
+ mutedState=this.muted;
+ changeMuted(this.muted);
+ CT.muted=this.muted;
+ eventTarget('muted',CT.muted);//注册静音事件
+ }
+ CT.volume=this.volume;
+ eventTarget('volume',this.volume);//注册音量事件
+ if(!isUndefined(C['bar']['vbox'])){
+ var vol=parseInt(this.volume*100);
+ C['bar']['vbox']['volume']['txt'].htm(vol);
+ if(!C['bar']['vbox']['mouseDown']){
+ changeVolumeSlider(this.muted?0:this.volume);
+ }
+ if(!this.muted){//如果非静音状态
+ message(language['volume']+vol+'%');
+ }
+ }
+ replaceInformation('volume',parseInt(this.volume*100));
+ },
+ resize:function(){
+ var fullState = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement;
+ if(fullState) {
+ C['bar']['fullAndExit']['exitFull'].show();
+ C['bar']['fullAndExit']['full'].hide();
+ C['ad']['bottom']['fullAndExit']['exitFull'].show();
+ C['ad']['bottom']['fullAndExit']['full'].hide();
+ if(!CM.hasClass('ck-main-full')){
+ CM.addClass('ck-main-full');
+ }
+ message(language['full']);
+ C['bar']['webFullAndExit'].hide();
+ C['bar']['theatreAndExit'].hide();
+ if(!isUndefined(C['menu'])){
+ CM.append(C['menu']);
+ }
+ }
+ else {
+ fullState=false;
+ C['bar']['fullAndExit']['full'].show();
+ C['bar']['fullAndExit']['exitFull'].hide();
+ C['ad']['bottom']['fullAndExit']['full'].show();
+ C['ad']['bottom']['fullAndExit']['exitFull'].hide();
+ if(CM.hasClass('ck-main-full')){
+ CM.removeClass('ck-main-full');
+ }
+ if(!isUndefined(vars['webFull']) && vars['webFull']){
+ C['bar']['webFullAndExit'].show();
+ }
+ if(!isUndefined(vars['theatre']) && !CT.webFull){
+ C['bar']['theatreAndExit'].show();
+ }
+ if(!isUndefined(C['menu'])){
+ $('body').append(C['menu']);
+ }
+ if(CV.css('width')!=CM.css('width')){
+ player.zoom(100);
+ }
+ }
+ if(CT.full!=fullState){
+ CT.full=fullState;
+ eventTarget('full',fullState);//注册播放事件
+ }
+ checkVideoRotate();
+ changeProgress(player.time());
+ },
+ keydown:function(event){
+ event=window.event || event;
+ var keycode = event.keyCode || event.which;
+ var v=player.volume();
+ var pre=function(){
+ if(event.preventDefault){
+ event.preventDefault();
+ }
+ else {
+ event.returnValue = false;
+ }
+ };
+ switch(keycode) {
+ case 32:
+ pre();
+ player.playOrPause();
+ break;
+ case 37:
+ player.fastBack();
+ break;
+ case 39:
+ player.fastNext();
+ break;
+ case 38:
+ if(valType(vars['keyVolume'])=='number' && (vars['keyVolume']==1 || (vars['keyVolume']==2 && CT.full))){
+ pre();
+ player.volume(v+.1<1?v+=.1:1);
+ }
+ break;
+ case 40:
+ if(valType(vars['keyVolume'])=='number' && (vars['keyVolume']==1 || (vars['keyVolume']==2 && CT.full))){
+ pre();
+ player.volume(v-.1>0?v-=.1:0);
+ }
+ break;
+ default:
+ break;
+ }
+ },
+ mouseWheel:function(event){
+ if(valType(vars['mouseWheelVolume'])=='number' && (vars['mouseWheelVolume']==1 || (vars['mouseWheelVolume']==2 && CT.full))){
+ event=window.event || event;
+ var v=player.volume();
+ if(event.preventDefault){
+ event.preventDefault();
+ }
+ else {
+ event.returnValue = false;
+ }
+ if(event.wheelDelta) {
+ if(event.wheelDelta > 0) {
+ player.volume(v+.1<1?v+=.1:1);
+ }
+ if(event.wheelDelta < 0) {
+ player.volume(v-.1>0?v-=.1:0);
+ }
+ } else if(event.detail) {
+ if(event.detail > 0) {
+ player.volume(v-.1>0?v-=.1:0);
+ }
+ if(event.detail < 0) {
+ player.volume(v+.1<1?v+=.1:1);
+ }
+ }
}
}
- }
- }
- return str;
- }
+ };
+ /*
+ * adFrontPlay
+ * 功能:播放贴片广告
+ */
+ var adFrontPlay=function(){
+ if(ad['frontPlayI']==0){//如果是播放第一个广告,则显示相关组件
+ allBarHide(false);
+ C['ad'].show();
+ ad['front']['video']=false;//初始化,不包含视频广告
+ //判断是否需要启用固定时间后关闭广告按钮
+ if(!isUndefined(ad['front']['closeTime'])){
+ if(ad['front']['closeTime']>0){
+ C['ad']['top']['closeTime'].show();
+ adFrontCloseTime();
+ }
+ else {
+ C['ad']['top']['closeAd'].show();
+ }
+ }
+ }
+ if(!isUndefined(ad['front']['node']) && ad['front']['node']!=null){
+ CM.append(ad['front']['node']);
+ player.closeLayer(ad['front']['node']);
+ ad['front']['node']=null;
+ }
+ C['ad']['picture'].htm('');
+ C['ad']['picture'].hide();
+ C['ad']['link'].hide();
+ if(!isUndefined(ad['front']['list'][ad['frontPlayI']])){
+ var adv=ad['front']['list'][ad['frontPlayI']];
+ frontAdPlay=true;//贴片广告播放状态
+ eventTarget('frontAd',adv);
+ if(adv['type']=='picture'){
+ adPicturePlay(adv);
+ }
+ else if(adv['type']=='node'){
+ adNode(adv);
+ }
+ else {
+ C['ad']['link'].attr('data-link',adv['link']);
+ adVideoPlay(adv['file']);
+ }
+ if(!isUndefined(adv['link'])){
+ C['ad']['bottom']['details'].show();
+ C['ad']['bottom']['details'].htm(''+language['details']+'');
+ }
+ else {
+ C['ad']['bottom']['details'].hide();
+ }
+ }
+ },
+ /*
+ * adFrontCloseTime
+ * 功能:播放贴片广告时按指定时间后显示关闭广告按钮
+ */
+ adFrontCloseTime=function(){
+ if(!isUndefined(ad['front']['closeSetTime'])){
+ clearTimeout(ad['front']['closeSetTime']);
+ ad['front']['closeSetTime']=null;
+ }
+ C['ad']['top']['closeTime'].htmReplace('{seconds}',ad['front']['closeTime'],language['closeTime']);
+ ad['front']['closeTime']--;
+ if(ad['front']['closeTime']>0){
+ ad['front']['closeSetTime']=setTimeout(adFrontCloseTime,1000);
+ }
+ else {
+ C['ad']['top']['closeAd'].show();
+ C['ad']['top']['closeTime'].hide();
+ }
+ },
+ /*
+ * calculationAdFrontTime
+ * 功能:计算贴片广告倒计时时间以及广告是视频时用于倒计时
+ */
+ calculationAdFrontTime=function(t){
+ if(!isUndefined(t)){
+ ad['front']['list'][ad['frontPlayI']]['time']=t;
+ }
+ ad['front']['countDown']=0;
+ for(var i=ad['frontPlayI'];i0){
+ adv['time']--;
+ ad['front']['countDown']--;
+ C['ad']['top']['countDown'].htm(ad['front']['countDown']+language['second']);
+ adFrontSetTime=setTimeout(adFrontCountDown,1000);
+ }
+ else {
+ adFrontEnded();
+ }
+ },
+ /*
+ * adFrontEnded
+ * 功能:贴片广告单个播放完成后进行判断是否需要播放下一个广告还是播放正片
+ */
+ adFrontEnded=function(){
+ if(ad['frontPlayI']0 || h>0){
+ if(adv['link']){
+ var a=createlA('',adv['link']);
+ a.append(this);
+ C['ad']['picture'].append(a);
+ }
+ else {
+ C['ad']['picture'].append(this);
+ }
+ img.unbind();
+ img.click(function(){
+ eventTarget('frontAdClick',adv);
+ });
+ }
+ else {
+ if(imgloadNum<10){
+ imgloadNum++;
+ imgLoadHandler();
+ }
+ }
+ });
+ };
+ imgLoadHandler();
+ calculationAdFrontTime();//计算时间
+ adFrontCountDown();//开启倒计时
+ C['ad']['bottom']['mutedAndExit'].hide();
+ },
+ /*
+ * adNode
+ * 功能:贴片广告播放外部节点
+ */
+ adNode=function(adv){
+ if(isUndefined(adv['content'])) return;
+ ad['front']['node']=player.layer(adv);
+ ad['front']['node'].css({'z-index':1});
+ C['ad'].append(ad['front']['node']);
+ ad['front']['node'].unbind();
+ ad['front']['node'].click(function(){
+ eventTarget('frontAdClick',adv);
+ });
+ calculationAdFrontTime();//计算时间
+ adFrontCountDown();//开启倒计时
+ C['ad']['bottom']['mutedAndExit'].hide();
+ },
+ /*
+ * frontVideoClickHandler
+ * 功能:视频广告上方层单击事件
+ */
+ frontVideoClickHandler=function(){
+ var url=C['ad']['link'].attr('data-link');
+ window.open(url,'_blank');
+ },
+ /*
+ * closeFrontAd
+ * 功能:关闭贴片广告
+ */
+ closeFrontAd=function(){
+ if(!isUndefined(ad) && !isUndefined(ad['front']) && !isUndefined(ad['front']['closeButtonClick'])){
+ if(valType(ad['front']['closeButtonClick'])=='function'){
+ try{
+ ad['front']['closeButtonClick']();
+ }
+ catch(event){console.error(event);}
+ }
+ else if(valType(ad['front']['closeButtonClick'])=='string'){
+ try{
+ eval(ad['front']['closeButtonClick']+ '()');
+ }
+ catch(event){console.error(event);}
+ }
+ }
+ else {
+ player.closeFrontAd();
+ }
+ },
+ /*
+ * adPausePlay
+ * 功能:播放暂停广告
+ */
+ adPausePlay=function(){
+ closePauseAd();
+ if(!isUndefined(ad) && !isUndefined(ad['pause']) && !isUndefined(ad['pause']['list']) && ad['pause']['list'].length-1>=ad['pausePlayI']){
+ var adv=ad['pause']['list'][ad['pausePlayI']];
+ if(!isUndefined(ad['pause']['close']) && ad['pause']['close']){
+ ad['pauseClose']=createlButton('ck-pause-close');
+ ad['pauseClose'].click(function(){
+ C['centerPlay'].show();
+ C['buffer'].hide();
+ closePauseAd();
+ });
+ }
+ if(!isUndefined(adv['file'])){//图片
+ var img = null;
+ var imgloadNum=0;
+ var imgLoadHandler=function(){
+ img = createlImg(adv['file']);
+ C['adPause'].show();
+ C['adPause'].htm('');
+ C['adPause'].append(img);
+ img.addListener('load',function(){
+ var w=this.getWidth(),h=this.getHeight();
+ if(w>0 || h>0){
+ C['adPause'].htm('');
+ if(adv['link']){
+ var a=createlA('',adv['link']);
+ a.append(this);
+ C['adPause'].append(a);
+ }
+ else {
+ C['adPause'].append(this);
+ }
+
+ C['adPause'].css({
+ 'width':w+'px',
+ 'height':h+'px'
+ });
+ if(ad['pauseClose']){
+ C['adPause'].append(ad['pauseClose']);
+ }
+ img.click(function(){
+ eventTarget('pauseAdClick',adv);
+ });
+ }
+ else {
+ if(imgloadNum<10){
+ imgloadNum++;
+ imgLoadHandler();
+ }
+ }
+ });
+ };
+ imgLoadHandler();
+ }
+ else if(!isUndefined(adv['content'])){
+ ad['pause']['node']=player.layer(adv);
+ if(ad['pauseClose']){
+ ad['pause']['node'].append(ad['pauseClose']);
+ }
+ ad['pause']['node'].click(function(){
+ eventTarget('pauseAdClick',adv);
+ });
+ }
+ eventTarget('pauseAd',adv);
+ if(!isUndefined(adv['time']) && adv['time']>0){
+ adPauseSetTime=setTimeout(function(){
+ ad['pausePlayI']++;
+ if(ad['pausePlayI']>ad['pause']['list'].length-1){
+ ad['pausePlayI']=0;
+ }
+ adPausePlay();
+ },adv['time']*1000);
+ }
+ }
+ },
+ /*
+ * closePauseAd
+ * 功能:关闭暂停广告
+ */
+ closePauseAd=function(){
+ if(adPauseSetTime){
+ clearTimeout(adPauseSetTime);
+ adPauseSetTime=null;
+ }
+ C['adPause'].hide();
+ if(!isUndefined(ad) && !isUndefined(ad['pauseClose']) && ad['pauseClose']!=null){
+ ad['pauseClose'].remove();
+ ad['pauseClose']=null;
+ }
+ if(!isUndefined(ad) && !isUndefined(ad['pause']) && !isUndefined(ad['pause']['node']) && ad['pause']['node']){
+ ad['pause']['node'].unbind();
+ player.closeLayer(ad['pause']['node']);
+ eventTarget('pauseAdClose');
+ }
+ };
+ /*
+ * player
+ * 功能:开放接口,向外部提供播放器的交互功能列表,包含获取,执行,监听这三种功能
+ */
+ var player={
+ /*
+ * width
+ * 功能:获取或设置播放器宽度
+ * 这是一个动态的值,会随着全屏切换或播放器本身尺寸变化而变化
+ * @value,支持数字,字符,当存在@value时则设置播放器宽度,@value为空时则获取播放器宽度
+ */
+ width:function(value){
+ if(!isUndefined(value)){
+ if(valType(value)=='number'){
+ value+='px';
+ }
+ CT.css({'width':value});
+ checkVideoRotate();
+ }
+ return CK.getWidth();
+ },
+ /*
+ * height
+ * 功能:获取或设置播放器显示高度
+ * 这是一个动态的值,会随着全屏切换或播放器本身尺寸变化而变化
+ * @value,支持数字,字符,当存在@value时则设置播放器高度,@value为空时则获取播放器高度
+ */
+ height:function(value){
+ if(!isUndefined(value)){
+ if(valType(value)=='number'){
+ value+='px';
+ }
+ CT.css({'height':value});
+ checkVideoRotate();
+ }
+ return CK.getHeight();
+ },
+ /*
+ * videoWidth
+ * 功能:获取视频本身的宽度,这是一个固定值
+ */
+ videoWidth:function(){
+ if(video){
+ return video.videoWidth;
+ }
+ return null;
+ },
+ /*
+ * videoHeight
+ * 功能:获取视频本身的高度,这是一个固定值
+ */
+ videoHeight:function(){
+ if(video){
+ return video.videoHeight;
+ }
+ return null;
+ },
+ /*
+ * height
+ * 功能:获取或设置播放器显示高度
+ * 这是一个动态的值,会随着全屏切换或播放器本身尺寸变化而变化
+ * @value,支持数字,字符,当存在@value时则设置播放器高度,@value为空时则获取播放器高度
+ */
+ zoom:function(fn){
+ if(!isUndefined(fn)){
+ if(valType(fn)=='function'){
+ newEvent.addEventListener('zoom',fn);
+ }
+ if(valType(fn)=='number'){
+ var arr=[C['topBar']['zoomEle']['zoom50'],C['topBar']['zoomEle']['zoom75'],C['topBar']['zoomEle']['zoom100']];
+ for(var i=0;ifn && fn>0){
+ rot=arr[fn];
+ }
+ else {
+ if(arr.indexOf(fn)>-1){
+ rot=fn;
+ }
+ }
+ if(rot!=nowRotate){
+ eventTarget('rotate',rot);
+ nowRotate=rot;
+ checkVideoRotate();//调整视频尺寸
+ }
+ }
+ }
+ },
+ /*
+ * vars
+ * 提供给播放器外部使用
+ * 修改vars,动态切换视频地址
+ * @obj为新的播放配置对象
+ */
+ vars:function(obj,val){
+ if(isUndefined(obj)){
+ return;
+ }
+ if(valType(obj)=='string' && !isUndefined(val)){
+ var temp={};
+ temp[obj]=val;
+ obj=temp;
+ }
+ var isChange=false;
+ for(var k in obj){
+ if(k in vars && obj[k]!=vars[k]){
+ isChange=true;
+ break;
+ }
+ }
+ if(isChange){
+ vars = standardization(vars, obj);
+ }
+ if(!isUndefined(obj['video'])){
+ isChangeDef=true;
+ changeVideo(vars['video']);
+ }
+ if(!isUndefined(obj['title'])){
+ C['topBar']['titleEle'].htm(obj['title']);
+ }
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:监听视频准备加载
+ */
+ loadstart:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('loadstart',fn);
+ }
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:监听视频加载
+ */
+ loadeddata:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('loadeddata',fn);
+ }
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:监听视频元数据加载成功
+ */
+ loadedMetaData:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('loadedMetaData',fn);
+ }
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:监听视频可以播放
+ */
+ canplay:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('canplay',fn);
+ }
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:执行播放操作/监听播放
+ * @fn为函数时则监听视频播放,@fn为空时,则控制视频播放
+ */
+ play:function(fn){
+ if(valType(fn)=='object'){
+ if(fn['target']==C['bar']['playAndPause']['play'] || fn['target']==C['bar']['playAndPause']['refresh']){
+ playType='button';
+ }
+ }
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('play',fn);
+ }
+ else {
+ if(loadedmetadataNum>0 && video){
+ try{video.play();}catch(event){console.error(event);}
+ }
+ }
+ return player;
+ },
+ /*
+ * puase
+ * 功能:执行暂停操作/监听暂停
+ * @fn为函数时则监听视频暂停,@fn为空时,则控制视频暂停
+ */
+ pause:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('pause',fn);
+ }
+ else {
+ if(loadedmetadataNum>0 && video){
+ try{video.pause();}catch(event){console.error(event);}
+ }
+ }
+ return player;
+ },
+ /*
+ * playOrPause
+ * 功能:在播放和暂停动作之间进行切换
+ */
+ playOrPause:function(){
+ if(paused){
+ player.play();
+ }
+ else {
+ player.pause();
+ }
+ return player;
+ },
+ /*
+ * volume
+ * 功能:调节和监听以及获取音量
+ * @fn为函数时,则进行音量变化的监听,@fn为数字时,则进行音量调节,@fn为空时,则获取当前音量
+ */
+ volume:function(fn){
+ if(!isUndefined(fn)){
+ if(valType(fn)=='function'){
+ newEvent.addEventListener('volume', fn);
+ }
+ else if(valType(fn)=='number' && video){
+ if(fn<0)fn=0;
+ if(fn>1)fn=1;
+ if(video.muted){
+ video.volume=fn*.5;
+ }
+ video.volume=fn;
+ }
+ }
+ else if(video){
+ return video.volume;
+ }
+ return player;
+ },
+ /*
+ * muted
+ * 功能:执行静音操作/监听静音
+ * @fn为函数时则监听视频静音,@fn为空时,则控制视频静音
+ */
+ muted:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('muted', fn);
+ }
+ else if(video){
+ video.muted=true;
+ }
+ return player;
+ },
+ /*
+ * exitMuted
+ * 功能:执行取消静音操作
+ */
+ exitMuted:function(){
+ if(video){
+ video.muted=false;
+ if(video.volume==0){
+ player.volume(vars['volume']>0?vars['volume']:.8);
+ }
+ }
+ return player;
+ },
+ /*
+ * time
+ * 功能:获取当前播放时间/监听播放时间
+ * @fn为函数时监听当前播放时间,为空时获取当前播放时间
+ */
+ time:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('time',fn);
+ }
+ else if(video){
+ return video.currentTime || 0;
+ }
+ },
+ /*
+ * seek
+ * 功能:监听跳转/执行跳转操作
+ * @fn为函数时则监听视频跳转动作,@fn为数字时执行跳转操作
+ */
+ seek:function(fn){
+ if(!isUndefined(fn)){
+ if(valType(fn)=='function'){
+ newEvent.addEventListener('seek',fn);
+ }
+ if(valType(fn)=='number' && video){
+ switch(vars['timeScheduleAdjust']){
+ case 0://禁止拖动
+ message(language['timeScheduleAdjust']['prohibit']);
+ return;
+ break;
+ case 1://可以拖动
+ break;
+ case 2://只能前进(向右拖动
+ if(fnoldTime){
+ message(language['timeScheduleAdjust']['prohibitForward']);
+ return;
+ }
+ break;
+ case 4://只能前进但能回到第一次拖动时的位置
+ if(fnmaxSeeTime){
+ waitingMessage=false;
+ video.currentTime=maxSeeTime;
+ message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
+ return;
+ }
+ break;
+ }
+ pSliderMouseDown=false;
+ video.currentTime=fn;
+ }
+ }
+ return player;
+ },
+ /*
+ * buffer
+ * 功能:监听视频缓冲
+ * @fn为监听执行的函数
+ */
+ buffer:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('buffer',fn);
+ }
+ return player;
+ },
+ /*
+ * ended
+ * 功能:监听视频播放结束
+ * @fn为监听执行的函数
+ */
+ ended:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('ended',fn);
+ }
+ return player;
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:监听点击下一集按钮的动作
+ */
+ next:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('next',fn);
+ }
+ return player;
+ },
+ /*
+ * error
+ * 功能,监听播放器在加载视频过程和播放视频过程中出现的错误
+ * @fn为监听执行的函数
+ */
+ error:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('error',fn);
+ }
+ return player;
+ },
+ /*
+ * emptied
+ * 功能,监听播放器播放的视频文件发生故障并且文件突然不可用时
+ * @fn为监听执行的函数
+ */
+ emptied:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('emptied',fn);
+ }
+ return player;
+ },
+ /*
+ * duration
+ * 功能:获取视频总时间/监听视频总时间
+ * @fn为函数时执行监听视频总时间,为空时获取视频总时间
+ */
+ duration:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('duration',fn);
+ }
+ else {
+ return duration || 0;
+ }
+ },
+ /*
+ * playbackRate
+ * 功能:监听或返回视频播放速度
+ * @fn为函数时执行监听视频播放速度,为数字时切换播放速度,为空时获取视频播放速度
+ */
+ playbackRate:function(fn){
+ if(!isUndefined(fn)){
+ if(valType(fn)=='function'){
+ newEvent.addEventListener('playbackRate',fn);
+ }
+ else if(valType(fn)=='number' && video){
+ video.playbackRate=fn;
+ CT.playbackRate=fn;
+ eventTarget('playbackRate',fn);
+ changePlaybackrateVal(fn);
+ }
+
+ }
+ else {
+ return video.playbackRate;
+ }
+ },
+ /*
+ * track
+ * 功能:监听或返回视频的字幕
+ * @fn为函数时执行监听视频字幕,为数字时切换字幕,为空时获取字幕
+ */
+ track:function(fn){
+ if(!isUndefined(fn)){
+ if(valType(fn)=='function'){
+ newEvent.addEventListener('track',fn);
+ }
+ else if(valType(fn)=='number' && video){
+ var track=null;
+ if(!isUndefined(video.textTracks)){
+ track=video.textTracks;
+ }
+ if(track && valType(track)=='texttracklist'){
+ var arr=vars['track'];
+ for(var i=track.length-1;i>-1;i--){
+ video.find('track').eq(i).remove();
+ }
+ for(var i=0;i';
+ }
+ if(video){
+ var html=video.htm()+track;
+ video.htm(html);
+ }
+ changeTrackVal(fn);
+ }
+ }
+
+ }
+ else {
+ return CT.track;
+ }
+ },
+ /*
+ * fastBack
+ * 功能:快退
+ * @num为数字时快退指定秒数,为空时快退20秒
+ */
+ fastBack:function(num){
+ if(duration==0) return;
+ if(isUndefined(num) || valType(num)!='number'){
+ num=20;
+ }
+ var time=player.time();
+ if(time-num>0){
+ time-=num;
+ }
+ else {
+ time=0;
+ }
+ player.seek(time);
+ return player;
+ },
+ /*
+ * fastNext
+ * 功能:快进
+ * @num为数字时快进指定秒数,为空时快进20秒
+ */
+ fastNext:function(num){
+ if(duration==0) return;
+ if(isUndefined(num) || valType(num)!='number'){
+ num=20;
+ }
+ var time=player.time();
+ if(time+num200) zIndex=200;
+ if(isUndefined(ele.cssDisplay)){
+ ele.cssPosition=ele.css('position');
+ ele.cssDisplay=ele.css('display');
+ }
+ ele.css({
+ 'position': 'absolute',
+ 'z-index':zIndex
+ });
+ if(!cBar){
+ CM.append(ele);
+ }
+ else {
+ C['bar'].append(ele);
+ }
+ ele.CK=CK;
+ ele.show();
+ }
+ return ele;
+ },
+ /*
+ * closeLayer
+ * 功能:关闭一个层
+ */
+ closeLayer:function(ele){
+ if(valType(ele)=='string'){
+ var temp=$(ele);
+ if(!isUndefined(temp)){
+ if(temp.length>0){
+ ele=temp.eq(0);
+ }
+ }
+ }
+ if(!isUndefined(ele) && valType(ele)=='htmlobject'){
+ if(!isUndefined(ele.captureParentNode)){
+ var eleP=ele.captureParentNode;
+ if (ele.nextElement) {
+ try {
+ eleP.insertBefore(ele, ele.nextElement);
+ }
+ catch (event) {
+ eleP.append(ele);
+ }
+ }
+ else if (ele.prevElement) {
+ try {
+ eleP.insertAfter(ele, ele.prevElement);
+ }
+ catch (event) {
+ eleP.append(ele);
+ }
+ }
+ else {
+ eleP.append(ele);
+ }
+ ele.css({'display':ele.cssDisplay});
+ }
+ else {
+ ele.remove();
+ }
+ if(!isUndefined(ele.cssDisplay)){
+ ele.css({
+ 'display':ele.cssDisplay,
+ 'position':ele.cssPosition
+ });
+ }
+ }
+ return player;
+ },
+ /*
+ * message
+ * 在播放器内部显示一条提示信息
+ */
+ message:function(str){
+ message(str);
+ return player;
+ },
+ /*
+ * closeFrontAd
+ * 功能:关闭贴片广告
+ */
+ closeFrontAd:function(){
+ if(frontAdPlay && !isUndefined(ad) && !isUndefined(ad['front']) && !isUndefined(ad['front']['list'])){
+ ad['frontPlayI']=ad['front']['list'].length-1;
+ adFrontEnded();
+ clearAdFrontSetTime();
+ }
+ return player;
+ },
+ /*
+ * addListener
+ * 功能:监听功能
+ */
+ addListener:function(name,fn){
+ newEvent.addEventListener(name,fn);
+ },
+ /*
+ * removeListener
+ * 功能:监听功能
+ */
+ removeListener:function(name,fn){
+ newEvent.removeEventListener(name,fn);
+ },
+ /*
+ * bar
+ * 功能:显示/关闭底部控制栏
+ */
+ bar:function(bool){
+ barShow=bool;
+ if(bool){
+ C['bar'].show();
+ }
+ else {
+ C['bar'].hide();
+ }
+ },
+ /*
+ * rightBar
+ * 功能:显示/关闭右边控制栏
+ */
+ rightBar:function(bool){
+ rightBarShow=bool;
+ if(bool){
+ C['rightBar'].show();
+ }
+ else {
+ C['rightBar'].hide();
+ }
+ },
+ /*
+ * mouseActive
+ * 功能,监听鼠标是否经过播放器
+ */
+ mouseActive:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('mouseActive',fn);
+ }
+ return this;
+ },
+ /*
+ * cookie
+ * 功能,读取cookie
+ */
+ cookie:function(name){
+ if(name=='delete'){
+ cookie(moeplayerCookie,'delete',vars['domain']);
+ return null;
+ }
+ if(!isUndefined(name) && name){
+ name=name.replace(/[ ]*,[ ]*|[ ]+/g, '').replace(/[ ]*;[ ]*|[ ]+/g, '');
+ }
+ var cStr=cookie(moeplayerCookie);
+ if(cStr){
+ var arr=stringToArray(cStr);
+ var tempArr=[];
+ var cTime=parseInt(Date.now()*0.001);
+ for(i=0;icTime){
+ tempArr.push(arr[i]);
+ }
+ }
+ arr=tempArr;
+ if(arr.length>0){
+ cookie(moeplayerCookie,'delete',vars['domain'],vars['cookiePath']);
+ cookie(moeplayerCookie,arrayToString(arr),vars['domain'],vars['cookiePath']);
+ for(var i=0;i-1;i--){
+ var pTemp=createlButton('ck-list-p',playbackrate[i]+language['playbackrateSuffix']);
+ pTemp.attr('data-i',i).attr('data-val',playbackrate[i]);
+ C['bar']['playbackrate']['bg']['p'].push(pTemp);
+ C['bar']['playbackrate']['bg'].append(pTemp);
+ pTemp.click(playbackrateClick);
+ }
+ C['bar']['playbackrate'].hide();
+ if(!isUndefined(vars['playbackrateOpen']) && vars['playbackrateOpen']){
+ C['bar']['playbackrate'].show();
+ C['bar']['playbackrate']['bgbox'].show();
+ var w=C['bar']['playbackrate']['bg'].getWidth(),h=C['bar']['playbackrate']['bg'].getHeight();
+ var bw=C['bar']['playbackrate']['button'].getWidth();
+ C['bar']['playbackrate']['bg'].css({'width':w+10+'px'});
+ w=C['bar']['playbackrate']['bg'].getWidth();
+ if(getBarHeight()>C['bar'].getHeight()){
+ h+=(getBarHeight()-C['bar'].getHeight());
+ }
+ C['bar']['playbackrate']['bgbox'].attr('style','');
+ C['bar']['playbackrate']['bgbox'].css({
+ 'width':w+'px',
+ 'height':(h+2)+'px',
+ 'left':-(w-bw)*0.5+'px'
+ });
+ C['bar']['playbackrate']['button'].mouseover(function(){
+ w=C['bar']['playbackrate']['bg'].getWidth();
+ bw=C['bar']['playbackrate']['button'].getWidth();
+ C['bar']['playbackrate']['bgbox'].css({
+ 'left':-(w-bw)*0.5+'px'
+ });
+ });
+ changePlaybackrateVal(pbr);
+ }
+ },
+ /*
+ * playbackrateClick
+ * 功能:选择播速
+ */
+ playbackrateClick=function(e){
+ C['bar']['playbackrate']['bgbox'].hide();
+ setTimeout(function(){C['bar']['playbackrate']['bgbox'].removeCss('display');},300);
+ message(language['switchTo']+$(this).htm());
+ player.playbackRate(parseFloat($(this).attr('data-val')));
+ },
+ /*
+ * changePlaybackrateVal
+ * 功能:根据速度检查播速
+ */
+ changePlaybackrateVal=function(num){
+ C['bar']['playbackrate']['bg'].find('button').each(function(index,ele){
+ var val=parseFloat(ele.attr('data-val'));
+ ele.removeClass('ck-list-p-focus');
+ if(num==val){
+ ele.addClass('ck-list-p-focus');
+ if(num!=1){
+ C['bar']['playbackrate']['button'].htm(ele.htm());
+ }
+ else {
+ C['bar']['playbackrate']['button'].htm(language['playbackrate']);
+ }
+ }
+ else {
+ ele.removeClass('ck-list-p-focus');
+ }
+ });
+ },
+ /*
+ * checkTrack
+ * 功能:初始化或重置字幕组件内容
+ */
+ checkTrack=function(){
+ var track=vars['track'];
+ var pbr=-1;
+ C['bar']['track']['bgbox'].htm('');
+ C['bar']['track']['bg']=createlDiv('ck-list-bg');
+ C['bar']['track']['bgbox'].append(C['bar']['track']['bg']);
+ C['bar']['track']['bg']['p']=[];
+ var pTemp=null;
+ for(var i=track.length-1;i>-1;i--){
+ pTemp=createlButton('ck-list-p',track[i]['label']);
+ pTemp.attr('data-i',i).attr('data-title',track[i]['label']);
+ C['bar']['track']['bg']['p'].push(pTemp);
+ C['bar']['track']['bg'].append(pTemp);
+ if(!isUndefined(track[i]['default']) && track[i]['default']){
+ pbr=i;
+ }
+ pTemp.click(trackClick);
+ }
+ //
+ pTemp=createlButton('ck-list-p',language['noTrack']);
+ pTemp.attr('data-i',-1).attr('data-title',language['noTrack']);
+ C['bar']['track']['bg']['p'].push(pTemp);
+ C['bar']['track']['bg'].append(pTemp);
+ pTemp.click(trackClick);
+ //
+ C['bar']['track'].hide();
+ C['bar']['track'].show();
+ C['bar']['track']['bgbox'].show();
+ var w=C['bar']['track']['bg'].getWidth(),h=C['bar']['track']['bg'].getHeight();
+ var bw=C['bar']['track']['button'].getWidth();
+ C['bar']['track']['bg'].css({'width':w+10+'px'});
+ w=C['bar']['track']['bg'].getWidth();
+ if(getBarHeight()>C['bar'].getHeight()){
+ h+=(getBarHeight()-C['bar'].getHeight());
+ }
+ C['bar']['track']['bgbox'].attr('style','');
+ C['bar']['track']['bgbox'].css({
+ 'width':w+'px',
+ 'height':(h+2)+'px',
+ 'left':-(w-bw)*0.5+'px'
+ });
+ C['bar']['track']['button'].mouseover(function(){
+ w=C['bar']['track']['bg'].getWidth();
+ bw=C['bar']['track']['button'].getWidth();
+ C['bar']['track']['bgbox'].css({
+ 'left':-(w-bw)*0.5+'px'
+ });
+ });
+ changeTrackVal(pbr);
+ },
+ /*
+ * trackClick
+ * 功能:选择字幕
+ */
+ trackClick=function(e){
+ C['bar']['track']['bgbox'].hide();
+ setTimeout(function(){C['bar']['track']['bgbox'].removeCss('display');},300);
+ message(language['switchTo']+$(this).attr('data-title'));
+ player.track(parseFloat($(this).attr('data-i')));
+ },
+ /*
+ * changeTrackVal
+ * 功能:根据字幕检查
+ */
+ changeTrackVal=function(num){
+ C['bar']['track']['bg'].find('button').each(function(index,ele){
+ var i=parseInt(ele.attr('data-i'));
+ if(num==i){
+ C['bar']['track']['button'].htm(ele.attr('data-title'));
+ if(i>-1){
+ CT.track=vars['track'][i];
+ eventTarget('track',vars['track'][i]);
+ }
+ else {
+ CT.track=null;
+ eventTarget('track',null);
+ }
+ ele.addClass('ck-list-p-focus');
+ }
+ else {
+ ele.removeClass('ck-list-p-focus');
+ }
+ });
+ },
+ /*
+ * checkDefinition
+ * 功能:初始化或重置清晰度组件内容
+ */
+ checkDefinition=function(){
+ var pi=-1;
+ var videoUrl=video['currentSrc'];
+ if(!isUndefined(C['bar']['definition']['bg'])){
+ C['bar']['definition']['bgbox'].htm('');
+ C['bar']['definition']['bgbox'].attr('style','');
+ C['bar']['definition']['button'].htm(language['definition']);
+ }
+ if(valType(vars['video'])=='array'){
+ var arr=vars['video'];
+ C['bar']['definition']['bg']=createlDiv('ck-list-bg');
+ C['bar']['definition']['bgbox'].append(C['bar']['definition']['bg']);
+ C['bar']['definition']['bg']['p']=[];
+ for(var i=arr.length-1;i>-1;i--){
+ var pTemp=createlButton('ck-list-p',arr[i][2]);
+ pTemp.attr('data-i',i).attr('data-video',arr[i][0]).attr('data-type',arr[i][1]).attr('data-title',arr[i][2]);
+ C['bar']['definition']['bg']['p'].push(pTemp);
+ C['bar']['definition']['bg'].append(pTemp);
+ if(videoUrl && videoUrl.indexOf(arr[i][0])>-1){
+ pi=i;
+ }
+ pTemp.click(definitionClick);
+ }
+ C['bar']['definition'].show();
+ C['bar']['definition']['bgbox'].show();
+ var w=C['bar']['definition']['bg'].getWidth(),h=C['bar']['definition']['bg'].getHeight();
+ var bw=C['bar']['definition']['button'].getWidth();
+ C['bar']['definition']['bg'].css({'width':w+10+'px'});
+ w=C['bar']['definition']['bg'].getWidth();
+ if(getBarHeight()>C['bar'].getHeight()){
+ h+=(getBarHeight()-C['bar'].getHeight());
+ }
+ C['bar']['definition']['bgbox'].attr('style','');
+ C['bar']['definition']['bgbox'].css({
+ 'width':w+'px',
+ 'height':(h+2)+'px',
+ 'left':-(w-bw)*0.5+'px'
+ });
+ C['bar']['definition']['button'].mouseover(function(){
+ w=C['bar']['definition']['bg'].getWidth();
+ bw=C['bar']['definition']['button'].getWidth();
+ C['bar']['definition']['bgbox'].css({
+ 'left':-(w-bw)*0.5+'px'
+ });
+ });
+ }
+ if(pi>-1){
+ C['bar']['definition']['bg'].find('button').each(function(index,ele){
+ var i=parseInt(ele.attr('data-i'));
+ if(pi==i){
+ ele.addClass('ck-list-p-focus');
+ }
+ else {
+ ele.removeClass('ck-list-p-focus');
+ }
+ });
+ }
+ },
+ /*
+ * definitionClick
+ * 功能:选择清晰度
+ */
+ definitionClick=function(e){
+ C['bar']['definition']['bgbox'].hide();
+ setTimeout(function(){
+ C['bar']['definition']['bgbox'].removeCss('display');
+ },300);
+ changeDefinition(parseInt($(this).attr('data-i')));
+ },
+ /*
+ * changeDefinition
+ * 功能:检查清晰度
+ */
+ changeDefinition=function(num){
+ C['bar']['definition']['bg'].find('button').each(function(index,ele){
+ var i=parseInt(ele.attr('data-i'));
+ if(num==i){
+ if(!isUndefined(video.textTracks) && video.textTracks.length>0){
+ for(var y=video.find('track').length-1;y>-1;y--){
+ video.find('track').eq(y).remove();
+ }
+ }
+ seekTime=player.time();
+ video.attr('autoplay','autoplay');
+ changeVideo(ele.attr('data-video'));
+ message(language['switchTo']+ele.htm());
+ C['bar']['definition']['button'].htm(ele.htm());
+ ele.addClass('ck-list-p-focus');
+ eventTarget('definition',{id:i,video:ele.attr('data-video'),title:ele.attr('data-title')});
+ }
+ else {
+ ele.removeClass('ck-list-p-focus');
+ }
+ });
+ },
+ /*
+ * deletePrompt
+ * 功能:删除关键点
+ */
+ deletePrompt=function(){
+ var i=0;
+ if(!isUndefined(C['prompt']) && valType(C['prompt'])=='array'){
+ for(i=C['prompt'].length;i>-1;i--){
+ if(!isUndefined(C['prompt'][i])){
+ C['prompt'][i].remove();
+ }
+ }
+ C['prompt']=null;
+ }
+ C['prompt']=[];
+ },
+ /*
+ * changePrompt
+ * 功能:构建关键点
+ */
+ changePrompt=function(){
+ deletePrompt();
+ for(var i=0;i100) left=100;
+ ele.css({'left':left+'%'});
+ ele.mouseover(function(){
+ if(this.attr('data-words')){
+ showPromptWords(this);
+ }
+ });
+ ele.mouseout(function(){
+ if(this.attr('data-words')){
+ showPromptWords();
+ }
+ });
+ C['prompt'].push(ele);
+ }
+ }
+ },
+ /*
+ * showPromptWords
+ * 功能:显示关键点提示
+ */
+ showPromptWords=function(ele){
+ if(isUndefined(C['promptWords'])){
+ C['promptWords']=createlDiv('ck-prompt-words');
+ CM.append(C['promptWords']);
+ C['promptWords']['content']=createlDiv('ck-prompt-content');
+ C['promptWords'].append(C['promptWords']['content']);
+ }
+ if(isUndefined(ele)){
+ C['promptWords']['content'].htm('');
+ C['promptWords'].hide();
+ return;
+ }
+ C['promptWords']['content'].htm(ele.attr('data-words'));
+ C['promptWords'].show();
+ var pW=C['promptWords'].getWidth(),pH=C['promptWords'].getHeight();
+ var bg=C['bar']['pbox']['bg'];
+ var time=parseFloat(ele.attr('data-time'));
+ var top=CK.getHeight()-getBarHeight();
+ var left=ele.offset()['left']-CK.offset()['left']+ele.getWidth()*.5-pW*.5;
+ if(!isUndefined(C['preview'])){
+ top=CK.getHeight()-parseFloat((getBarHeight()+C['preview']['smallHight']+parseInt(C['preview'].css('margin-bottom'))));
+ }
+ else {
+ top=CK.getHeight()-parseFloat((getBarHeight()+C['tip']['minHeight']+parseInt(C['tip'].css('margin-bottom'))));
+ top-=(getBarHeight()-C['bar'].getHeight());
+ }
+ top-=parseFloat(C['promptWords'].css('margin-bottom'));
+ top-=pH;
+ left-=parseFloat(C['promptWords'].css('margin-right'));
+ if(left<0)left=0;
+ if(left>CK.getWidth()-pW)left=CK.getWidth()-pW;
+ C['promptWords'].css({
+ 'top':top+'px',
+ 'left':left+'px'
+ });
+ },
+ /*
+ * changePreview
+ * 功能:加载或重置预览图片
+ */
+ changePreview=function(preview){
+ if(!isUndefined(C['preview'])){
+ C['preview'].remove();
+ C['preview']=null;
+ }
+ if(!isUndefined(preview)){
+ C['preview']=createlDiv('ck-preview');
+ CM.append(C['preview']);
+ if(isUndefined(vars['preview']['type'])){
+ vars['preview']['type']=0;
+ }
+ if(vars['preview']['type']==1){
+ C['preview']['bg']=createlDiv('ck-preview-bg');
+ C['preview'].append(C['preview']['bg']);
+ }
+ var files=[];
+ var loadImg=function(bigW,bigH,smallW,smallH){
+ if(vars['preview']['type']==1){
+ C['preview']['bg']['img']=[];
+ for(var i=0;i1){
+ if(valType(vars['preview']['thumbnail'][0])=='number'){
+ thumbnail[0]=vars['preview']['thumbnail'][0];
+ }
+ if(valType(vars['preview']['thumbnail'][1])=='number'){
+ thumbnail[1]=vars['preview']['thumbnail'][1];
+ }
+ vars['preview']['thumbnail']=thumbnail;
+ }
+ if(files[0]){
+ var img = createlImg(files[0],'ck-preview-load-img').addListener('load',function(){
+ loadImg(this.getWidth(),this.getHeight(),this.getWidth()/thumbnail[0],this.getHeight()/thumbnail[1]);
+ this.remove();
+ });
+ CM.append(img);
+ }
+ }
+ else {
+ C['preview'].removeChild();
+ C['preview']=null;
+ }
+ }
+ else {
+ C['preview'].removeChild();
+ C['preview']=null;
+ }
+ }
+ },
+ /*
+ * showPreview
+ * 功能:显示预览图
+ */
+ showPreview=function(time){
+ if(hidePreviewSetTime){
+ clearTimeout(hidePreviewSetTime);
+ hidePreviewSetTime=null;
+ }
+ if(time<0){
+ if(!isUndefined(C['preview'])){
+ hidePreviewSetTime=setTimeout(function(){
+ C['preview'].hide();
+ hidePreviewSetTime=null;
+ },200);
+ return;
+ }
+ }
+ if(!isUndefined(C['preview']) && !isUndefined(vars['preview']['thumbnail']) && duration>0){
+ if(isUndefined(vars['preview']['type'])){
+ vars['preview']['type']=0;
+ }
+ var scale=2,thumbnail=vars['preview']['thumbnail'];
+ if(!isUndefined(vars['preview']['scale'])){
+ scale=vars['preview']['scale'];
+ }
+ var divI=0,imgI=0;
+ var left=0,frameLeft=0;
+ var pW=0;
+ var smallW=C['preview']['smallWidth'],smallH=C['preview']['smallHight'];
+ var bgXw=time*C['bar']['pbox']['bg'].getWidth()/duration+(C['bar']['pbox']['bg'].offset()['left']-CK.offset()['left']);
+ if(C['preview'].css('display')=='none'){
+ C['preview'].show();
+ }
+ C['preview'].css({
+ 'height':smallH+'px',
+ });
+ if(vars['preview']['type']==1){
+ divI=parseInt(time/(scale*thumbnail[0]));
+ imgI=parseInt(time/scale);
+ var minI=divI-5,maxI=divI+5;
+ if(minI<0) minI=0;
+ if(maxI>C['preview']['bg']['img'].length-1){
+ maxI=C['preview']['bg']['img'].length-1;
+ }
+ for(var i=minI;iC['preview'].getWidth()-C['preview']['frame'].getWidth()){
+ var xz=frameLeft-(C['preview'].getWidth()-C['preview']['frame'].getWidth());
+ frameLeft=C['preview'].getWidth()-C['preview']['frame'].getWidth();
+ left-=xz;
+ }
+ C['preview']['bg'].css({'left':left+'px'});
+ C['preview']['frame'].css({'left':frameLeft+'px'});
+ }
+ else {
+ var temp=(time/scale)/(thumbnail[0]*thumbnail[1]);
+ imgI=parseInt(temp);//计算显示的图片编号
+ var smallI=parseInt((temp-imgI)*100);
+ var rows=parseInt(smallI/thumbnail[0]);
+ var column=smallI%thumbnail[0];
+ var files=vars['preview']['file'];
+ left=bgXw-smallW*.5;
+ if(left<0){
+ left=0;
+ }
+ if(left>CK.getWidth()-smallW){
+ left=CK.getWidth()-smallW;
+ }
+ C['preview'].css({
+ 'width':C['preview']['smallWidth']+'px',
+ 'background':'url('+files[imgI]+') no-repeat',
+ 'background-position':'-'+column*smallW+'px -'+rows*smallH+'px',
+ 'left':left+'px'
+ });
+ }
+ }
+ },
+ /*
+ * showError
+ * 功能:显示错误信息
+ */
+ showError=function(){
+ C['loading'].hide();
+ if(vars['controls'] || !vars['errorShow']){
+ return;
+ }
+ if(isUndefined(C['error'])){
+ C['error']=createlDiv('ck-error');
+ CM.append(C['error']);
+ }
+ var msg=CT.error['message'];
+ if(!msg) msg=language['error']['noMessage'];
+ var html=msg+'(code:'+CT.error['code']+')';
+ C['error'].htm(html);
+ C['error'].show();
+ },
+ /*
+ * showWindowsError
+ * 功能:显示错误信息
+ */
+ showWindowsError=function(error){
+ var ele=createlDiv('moeplayer-error',error);
+ $('body').append(ele);
+ },
+ /*
+ * showNextEpisode
+ * 功能:鼠标经过下一集按钮的动作
+ */
+ showNextEpisode=function(){
+ if(isUndefined(vars['next'])) return;
+ if(valType(vars['next'])=='object'){
+ if('content' in vars['next']){
+ C['next']=player.layer(vars['next']);
+ return;
+ }
+ if('title' in vars['next']){
+ tip(C['bar']['nextEpisode'],vars['next']['title']);
+ return;
+ }
+ }
+ tip(C['bar']['nextEpisode'],language['next']);
+ },
+ /*
+ * nextClick
+ * 功能:点击下一集按钮的动作
+ */
+ nextClick=function(){
+ if(valType(vars['next'])=='object'){
+ if('click' in vars['next']){
+ if(valType(vars['next']['click'])=='function'){
+ vars['next']['click']();
+ }
+ else if(valType(vars['next']['click'])=='string'){
+ eval(vars['next']['click']+'()');
+ }
+ }
+ if('link' in vars['next']){
+ window.location.href=vars['next']['link'];
+ }
+ eventTarget('next');
+ }
+ },
+ /*
+ * showEnded
+ * 功能:播放结束后的显示内容
+ */
+ showEnded=function() {
+ if(!CT.loop && !isUndefined(vars['ended'])){
+ closePauseAd();
+ C['ended']=player.layer(vars['ended']);
+ if(C['ended']){
+ C['centerPlay'].hide();
+ }
+ return;
+ }
+ },
+ /*
+ * windowScroll
+ * 功能:监听页面滚动
+ */
+ windowScroll=function() {
+ if(!CT.smallWindows) return;
+ if(CT.webFull || CT.theatre || CT.full){
+ exitSmallWindows();
+ return;
+ }
+ var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
+ if(scrollTop>CT.offset()['top']+CT.getHeight()){
+ if(!CK.hasClass('moeplayer-smallwindow')){
+ CK.addClass('moeplayer-smallwindow');
+ eventTarget('smallWindows',true);
+ smallWindowsState=true;
+ if(vars['smallWindowsDrag']){
+ drag(true);
+ }
+ allBarHide();
+ checkVideoRotate();
+ }
+ }
+ else {
+ exitSmallWindows();
+ }
+ },
+ /*
+ * exitSmallWindows
+ * 退出小窗口模式
+ */
+ exitSmallWindows=function(){
+ if(CK.hasClass('moeplayer-smallwindow')){
+ CK.removeClass('moeplayer-smallwindow');
+ if(vars['smallWindowsDrag']){
+ drag();
+ }
+ eventTarget('smallWindows',false);
+ smallWindowsState=false;
+ allBarShow();
+ checkVideoRotate();
+ }
+ },
+ /*
+ * drag
+ * 功能,使节点可拖动
+ * state:是否开启可拖动,默认=false,关闭状态
+ */
+ drag=function(state) {
+ var doc=$(document);
+ var posX = 0,posY = 0,
+ posXRecord = 0,posYRecord = 0;
+ var open=false;
+ if(!isUndefined(state)){
+ open=state;
+ }
+ var mouseDown = function(e) {
+ e.preventDefault && e.preventDefault();
+ e = e || window.event;
+ var client = getClient(e);
+ posXRecord = client['x'];
+ posYRecord = client['y'];
+ doc.mousemove(docMouseMove);
+ doc.mouseup(docMouseUp);
+ CK.css({
+ 'cursor':'move'
+ });
+ };
+ var docMouseMove = function(e) {
+ e = e || window.event;
+ var client = getClient(e);
+ var eleOffset = CK.offset();
+ posY = client['y']-posYRecord;
+ posX = client['x']-posXRecord;
+ posXRecord = client['x'];
+ posYRecord = client['y'];
+ var left=eleOffset['left']+posX;
+ var top=eleOffset['top']+posY;
+ CK.css({
+ 'left':left+'px',
+ 'top':top+'px'
+ });
+ if(CK.css('position')!='fixed'){
+ CK.css({
+ 'position':'fixed'
+ });
+ }
+ isDrag=true;
+ };
+ var docMouseUp = function() {
+ doc.removeListener('mousemove', docMouseMove);
+ doc.removeListener('mouseup', docMouseUp);
+ CK.css({
+ 'cursor':'default'
+ });
+ };
+ if(open){
+ CK.mousedown(mouseDown);
+ }
+ else {
+ CK.unbind('mousedown');
+ }
+ },
+ /*
+ * checkVideoRotate
+ * 检查播放器尺寸
+ */
+ checkVideoRotate=function(){
+ var ckW=CK.getWidth()*nowZoom*0.01,ckH=CK.getHeight()*nowZoom*0.01;
+ var vW=CV.getWidth(),vH=CV.getHeight();
+ CV.css({
+ 'transform':'rotate('+nowRotate+'deg)',
+ '-ms-transform':'rotate('+nowRotate+'deg)',
+ '-moz-transform':'rotate('+nowRotate+'deg)',
+ '-webkit-transform':'rotate('+nowRotate+'deg)',
+ '-o-transform':'rotate('+nowRotate+'deg)',
+ 'width':nowZoom+'%',
+ 'height':nowZoom+'%'
+ });
+ if(nowRotate!=0 && nowRotate!=180){
+ if(vH>ckW && vW>ckH){
+ if(vH / ckW > vW / ckH) {
+ CV.css({
+ 'height':nowZoom+'%',
+ 'width':ckH+'px'
+ });
+ }
+ else {
+ CV.css({
+ 'width':nowZoom+'%',
+ 'height':ckW+'px'
+ });
+ }
+ return;
+ }
+ if(vHckH){
+ CV.css({
+ 'height':nowZoom+'%',
+ 'width':ckH+'px'
+ });
+ }
+ else {
+ if(vH / vW >= ckW / ckH) {
+ CV.css({
+ 'width':nowZoom+'%',
+ 'height':ckW+'px'
+ });
+ }
+ else {
+ CV.css({
+ 'height':nowZoom+'%',
+ 'width':ckH+'px'
+ });
+ }
+ }
+ return;
+ }
+ if(vH>=ckW && vW<=ckH){
+ CV.css({
+ 'width':nowZoom+'%',
+ 'height':ckW+'px'
+ });
+ return;
+ }
+ if(vW>=ckH && vHC['bar'].getHeight()){
+ top-=(getBarHeight()-C['bar'].getHeight());
+ }
+ if(w>ew){
+ left=offset['left']-ckOffset['left']-(w-ew)*.5;
+ }
+ else {
+ left=offset['left']-ckOffset['left']+(ew-w)*.5;
+ }
+ if(align=='left'){
+ left=offset['left']-ckOffset['left']-w;
+ top=offset['top']-ckOffset['top'];
+ }
+ if(!isUndefined(cl)){
+ left=cl['x']-ckOffset['left']-w*.5;
+ }
+ if(left<0){
+ left=0;
+ }
+ if(top<0){
+ top=0;
+ }
+ if(left>CM.getWidth()-w){
+ left=CM.getWidth()-w;
+ }
+ if(top>CM.getHeight()-h){
+ top=CM.getHeight()-h;
+ }
+ C['tip'].css({
+ 'left':left+'px',
+ 'top':top-parseInt(C['tip'].css('margin-bottom'))+'px'
+ });
+ },
+ /*
+ * progressDragX
+ * 功能:制作进度调节框事件
+ */
+ progressDragX=function(){
+ var bg=C['bar']['pbox']['bg'],
+ play=C['bar']['pbox']['play'],
+ slider=C['bar']['pbox']['slider'],
+ mouseLine=C['bar']['pbox']['mouseLine'];
+ slider.unbind();
+ bg.unbind();
+ var pos = 0,
+ posRecord = 0;
+ var doc=$(document);
+ var sliderDownTime=0;
+ var sliderMouseDown = function(e) {
+ e.preventDefault && e.preventDefault();
+ if(!vars['timeScheduleAdjust']){//禁止拖动
+ return;
+ }
+ e = e || window.event;
+ var eleOffset = slider.offset(),bgOffset=bg.offset(),client = getClient(e);
+ pSliderMouseDown=true;
+ posRecord = client['x'];
+ //供比较
+ var left = eleOffset['left']-bgOffset['left'];
+ sliderDownTime=left*duration/(bg.getWidth()-slider.getWidth());
+ slider.removeListener('mousedown', sliderMouseDown);
+ slider.removeListener('touchstart', sliderMouseDown);
+ doc.mousemove(docMouseMove);
+ doc.mouseup(docMouseUp);
+ slider.touchmove(docMouseMove);
+ slider.touchend(docMouseUp);
+ noScrolling(true);
+ };
+ var docMouseMove = function(e) {
+ e = e || window.event;
+ var eleOffset = slider.offset(),bgOffset=bg.offset(),client = getClient(e);
+ pSliderMouseDown=true;
+ pos = posRecord - client['x'];
+ posRecord = client['x'];
+ var left = eleOffset['left'] - pos-bgOffset['left'];
+ if(left<0){
+ left=0;
+ }
+ if(left>bg.getWidth()-slider.getWidth()){
+ left=bg.getWidth()-slider.getWidth();
+ }
+ C['bar']['pbox'].addClass('ck-bar-progress-slider-move');
+ //预览时间
+ var time='';
+ if(!vars['live']){
+ time=left*duration/(bg.getWidth()-slider.getWidth());
+ switch(vars['timeScheduleAdjust']){
+ case 2://只能前进(向右拖动
+ if(timesliderDownTime){
+ left=-1000;
+ message(language['timeScheduleAdjust']['prohibitForward']);
+ return;
+ }
+ break;
+ case 4://只能前进但能回到第一次拖动时的位置
+ if(timemaxSeeTime){
+ left=-1000;
+ player.seek(maxSeeTime);
+ message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
+ return;
+ }
+ break;
+ }
+ time=formatSeconds(time);
+ }
+ else {
+ time=formatLiveTime(left*getLiveTime()/(bg.getWidth()-slider.getWidth()));
+ }
+ tip(slider,time);
+ if(left>=0){
+ slider.css({
+ 'left': left + 'px'
+ });
+ play.css({
+ 'width': left+ slider.getWidth()*.5+ 'px'
+ });
+ }
+ else {
+ pSliderMouseDown=false;
+ }
+
+ };
+ var docMouseUp = function() {
+ noScrolling();
+ doc.removeListener('mousemove', docMouseMove);
+ doc.removeListener('mouseup', docMouseUp);
+ slider.removeListener('touchmove', docMouseMove);
+ slider.removeListener('touchend', docMouseUp);
+ slider.mousedown(sliderMouseDown);
+ slider.touchstart(sliderMouseDown);
+ if(!vars['live']){
+ var time=play.getWidth()*duration/(bg.getWidth()-slider.getWidth()*.5);
+ if(time>duration){
+ time=duration;
+ }
+ seekTime=0;
+ player.seek(time);
+ }
+ else {
+ var playbackTime=parseInt(vars['live']+play.getWidth()*getLiveTime()/(bg.getWidth()-slider.getWidth()*.5));
+ eventTarget('playback',{time:playbackTime,date:date('Y-m-d H:i:s',playbackTime)});
+ eventTarget('seek',{time:playbackTime,state:'seeking',date:date('Y-m-d H:i:s',playbackTime)});
+ }
+ C['bar']['pbox'].removeClass('ck-bar-progress-slider-move');
+ if(isMouseLeave){
+ tip();
+ }
+ };
+ var isMouseLeave=true;//默认鼠标离开了进度按钮上
+ var sliderMouseOver=function(){
+ var time='';
+ if(!vars['live']){
+ time=formatSeconds(parseInt(slider.css('left'))*duration/(bg.getWidth()-slider.getWidth()));
+ }
+ else {
+ time=language['live'];
+ }
+ isMouseLeave=false;
+ tip(slider,time);
+ };
+
+ var sliderMouseLeave=function(){
+ isMouseLeave=true;
+ };
+ slider.mousedown(sliderMouseDown);
+ slider.mouseover(sliderMouseOver);
+ slider.mouseleave(sliderMouseLeave);
+ slider.touchstart(sliderMouseDown);
+ var bgMouseDown=function(e){
+ e = e || window.event;
+ var client = getClient(e);
+ var bgOffset=bg.offset();
+ var w=client['x']-bgOffset['left'];
+ if(CT.full){
+ w+=CK.offset()['left'];
+ }
+ if(!vars['live']){
+ var time=duration*w/bg.getWidth();
+ switch(vars['timeScheduleAdjust']){
+ case 0://禁止拖动
+ message(language['timeScheduleAdjust']['prohibit']);
+ return;
+ break;
+ case 2://只能前进(向右拖动
+ if(timeoldTime){
+ message(language['timeScheduleAdjust']['prohibitForward']);
+ return;
+ }
+ break;
+ case 4://只能前进但能回到第一次拖动时的位置
+ if(timemaxSeeTime){
+ message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
+ return;
+ }
+ break;
+ }
+ seekTime=0;
+ player.seek(time);
+ }
+ else {
+ var playbackTime=parseInt(vars['live']+getLiveTime()*w/bg.getWidth());
+ eventTarget('playback',{time:playbackTime,date:date('Y-m-d H:i:s',playbackTime)});
+ eventTarget('seek',{time:playbackTime,state:'seeking',date:date('Y-m-d H:i:s',playbackTime)});
+ }
+ if(w>bg.getWidth()-slider.getWidth()*.5){
+ w=bg.getWidth()-slider.getWidth()*.5;
+ }
+ if(wmaxTop){
+ sliderTop=maxTop;
+ }
+ slider.css({
+ 'top':sliderTop+'px'
+ });
+ var ppMarginTop=sliderTop-minTop+slider.getHeight()*0.5;
+ pp.css({
+ 'margin-top':ppMarginTop+'px'
+ });
+ var vol=(bg.getHeight()-ppMarginTop-slider.getHeight()*0.5)/(bg.getHeight()-slider.getHeight());
+ player.volume(vol);
+ };
+ var docMouseUp = function() {
+ noScrolling();
+ doc.removeListener('mousemove', docMouseMove);
+ doc.removeListener('mouseup', docMouseUp);
+ slider.removeListener('touchmove', docMouseMove);
+ slider.removeListener('touchend', docMouseUp);
+ slider.mousedown(sliderMouseDown);
+ slider.touchstart(sliderMouseDown);
+ C['bar']['vbox']['mouseDown']=false;
+ };
+ slider.mousedown(sliderMouseDown);
+ slider.touchstart(sliderMouseDown);
+ var bgMouseDown=function(e){
+ e = e || window.event;
+ var client = getClient(e);
+ var bgOffset=bg.offset();
+ var h=client['y']-bgOffset['top'];
+ var max=bg.getHeight();
+ var vol=1-h/max;
+ player.volume(vol);
+ };
+ bg.mousedown(bgMouseDown);
+ },
+ /*
+ * changeProgress
+ * 功能:根据时间调节播放进度
+ */
+ changeProgress=function(time){
+ if((valType(vars['live'])=='boolean' && vars['live'])){
+ return;
+ }
+ if(!pSliderMouseDown){
+ var bg=C['bar']['pbox']['bg'],slider=C['bar']['pbox']['slider'];
+ var playW=(time/duration)*100;
+
+ if(valType(vars['live'])=='number'){
+ playW='100';
+ }
+ C['bar']['pbox']['play'].css({'width':playW+'%'});
+ var sliderW=(slider.getWidth()/bg.getWidth())*100;
+ var sliderLeft=playW-sliderW*.5;
+ if(sliderLeft<0){
+ sliderLeft=0;
+ }
+ if(sliderLeft>100-sliderW){
+ sliderLeft=100-sliderW;
+ }
+ C['bar']['pbox']['slider'].css({'left':sliderLeft+'%'});
+ checkProgressSlider();
+ }
+ },
+ /*
+ * checkProgressSlider
+ * 功能:检查设置播放进度条位置
+ */
+ checkProgressSlider=function(){
+ var bg=C['bar']['pbox']['bg'],slider=C['bar']['pbox']['slider'];
+ var st=0;
+ if(C['bar']['pbox'].css('transition-duration')){
+ st=parseFloat(C['bar']['pbox'].css('transition-duration'))*1000+20;
+ }
+ var checkThis=function(){
+ var sliderLeft=parseInt(C['bar']['pbox']['slider'].css('left'));
+ if(sliderLeft<0){
+ sliderLeft=0;
+ C['bar']['pbox']['slider'].css({'left':sliderLeft+'px'});
+ }
+ if(sliderLeft>bg.getWidth()-slider.getWidth()){
+ sliderLeft=bg.getWidth()-slider.getWidth();
+ C['bar']['pbox']['slider'].css({'left':sliderLeft+'px'});
+ }
+ };
+ setTimeout(checkThis,st);
+ },
+ /*
+ * changeTopTime
+ * 功能:修改顶部右侧时间
+ */
+ changeTopTime=function(){
+ C['topBar']['timeEle'].htm(date('H:i:s'));
+ setTimeout(changeTopTime,1000);
+ },
+ /*
+ * changeVolumeSlider
+ * 功能:根据音量改变滑块位置
+ */
+ changeVolumeSlider=function(vol){
+ if(!isUndefined(C['bar']['vbox'])){
+ var box=C['bar']['vbox']['volume']['box'],
+ bg=C['bar']['vbox']['volume']['bg'],
+ pp=C['bar']['vbox']['volume']['pp'],
+ slider=C['bar']['vbox']['volume']['slider'];
+ C['bar']['vbox']['volume']['txt'].htm(parseInt(vol*100));
+ var bgH=bg.getHeight();
+ if(bgH){
+ var ppMarginTop=bgH-vol*bgH;
+ pp.css({
+ 'margin-top':ppMarginTop+'px'
+ });
+ var sliderTop=bg.offset()['top']-box.offset()['top']+ppMarginTop-slider.getHeight()*0.5;
+ slider.css({
+ 'top':sliderTop+'px'
+ });
+ }
+ }
+ },
+ /*
+ * changeLoad
+ * 功能:获取视频已加载部分并修改加载进度栏
+ */
+ changeLoad=function(){
+ if(video){
+ var len = video.buffered.length;
+ if(len>0){
+ var bufferEnd = video.buffered.end(len-1);
+ if(loadTime= 1000) {
+ last += offset;
+ appendFps(fps);
+ fps = 0;
+ }
+ requestAnimationFrame(step);
+ };
+ var appendFps = function(fps) {
+ if(fps!=CT.fps){
+ CT.fps=fps;
+ replaceInformation('fps',fps);
+ eventTarget('fps',fps);
+ }
+
+ };
+ if(isUndefined(CT.fps)){
+ CT.fps=0;
+ }
+ step();
+ },
+ /*
+ * getElement
+ * 功能:获取一个外部节点
+ */
+ getElement=function(content){
+ var ele=$(content);
+ if(isUndefined(ele)) return;
+ if(valType(ele)=='htmlarray'){
+ ele=ele[0];
+ }
+ if(isUndefined(ele.captureParentNode)){
+ ele.captureParentNode = ele.parentNode;
+ ele.prevElement=ele.prev();
+ ele.nextElement=ele.next();
+ }
+ return ele;
+ },
+ /*
+ * $
+ * 功能:根据ID或className或节点节点名称获取对象
+ */
+ $=function(obj, eL) {
+ var parent = null;
+ if (document) {
+ parent = document;
+ }
+ if (!isUndefined(eL)) {
+ parent = eL;
+ }
+ var res = [];
+ if (obj) {
+ if (valType(obj) == 'htmlobject' || valType(obj)=='object') {
+ res = obj;
+ if (!isUndefined(res.moeplayer)) {
+ return res;
+ }
+ }
+ else if (valType(obj) == 'string' && obj!='') {
+ switch (obj.substr(0, 1)) {
+ case '.':
+ obj = obj.substr(1, obj.length);
+ if (parent.getElementsByClassName) {
+ res = parent.getElementsByClassName(obj);
+ if (!res.length) {
+ return null;
+ }
+ }
+ else if (!parent && document.getElementsByClassName) {
+ res = document.getElementsByClassName(obj);
+ if (!res.length) {
+ return null;
+ }
+ }
+ else {
+ var reg = new RegExp(' ' + obj + ' ', 'i');
+ var ele = null;
+ if (parent.getElementsByTagName) {
+ ele = parent.getElementsByTagName('*');
+ } else {
+ ele = document.getElementsByTagName('*');
+ }
+ for (var i = 0; i < ele.length; i++) {
+ if (reg.test(' ' + ele[i].className + ' ')) {
+ res.push(ele[i]);
+ }
+ }
+ }
+ if (res) {
+ if (res.length === 0) {
+ res = null;
+ }
+ }
+ break;
+ case '#':
+ obj = obj.substr(1, obj.length);
+ if (parent.getElementById) {
+ res = parent.getElementById(obj);
+ } else {
+ res=document.getElementById(obj);
+ }
+ break;
+ default:
+ var reg = new RegExp(' ' + obj + ' ', 'i');
+ if (parent.getElementsByTagName) {
+ res = parent.getElementsByTagName(obj);
+ } else {
+ res = document.getElementsByTagName(obj);
+ }
+ if (res) {
+ if (obj == 'body' || obj == 'document' || obj == 'html') {
+ res = res[0];
+ } else if (res.length === 0) {
+ res = null;
+ }
+ } else {
+ res = null;
+ }
+ break;
+ }
+ }
+ else {
+ res = obj;
+ }
+ }
+ else {
+ res = document;
+ }
+
+ if (res) {
+ if (valType(res) == 'htmlobject' || valType(res) == 'object' || valType(res) == 'document') {
+ res.moeplayer = 'Thanks for using';
+ /*
+ * find
+ * 功能:在当前节点中查找指定节点
+ */
+ res.find = function(obj) {
+ return $(obj, this);
+ };
+ /*
+ * attr
+ * 功能:修改或获取节点的属性值
+ * @key不能为空,指属性名称,$value不为空则设置属性值,为空则获取属性值
+ */
+ res.attr = function(key, value) {
+ if (isUndefined(value)) {
+ return this.getAttribute(key);
+ }
+ else {
+ this.setAttribute(key, value);
+ return this;
+ }
+ };
+ /*
+ * removeAtt
+ * 功能:删除节点的属性值
+ * @key不能为空,指属性名称
+ */
+ res.removeAttr = function(key) {
+ this.removeAttribute(key);
+ return this;
+ };
+ /*
+ * css
+ * 功能:修改或获取节点的样式样式
+ * @key不能为空,指属性名称,$value不为空则设置属性值,为空则获取属性值
+ */
+ res.css = function(key, value) {
+ // 拆解字符串并将第二单词首字母大写
+ var keyNew = function(str) {
+ // 当属性名有横杠时
+ if (str.indexOf('-') != -1) {
+ var arr = str.split('-');
+ var a = arr[0];
+ var b = '',
+ c = '';
+ if (arr.length > 1) {
+ b = arr[1].substr(0, 1).toLocaleUpperCase() + arr[1].substr(1, arr[1].length - 1);
+ }
+ if (arr.length > 2) {
+ b = arr[2].substr(0, 1).toLocaleUpperCase() + arr[2].substr(1, arr[2].length - 1);
+ }
+ return a + b + c;
+ }
+ // 没有横杠就不进行字符串拆解
+ return str;
+ };
+ if (isUndefined(value)){
+ if (!isUndefined(key) && valType(key) == 'string') {
+ if (this.currentStyle) {
+ return this.currentStyle[key];
+ } else {
+ return document.defaultView.getComputedStyle(this, null)[key];
+ }
+ }
+ if (isUndefined(key)) {
+ if (this.currentStyle) {
+ return this.currentStyle;
+ } else {
+ return document.defaultView.getComputedStyle(this, null);
+ }
+ }
+ }
+ // 当传进来的参数key不是一个对象,给节点添加css样式
+ if (valType(key) != 'object') {
+ var newKey = keyNew(key);
+ if (this.length > 1) {
+ // 如果this有多个值,那给每个节点都添加样式
+ for (var i = 0; i < this.length; i++) {
+ this[i].style[newKey] = value;
+ }
+ } else {
+ this.style[newKey] = value;
+ }
+ } else {
+ //如果第一个值是一个对象,遍历这个对象,并将属性名传进函数进行拆解
+ for (var item in key) {
+ var objKey = keyNew(item);
+ if (valType(this) == 'htmlarray') {
+ for (var i = 0; i < this.length; i++) {
+ this[i].style[objKey] = key[item];
+ }
+ } else {
+ this.style[objKey] = key[item];
+ }
+ }
+ }
+ return this;
+ };
+ res.hasClass = function(cName) {
+ if (isUndefined(cName)) return false;
+ var reg = new RegExp('(\\s|^)' + cName + '(\\s|$)');
+ if (this.className && this.className.match(reg)) {
+ return true;
+ }
+ return false;
+ };
+ res.addClass = function(cName) {
+ if (!this.hasClass(cName)) {
+ if (this.className && this.className.substr(this.className.length - 1, 1) != ' ') {
+ this.className += ' ';
+ }
+ this.className += cName;
+ };
+ return this;
+ };
+ res.removeClass = function(cName) {
+ if (this.hasClass(cName)) {
+ this.className = this.className.replace(new RegExp('(\\s|^)' + cName + '(\\s|$)'), ' ');
+ if (this.className.substr(this.className.length - 1, 1) == ' ') {
+ this.className = this.className.substr(0, this.className.length - 1);
+ }
+ if (!this.className) {
+ this.removeAttribute('class');
+ }
+ };
+ return this;
+ };
+ res.searchClass = function(cName) {
+ var arr = this.className.split(' ');
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i].substr(0, cName.length) == cName) {
+ return arr[i];
+ }
+ }
+ return this;
+ };
+ res.removeCss=function(cName){
+ var cs=this.attr('style');
+ if(cs){
+ var arr=cs.split(';');
+ var obj={};
+ for(var i=0;i= m + 1) {
+ return this[m];
+ }
+ return null;
+ }
+ return null;
+ };
+ for (var i = 0; i < res.length; i++) {
+ if ($) {
+ try {
+ res[i] = $(res[i]);
+ } catch (event) {}
+ }
+ }
+ }
+
+ }
+ return res;
+ },
+ /*
+ * createlDiv
+ * 功能:新建一个DIV节点
+ */
+ createlDiv=function(className,html) {
+ var ele = document.createElement('div');
+ var eleObject = $(ele);
+ if (className) {
+ eleObject.addClass(className);
+ }
+ if(html){
+ eleObject.htm(html);
+ }
+ return eleObject;
+ },
+ /*
+ * createlVideo
+ * 功能:新建一个video节点
+ */
+ createlVideo=function() {
+ var ele = document.createElement('video');
+ var eleObject = $(ele);
+ return eleObject;
+ },
+ /*
+ * createlButton
+ * 功能新建一个button节点
+ */
+ createlButton=function(className,html) {
+ var ele = document.createElement('button');
+ var eleObject = $(ele);
+ eleObject.attr('type','button');
+ if (className) {
+ eleObject.addClass(className);
+ }
+ if(html){
+ eleObject.htm(html);
+ }
+ return eleObject;
+ },
+ /*
+ * createlA
+ * 功能新建一个a节点
+ */
+ createlA=function(html,href,className) {
+ var ele = document.createElement('a');
+ var eleObject = $(ele);
+ if(html){
+ eleObject.htm(html);
+ }
+ if(!isUndefined(href) && href){
+ eleObject.attr('href',href);
+ eleObject.attr('target','_blank');
+ }
+ if (className) {
+ eleObject.addClass(className);
+ }
+ return eleObject;
+ },
+ /*
+ * createlJsLink
+ * 功能新建一个a节点
+ */
+ createlJsLink=function(html,js) {
+ var ele = document.createElement('a');
+ var eleObject = $(ele);
+ if(html){
+ eleObject.htm(html);
+ }
+ if(!isUndefined(js) && js){
+ eleObject.attr('href','javascript:'+js+'()');
+ }
+ else {
+ eleObject.attr('href','javascript:;');
+ }
+ return eleObject;
+ },
+ /*
+ * createlImg
+ * 功能新建一个img节点
+ */
+ createlImg=function(file,className) {
+ var ele = document.createElement('img');
+ var eleObject = $(ele);
+ if (className) {
+ ele.className = className;
+ }
+ if(file){
+ ele.src=file;
+ }
+ return eleObject;
+ },
+ /*
+ * getClient
+ * 功能:获取clientX和clientY
+ */
+ getClient=function(event) {
+ var eve = event || window.event;
+ if (isUndefined(eve)) {
+ eve = {
+ clientX: 0,
+ clientY: 0
+ };
+ }
+ var x=eve.clientX + (document.documentElement.scrollLeft || $('body').scrollLeft),
+ y=eve.clientY + (document.documentElement.scrollTop || $('body').scrollTop);
+ if(isUndefined(x.toString()) || x.toString()=='NaN'){
+ x=eve.touches[0].clientX;
+ }
+ if(isUndefined(y.toString()) || y.toString()=='NaN'){
+ y=eve.touches[0].clientY;
+ }
+ if(x.toString()=='NaN'){
+ x=0;
+ }
+ if(y.toString()=='NaN'){
+ y=0;
+ }
+ return {
+ x: x,
+ y: y
+ }
+ },
+ /*
+ * getLiveTime
+ * 功能:获取直播回放时间
+ */
+ getLiveTime=function(){
+ var notTime=Date.now();
+ var varsTime=vars['live'];
+ if(varsTime.toString().length<13){
+ varsTime=varsTime*1000;
+ }
+ return notTime-varsTime;
+ },
+ /*
+ * formatLiveTime
+ * 功能:将直播的时间戳格式化成标准时间
+ */
+ formatLiveTime=function(time){
+ var varsTime=vars['live'];
+ if(varsTime.toString().length<13){
+ varsTime=varsTime*1000;
+ }
+ varsTime+=time;
+ return language['lookBack']+date('H:i:s',varsTime);
+ },
+ /*
+ * loadJs
+ * 功能:加载js文件并在加载完成后执行callback函数
+ * @file:js文件地址
+ * @callback:加载完成后执行的函数
+ */
+ loadJs=function(file, callback) {
+ var fn =function() {};
+ if(!isUndefined(callback)){
+ fn=callback;
+ }
+ if(checkJs(file)){
+ fn();
+ return;
+ }
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+ var isReady = false;
+ var timer = null;
+ var doReady = function() {
+ if(timer){
+ clearInterval(timer);
+ }
+ if(isReady) return;
+ isReady = true;
+ if(valType(fn) == 'function') {
+ fn();
+ }
+ };
+ var bodyLoad = function() {
+ timer = setInterval(function() {
+ try {
+ if(!isUndefined(script.readyState) && script.readyState == 'complete') {
+ doReady();
+ }
+ } catch(event) {};
+ }, 10);
+ };
+ var w3c = function() {
+ if(valType(fn) == 'function') {
+ fn();
+ }
+ removeListener(script, 'load', w3c);
+ removeListener(script, 'error', w3cError);
+ };
+ var w3cError = function() {
+ if(valType(fn) == 'function') {
+ fn();
+ }
+ removeListener(script, 'load', w3c);
+ removeListener(script, 'error', w3cError);
+ };
+ try {
+ addListener(script, 'load', w3c);
+ addListener(script, 'error', w3cError);
+ } catch(event) {
+ bodyLoad();
+ }
+ script.src = file;
+ $('head').eq(0).append(script);
+ },
+
+ /*
+ * doubleClickEvent
+ * 功能:注册对象双击功能
+ * @ele:注册对象,可以是页面中的任意节点,不支持数组形式
+ */
+ doubleClickEvent=function(ele){
+ var setTime=null;//注册延时函数
+ var clickTime=0;//记录点击时间
+ ele=$(ele);
+ ele.click(function(){
+ if(!setTime){
+ setTime=setTimeout(function(){
+ try{
+ ele.dispatchEvent(new Event('sigClick'));//注册单击,针对视频播放器使用
+ }
+ catch(event){
+ var e = document.createEvent('HTMLEvents');
+ e.initEvent('sigClick', false, true);
+ ele.dispatchEvent(e);
+ }
+ clickTime=0;
+ setTime=null;
+ },260);
+ }
+ if(!clickTime){
+ clickTime=new Date().getTime();
+ }
+ else {
+ if(new Date().getTime()-clickTime<230){//认为是双击
+ try{
+ ele.dispatchEvent(new Event('dobClick'));//注册双击
+ }
+ catch(event){
+ var e = document.createEvent('HTMLEvents');
+ e.initEvent('dobClick', false, true);
+ ele.dispatchEvent(e);
+ }
+ clearTimeout(setTime);
+ clickTime=0;
+ setTime=null;
+ }
+ }
+ });
+ },
+ /*
+ * noScrolling
+ * 功能,禁止页面滚动操作
+ */
+ noScrolling=function(b){
+ if(isUndefined(b)) b=false;
+ var bodyScroll=function (event){
+ event.preventDefault();
+ };
+ if(b){ //禁止滚动
+ $('body').addListener('touchmove', bodyScroll, {passive: false });
+ }
+ else { //开启滚动
+ $('body').removeListener('touchmove',bodyScroll, {passive: false});
+ }
+ };
+ return into(videoObj);
+ }
+
/*
- * stringToArray
- * 功能,字符串转化成二维数组
- */
- function stringToArray(str) {
- var newArr=[];
- if(!isUndefined(str)){
- var arr=str.split(',');
- for(var i=0;i0),isUndefined(CT)||null==CT)return null;"htmlarray"==valType(CT)&&(CT=CT.eq(0)),calculationFps(),existenceObj="string"==valType(vars.video)&&("."==vars.video.substr(0,1)&&-1==vars.video.indexOf("/")||"#"==vars.video.substr(0,1)),existenceObj&&(CK=CT.find(".moeplayer")?CT.find(".moeplayer").eq(0):null,CK&&(CM=CK.find(".ck-main")?CK.find(".ck-main").eq(0):null),CM&&(CV=CM.find(".ck-video")?CM.find(".ck-video").eq(0):null)),CK&&CM&&CV||(CT.htm(""),CK=createlDiv("moeplayer"),CT.append(CK),CM=createlDiv("ck-main"),CK.append(CM),CV=createlDiv("ck-video"),CM.append(CV)),video&&(video.remove(),video=null),existenceObj&&(video=$(vars.video)?$(vars.video).eq(0):null),video||(video=createlVideo(),video.attr("width","100%").attr("height","100%"),CV.append(video)),video.volume=vars.volume,vars.autoplay?(player.volume(0),player.muted(),recoveryVolume=!0,video.attr("autoplay","autoplay"),paused=!1):video.attr("preload","metadata"),CT.loop=vars.loop,CT.loop&&video.attr("loop","loop"),vars.controls?video.controls=!0:video.controls=!1;try{existenceObj||(video.attr("controlslist","nodownload"),video.attr("x-webkit-airplay","true"),video.attr("x5-video-orientation","portraint"),video.attr("playsinline","true"),video.attr("webkit-playsinline","true"),video.attr("x5-playsinline","true")),vars.crossOrigin&&(video.useCORS=!0,video.crossOrigin=vars.crossOrigin)}catch(e){}if(CT.smallWindows=!0,CT.webFull=!1,CT.theatre=!1,loadFace(),vars.rotate>0&&player.rotate(vars.rotate),vars.zoom>0&&player.zoom(vars.zoom),isUndefined(video.canPlayType))return CT.error={code:5,message:language.error.supportVideoError},eventTarget("error",CT.error),showError(),player;if(addAllListener(),!isUndefined(vars.loaded))if("function"==valType(vars.loaded))try{vars.loaded(player)}catch(e){}else if("string"==valType(vars.loaded))try{eval(vars.loaded+"(player)")}catch(e){}return changeVideo(existenceObj?video.attr("src"):vars.video),player},changeVideo=function(e){var t=0;if((video.attr("src")||video.htm())&&player.pause(),video.attr("src")&&!existenceObj&&(video.attr("src",""),video.removeAttr("src")),!isUndefined(video.textTracks)&&video.textTracks.length>0)for(t=video.find("track").length-1;t>-1;t--)video.find("track").eq(t).remove();existenceObj||video.htm(""),isUndefined(vars.ad)||(ad=vars.ad);var a="";if("string"==valType(e)){if("website:"==e.substr(0,8)||"url:"==e.substr(0,4)){var n="";return"website:"==e.substr(0,8)&&(n=e.substring(8)),"url:"==e.substr(0,4)&&(n=e.substring(4)),void ajax({url:n,success:function(e){null!=e?(vars=standardization(varsTemp,e),changeVideo(vars.video)):(CT.error={code:8,message:language.error.ajax},eventTarget("error",CT.error),showError())}})}vars.plug&&!canPlay(e)?plugPlayer(e):existenceObj||video.attr("src",e),loadTrack()}else if("array"==valType(e)){for(t=0;t1&&(a+='")}a&&video.htm(a),loadTrack()}else"object"==valType(e)&&(vars.plug?plugPlayer(e):(CT.error={code:10,message:language.error.emptied},eventTarget("error",CT.error),showError()),loadTrack());if(!isUndefined(video.find("source"))&&video.find("source").length>0&&video.find("source").eq(video.find("source").length-1).addListener("error",videoHandler.error),checkBar(),loadLogo(),isChangeDef&&checkDefinition(),vars.cookie&&("array"==valType(vars.cookie)&&vars.cookie.length>=2&&(vars.cookie[0]&&"string"==valType(vars.cookie[0])&&(cookieName=vars.cookie[0]),vars.cookie[1]&&"number"==valType(vars.cookie[1])&&(cookieTime=vars.cookie[1])),"object"!=valType(vars.cookie)||isUndefined(vars.cookie.name)||(cookieName=vars.cookie.name,isUndefined(vars.cookie.hour)||"number"!=valType(vars.cookie.hour)||(cookieTime=vars.cookie.hour)),"string"==valType(vars.cookie)&&(cookieName=vars.cookie),cookieName&&(cookieName=cookieName.replace(/[ ]*,[ ]*|[ ]+/g,"").replace(/[ ]*;[ ]*|[ ]+/g,""))),!isUndefined(vars.seek)&&!seekTime&&("number"==valType(vars.seek)&&vars.seek>0&&(seekTime=vars.seek),"string"==valType(vars.seek)&&"cookie"==vars.seek&&cookieName)){var i=player.cookie(cookieName);i&&(seekTime=i.time)}},plugPlayer=function(e){switch(vars.plug){case"hls.js":hlsPlayer(e);break;case"flv.js":flvPlayer(e);break;case"mpegts.js":mpegtsPlayer(e);break;case"dash.js":dashPlayer(e);break;default:"function"==valType(vars.plug)?vars.plug(video,e):(CT.error={code:10,message:language.error.emptied},eventTarget("error",CT.error),showError())}},hlsPlayer=function(e){var t=getPath("hls.js")+"hls.min.js";loadJs(t,function(){!isUndefined(Hls)&&Hls.isSupported()?((hls=new Hls).loadSource(e),hls.attachMedia(video),hls.on(Hls.Events.ERROR,function(e,t){var a=9,n=language.error.loadingFailed,r=t.fatal;isUndefined(t.response)||(isUndefined(t.response.code)||(a=t.response.code),!isUndefined(t.response.text)&&t.response.text?n=t.response.text:isUndefined(e)||(n=e)),CT.error={code:a,message:n},eventTarget("error",CT.error),r&&showError()})):canPlay(e)&&video.attr("src",e)})},flvPlayer=function(e){var t=getPath("flv.js")+"flv.min.js";loadJs(t,function(){if("undefined"!=typeof flvjs&&!isUndefined(flvjs)&&flvjs.isSupported()){var t={type:"flv",url:e};"object"==valType(e)&&(t=e),vars.live&&(t.isLive=!0),pugPlayer&&(pugPlayer.pause(),pugPlayer.unload(),pugPlayer.detachMediaElement(),pugPlayer.destroy(),pugPlayer=null),(pugPlayer=flvjs.createPlayer(t)).attachMediaElement(video),pugPlayer.load(),pugPlayer.on(flvjs.Events.METADATA_ARRIVED,function(e){videoHandler.loadedMetaData()}),pugPlayer.on(flvjs.Events.ERROR,function(e,t,a){CT.error={code:a.code,message:a.msg},eventTarget("error",CT.error),showError()})}})},mpegtsPlayer=function(e){var t=getPath("mpegts.js")+"mpegts.js";loadJs(t,function(){if("undefined"!=typeof mpegts&&!isUndefined(mpegts)&&mpegts.getFeatureList().mseLivePlayback){var t={type:"mse",url:e};"object"==valType(e)&&(t=e),vars.live&&(t.isLive=!0),pugPlayer&&(pugPlayer.pause(),pugPlayer.unload(),pugPlayer.detachMediaElement(),pugPlayer.destroy(),pugPlayer=null),(pugPlayer=mpegts.createPlayer(t)).attachMediaElement(video),pugPlayer.load(),pugPlayer.on(mpegts.Events.METADATA_ARRIVED,function(e){videoHandler.loadedMetaData()}),pugPlayer.on(mpegts.Events.ERROR,function(e,t,a){CT.error={code:a.code,message:a.msg},eventTarget("error",CT.error),showError()})}})},canPlay=function(e,t){var a=[{vidType:"video/ogg",codType:"theora, vorbis"},{vidType:"video/mp4",codType:"avc1.4D401E, mp4a.40.2"},{vidType:"video/mp4",codType:"avc1"},{vidType:"video/mp4",codType:"hevc"},{vidType:"video/webm",codType:"vp8.0, vorbis"},{vidType:"video/webm",codType:"vp9"},{vidType:"",codType:"application/x-mpegURL"},{vidType:"",codType:"application/vnd.apple.mpegurl"}],n={ogg:a[0],mp4:[a[1],a[2],a[3]],webm:[a[4],a[5]],m3u8:[a[6],a[7]]},r=[],i="",o=function(e){var t=e.vidType,a="";a=t?t+'; codecs="'+e.codType+'"':e.codType;var n=video.canPlayType(a);return""==n&&(n="no"),n},s=function(e){return e.replace(/.+\./,"")};if(isUndefined(t)){if("string"==valType(e))if(vars.type)for(i in a)a[i].vidType==vars.type&&r.push(a[i]);else if(s(e)&&s(e)in n){var l=n[s(e)];if("array"==valType(l))for(var d=0;d0)for(d=0;di&&t[n][0]!=cookieName&&r<19&&(o.push(t[n]),r++);t=o}else t.push([cookieName,e,i+3600*cookieTime]);t.length>0&&(cookie(moeplayerCookie,"delete",vars.domain,vars.cookiePath),cookie(moeplayerCookie,arrayToString(t),vars.domain,vars.cookiePath)),cookieArray=t},loadTrack=function(){if(!isUndefined(video.textTracks)){var e=0;if(!isUndefined(vars.track)&&"array"==valType(vars.track)&&!video.find("track")){var t="",a=vars.track;for(C.bar.track.show(),e=0;e"}if(video){var r=video.htm()+t;video.htm(r)}video.find("track")&&!loadedTrack&&(loadedTrack=!0,checkTrack())}}},loadedMetaData=function(){eventTarget("loadedMetaData",{width:CK.getWidth(),height:CK.getHeight(),videoWidth:CT.videoWidth,videoHeight:CT.videoHeight,duration:duration,volume:CT.volume}),eventTarget("duration",duration),"error"in C&&C.error.hide(),replaceInformation("videoWidth",CT.videoWidth),replaceInformation("videoHeight",CT.videoHeight),replaceInformation("volume",parseInt(100*CT.volume)),replaceInformation("duration",parseInt(duration)),documentHidden(function(e){vars.documentFocusPause&&("show"==e?!focusPause&&paused&&player.play():(focusPause=paused,player.pause()))})},videoHandler={loadStart:function(){vars.controls||"iphone"==app||C.loading.show(),C.centerPlay.hide(),eventTarget("loadstart")},canPlay:function(){C.loading.hide(),eventTarget("canplay")},loadedData:function(){eventTarget("loadeddata")},loadedMetaData:function(){duration=this.duration,!isUndefined(this.duration)&&vars.duration&&(duration=vars.duration),vars.live||(C.time.htm(formatSeconds(this.currentTime)+"/"+formatSeconds(duration)),C.tempTime.htm(formatSeconds(this.currentTime)+"/"+formatSeconds(duration))),C.loading.hide(),vars.poster&&video.attr("poster",vars.poster),vars.autoplay||vars.controls||(C.centerPlay.show(),C.buffer.hide()),CT.duration=duration,CT.videoWidth=this.videoWidth,CT.videoHeight=this.videoHeight,CT.volume=this.volume,(CT.videoWidth||CT.videoHeight||duration)&&loadedMetaData();var e=0;isUndefined(this.buffered)||(e=this.buffered.length),e>0&&changeLoad(),vars.live?changePreview():changePreview(vars.preview),isUndefined(vars.prompt)||"array"!=valType(vars.prompt)||vars.live?deletePrompt():changePrompt(),isChangeDef&&(checkDefinition(),isChangeDef=!1),pSliderMouseDown=!1,loadedmetadataNum++,!isUndefined(ad)&&!isUndefined(ad.frontPlay)&&ad.frontPlay&&loadedmetadataNum>1&&(player.play(),calculationAdFrontTime(duration)),isUndefined(ad)||isUndefined(ad.frontPlay)||ad.frontPlay||(player.volume(vars.volume),player.play()),!vars.autoplay&&loadMeta&&(loadMeta=!1,player.pause(),setTimeout(player.pause,300))},timeUpDate:function(){waited||(waited=!0,C.buffer.hide(),eventTarget("buffer","end")),this.buffered.length>0&&changeLoad(),!duration&&this.duration&&(duration=this.duration,CT.duration=duration,CT.videoWidth=this.videoWidth,CT.videoHeight=this.videoHeight,(CT.videoWidth||CT.videoHeight||duration)&&loadedMetaData()),oldTime=playTime,playTime=this.currentTime,maxSeeTime1&&calculationAdFrontTime(duration-playTime),isUndefined(C.error)||"block"!=C.error.css("display")||C.error.hide(),cookieName&&changeCookie(playTime),replaceInformation("audioDecodedByteCount",this.webkitAudioDecodedByteCount||this.audioDecodedByteCount||0),replaceInformation("videoDecodedByteCount",this.webkitVideoDecodedByteCount||this.videoDecodedByteCount||0)},ended:function(){isUndefined(ad)||isUndefined(ad.frontPlay)||!ad.frontPlay?(C.bar.playAndPause.pause.hide(),C.bar.playAndPause.play.hide(),C.bar.playAndPause.refresh.show(),eventTarget("ended"),showEnded(),message()):adFrontEnded()},error:function(e){if(!isUndefined(e.type)){var t=this.error,a=function(){var a=12,n=language.error.loadingFailed;isUndefined(t)?(CT.error={code:a,message:n},e.target.attr("src")&&showError()):(isUndefined(t.code)||(a=t.code),isUndefined(t.message)||(n=t.message),CT.error={code:a,message:n},showError()),eventTarget("error",CT.error)};if("error"==e.type)try{video.currentSrc?ajax({url:video.currentSrc,error:function(e){e&&"object"==valType(e)&&"code"in e&&e.code?(CT.error=e,eventTarget("error",CT.error),showError()):a()},success:function(e){e||a()}}):a()}catch(e){a()}}},stalled:function(){eventTarget("stalled"),CT.error={code:13,message:"load:stalled"},eventTarget("error",CT.error)},suspend:function(){eventTarget("suspend")},emptied:function(){eventTarget("emptied"),CT.error={code:7,message:language.error.emptied},eventTarget("error",CT.error)},seeked:function(){paused&&player.play(),pSliderMouseDown=!1,eventTarget("seek",{time:this.currentTime,state:"seeked"}),eventTarget("seeked")},seeking:function(){paused&&player.play();var e=this.currentTime;switch(-1==firstSeekTime&&(firstSeekTime=e),vars.timeScheduleAdjust){case 0:if(oldTime!=e)return waitingMessage=!1,player.seek(oldTime),void message(language.timeScheduleAdjust.prohibit);break;case 2:if(eoldTime)return waitingMessage=!1,player.seek(oldTime),void message(language.timeScheduleAdjust.prohibitForward);break;case 4:if(emaxSeeTime)return waitingMessage=!1,player.seek(maxSeeTime),void message(language.timeScheduleAdjust.prohibitForwardNotViewed)}eventTarget("seek",{time:e,state:"seeking"}),eventTarget("seeking"),vars.live||(C.time.htm(formatSeconds(e)+"/"+formatSeconds(duration)),C.tempTime.htm(formatSeconds(e)+"/"+formatSeconds(duration)))},waiting:function(){waited=!1,eventTarget("buffer","start"),C.centerPlay.hide(),vars.controls||C.buffer.show(),waitingMessage?message(language.waiting):waitingMessage=!0},play:function(){if(paused=!1,C.bar.playAndPause.play.hide(),C.bar.playAndPause.pause.show(),C.bar.playAndPause.refresh.hide(),C.centerPlay.hide(),"button"==playType?C.bar.pbox.removeClass("ck-bar-progress-out"):C.bar.pbox.addClass("ck-bar-progress-out"),recoveryVolume&&(recoveryVolume=!1,player.exitMuted()),hideBar(),closePauseAd(),playType="",isUndefined(C.ended)||player.closeLayer(C.ended),"error"in C&&C.error.hide(),eventTarget("play"),!isUndefined(ad)&&!isUndefined(ad.front)&&isUndefined(ad.frontPlay))return ad.frontPlayI=0,ad.frontPlay=!0,player.pause(),void adFrontPlay();seekTime&&(isUndefined(vars.live)||!isUndefined(vars.live)&&"boolean"==valType(vars.live)&&!vars.live)&&seekTime<.01*parseInt(100*duration)&&(player.seek(seekTime),seekTime=0)},pause:function(){paused=!0,isUndefined(ad)||isUndefined(ad.frontPlay)||!isUndefined(ad.frontPlay)&&!ad.frontPlay?isUndefined(ad)||isUndefined(ad.pause)?vars.controls||(C.centerPlay.show(),C.buffer.hide()):(isUndefined(ad.pausePlayI)&&(ad.pausePlayI=0),adPausePlay()):vars.controls||(C.centerPlay.show(),C.buffer.hide()),C.bar.playAndPause.pause.hide(),C.bar.playAndPause.play.show(),C.bar.playAndPause.refresh.hide(),C.bar.pbox.removeClass("ck-bar-progress-out"),checkProgressSlider(),eventTarget("pause"),C.bar.removeClass("ck-bar-out"),CM.removeClass("ck-nocursor")},volumeChange:function(){if(0!=this.volume||mutedState||(this.muted=!0),this.volume>0&&mutedState&&(this.muted=!1),mutedState!=this.muted&&(mutedState=this.muted,changeMuted(this.muted),CT.muted=this.muted,eventTarget("muted",CT.muted)),CT.volume=this.volume,eventTarget("volume",this.volume),!isUndefined(C.bar.vbox)){var e=parseInt(100*this.volume);C.bar.vbox.volume.txt.htm(e),C.bar.vbox.mouseDown||changeVolumeSlider(this.muted?0:this.volume),this.muted||message(language.volume+e+"%")}replaceInformation("volume",parseInt(100*this.volume))},resize:function(){var e=document.fullScreen||document.mozFullScreen||document.webkitIsFullScreen||document.msFullscreenElement;e?(C.bar.fullAndExit.exitFull.show(),C.bar.fullAndExit.full.hide(),C.ad.bottom.fullAndExit.exitFull.show(),C.ad.bottom.fullAndExit.full.hide(),CM.hasClass("ck-main-full")||CM.addClass("ck-main-full"),message(language.full),C.bar.webFullAndExit.hide(),C.bar.theatreAndExit.hide(),isUndefined(C.menu)||CM.append(C.menu)):(e=!1,C.bar.fullAndExit.full.show(),C.bar.fullAndExit.exitFull.hide(),C.ad.bottom.fullAndExit.full.show(),C.ad.bottom.fullAndExit.exitFull.hide(),CM.hasClass("ck-main-full")&&CM.removeClass("ck-main-full"),!isUndefined(vars.webFull)&&vars.webFull&&C.bar.webFullAndExit.show(),isUndefined(vars.theatre)||CT.webFull||C.bar.theatreAndExit.show(),isUndefined(C.menu)||$("body").append(C.menu),CV.css("width")!=CM.css("width")&&player.zoom(100)),CT.full!=e&&(CT.full=e,eventTarget("full",e)),checkVideoRotate(),changeProgress(player.time())},keydown:function(e){var t=(e=window.event||e).keyCode||e.which,a=player.volume(),n=function(){e.preventDefault?e.preventDefault():e.returnValue=!1};switch(t){case 32:n(),player.playOrPause();break;case 37:player.fastBack();break;case 39:player.fastNext();break;case 38:"number"==valType(vars.keyVolume)&&(1==vars.keyVolume||2==vars.keyVolume&&CT.full)&&(n(),player.volume(a+.1<1?a+=.1:1));break;case 40:"number"==valType(vars.keyVolume)&&(1==vars.keyVolume||2==vars.keyVolume&&CT.full)&&(n(),player.volume(a-.1>0?a-=.1:0))}},mouseWheel:function(e){if("number"==valType(vars.mouseWheelVolume)&&(1==vars.mouseWheelVolume||2==vars.mouseWheelVolume&&CT.full)){e=window.event||e;var t=player.volume();e.preventDefault?e.preventDefault():e.returnValue=!1,e.wheelDelta?(e.wheelDelta>0&&player.volume(t+.1<1?t+=.1:1),e.wheelDelta<0&&player.volume(t-.1>0?t-=.1:0)):e.detail&&(e.detail>0&&player.volume(t-.1>0?t-=.1:0),e.detail<0&&player.volume(t+.1<1?t+=.1:1))}}},adFrontPlay=function(){if(0==ad.frontPlayI&&(allBarHide(!1),C.ad.show(),ad.front.video=!1,isUndefined(ad.front.closeTime)||(ad.front.closeTime>0?(C.ad.top.closeTime.show(),adFrontCloseTime()):C.ad.top.closeAd.show())),isUndefined(ad.front.node)||null==ad.front.node||(CM.append(ad.front.node),player.closeLayer(ad.front.node),ad.front.node=null),C.ad.picture.htm(""),C.ad.picture.hide(),C.ad.link.hide(),!isUndefined(ad.front.list[ad.frontPlayI])){var e=ad.front.list[ad.frontPlayI];frontAdPlay=!0,eventTarget("frontAd",e),"picture"==e.type?adPicturePlay(e):"node"==e.type?adNode(e):(C.ad.link.attr("data-link",e.link),adVideoPlay(e.file)),isUndefined(e.link)?C.ad.bottom.details.hide():(C.ad.bottom.details.show(),C.ad.bottom.details.htm(''+language.details+""))}},adFrontCloseTime=function(){isUndefined(ad.front.closeSetTime)||(clearTimeout(ad.front.closeSetTime),ad.front.closeSetTime=null),C.ad.top.closeTime.htmReplace("{seconds}",ad.front.closeTime,language.closeTime),ad.front.closeTime--,ad.front.closeTime>0?ad.front.closeSetTime=setTimeout(adFrontCloseTime,1e3):(C.ad.top.closeAd.show(),C.ad.top.closeTime.hide())},calculationAdFrontTime=function(e){isUndefined(e)||(ad.front.list[ad.frontPlayI].time=e),ad.front.countDown=0;for(var t=ad.frontPlayI;t0?(e.time--,ad.front.countDown--,C.ad.top.countDown.htm(ad.front.countDown+language.second),adFrontSetTime=setTimeout(adFrontCountDown,1e3)):adFrontEnded()},adFrontEnded=function(){ad.frontPlayI0||i>0){if(e.link){var o=createlA("",e.link);o.append(this),C.ad.picture.append(o)}else C.ad.picture.append(this);t.unbind(),t.click(function(){eventTarget("frontAdClick",e)})}else a<10&&(a++,n())})};n(),calculationAdFrontTime(),adFrontCountDown(),C.ad.bottom.mutedAndExit.hide()}},adNode=function(e){isUndefined(e.content)||(ad.front.node=player.layer(e),ad.front.node.css({"z-index":1}),C.ad.append(ad.front.node),ad.front.node.unbind(),ad.front.node.click(function(){eventTarget("frontAdClick",e)}),calculationAdFrontTime(),adFrontCountDown(),C.ad.bottom.mutedAndExit.hide())},frontVideoClickHandler=function(){var e=C.ad.link.attr("data-link");window.open(e,"_blank")},closeFrontAd=function(){if(isUndefined(ad)||isUndefined(ad.front)||isUndefined(ad.front.closeButtonClick))player.closeFrontAd();else if("function"==valType(ad.front.closeButtonClick))try{ad.front.closeButtonClick()}catch(e){console.error(e)}else if("string"==valType(ad.front.closeButtonClick))try{eval(ad.front.closeButtonClick+"()")}catch(e){console.error(e)}},adPausePlay=function(){if(closePauseAd(),!isUndefined(ad)&&!isUndefined(ad.pause)&&!isUndefined(ad.pause.list)&&ad.pause.list.length-1>=ad.pausePlayI){var e=ad.pause.list[ad.pausePlayI];if(!isUndefined(ad.pause.close)&&ad.pause.close&&(ad.pauseClose=createlButton("ck-pause-close"),ad.pauseClose.click(function(){C.centerPlay.show(),C.buffer.hide(),closePauseAd()})),isUndefined(e.file))isUndefined(e.content)||(ad.pause.node=player.layer(e),ad.pauseClose&&ad.pause.node.append(ad.pauseClose),ad.pause.node.click(function(){eventTarget("pauseAdClick",e)}));else{var t=null,a=0,n=function(){t=createlImg(e.file),C.adPause.show(),C.adPause.htm(""),C.adPause.append(t),t.addListener("load",function(){var r=this.getWidth(),i=this.getHeight();if(r>0||i>0){if(C.adPause.htm(""),e.link){var o=createlA("",e.link);o.append(this),C.adPause.append(o)}else C.adPause.append(this);C.adPause.css({width:r+"px",height:i+"px"}),ad.pauseClose&&C.adPause.append(ad.pauseClose),t.click(function(){eventTarget("pauseAdClick",e)})}else a<10&&(a++,n())})};n()}eventTarget("pauseAd",e),!isUndefined(e.time)&&e.time>0&&(adPauseSetTime=setTimeout(function(){ad.pausePlayI++,ad.pausePlayI>ad.pause.list.length-1&&(ad.pausePlayI=0),adPausePlay()},1e3*e.time))}},closePauseAd=function(){adPauseSetTime&&(clearTimeout(adPauseSetTime),adPauseSetTime=null),C.adPause.hide(),isUndefined(ad)||isUndefined(ad.pauseClose)||null==ad.pauseClose||(ad.pauseClose.remove(),ad.pauseClose=null),isUndefined(ad)||isUndefined(ad.pause)||isUndefined(ad.pause.node)||!ad.pause.node||(ad.pause.node.unbind(),player.closeLayer(ad.pause.node),eventTarget("pauseAdClose"))},player={width:function(e){return isUndefined(e)||("number"==valType(e)&&(e+="px"),CT.css({width:e}),checkVideoRotate()),CK.getWidth()},height:function(e){return isUndefined(e)||("number"==valType(e)&&(e+="px"),CT.css({height:e}),checkVideoRotate()),CK.getHeight()},videoWidth:function(){return video?video.videoWidth:null},videoHeight:function(){return video?video.videoHeight:null},zoom:function(e){if(!isUndefined(e)&&("function"==valType(e)&&newEvent.addEventListener("zoom",e),"number"==valType(e))){for(var t=[C.topBar.zoomEle.zoom50,C.topBar.zoomEle.zoom75,C.topBar.zoomEle.zoom100],a=0;ae&&e>0?a=t[e]:t.indexOf(e)>-1&&(a=e),a!=nowRotate&&(eventTarget("rotate",a),nowRotate=a,checkVideoRotate())}},vars:function(e,t){if(!isUndefined(e)){if("string"==valType(e)&&!isUndefined(t)){var a={};a[e]=t,e=a}var n=!1;for(var r in e)if(r in vars&&e[r]!=vars[r]){n=!0;break}n&&(vars=standardization(vars,e)),isUndefined(e.video)||(isChangeDef=!0,changeVideo(vars.video)),isUndefined(e.title)||C.topBar.titleEle.htm(e.title)}},loadstart:function(e){isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("loadstart",e)},loadeddata:function(e){isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("loadeddata",e)},loadedMetaData:function(e){isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("loadedMetaData",e)},canplay:function(e){isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("canplay",e)},play:function(e){if("object"==valType(e)&&(e.target!=C.bar.playAndPause.play&&e.target!=C.bar.playAndPause.refresh||(playType="button")),isUndefined(e)||"function"!=valType(e)){if(loadedmetadataNum>0&&video)try{video.play()}catch(e){console.error(e)}}else newEvent.addEventListener("play",e);return player},pause:function(e){if(isUndefined(e)||"function"!=valType(e)){if(loadedmetadataNum>0&&video)try{video.pause()}catch(e){console.error(e)}}else newEvent.addEventListener("pause",e);return player},playOrPause:function(){return paused?player.play():player.pause(),player},volume:function(e){if(isUndefined(e)){if(video)return video.volume}else"function"==valType(e)?newEvent.addEventListener("volume",e):"number"==valType(e)&&video&&(e<0&&(e=0),e>1&&(e=1),video.muted&&(video.volume=.5*e),video.volume=e);return player},muted:function(e){return isUndefined(e)||"function"!=valType(e)?video&&(video.muted=!0):newEvent.addEventListener("muted",e),player},exitMuted:function(){return video&&(video.muted=!1,0==video.volume&&player.volume(vars.volume>0?vars.volume:.8)),player},time:function(e){if(isUndefined(e)||"function"!=valType(e)){if(video)return video.currentTime||0}else newEvent.addEventListener("time",e)},seek:function(e){if(!isUndefined(e)&&("function"==valType(e)&&newEvent.addEventListener("seek",e),"number"==valType(e)&&video)){switch(vars.timeScheduleAdjust){case 0:return void message(language.timeScheduleAdjust.prohibit);case 1:break;case 2:if(eoldTime)return void message(language.timeScheduleAdjust.prohibitForward);break;case 4:if(emaxSeeTime)return waitingMessage=!1,video.currentTime=maxSeeTime,void message(language.timeScheduleAdjust.prohibitForwardNotViewed)}pSliderMouseDown=!1,video.currentTime=e}return player},buffer:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("buffer",e),player},ended:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("ended",e),player},next:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("next",e),player},error:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("error",e),player},emptied:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("emptied",e),player},duration:function(e){if(isUndefined(e)||"function"!=valType(e))return duration||0;newEvent.addEventListener("duration",e)},playbackRate:function(e){if(isUndefined(e))return video.playbackRate;"function"==valType(e)?newEvent.addEventListener("playbackRate",e):"number"==valType(e)&&video&&(video.playbackRate=e,CT.playbackRate=e,eventTarget("playbackRate",e),changePlaybackrateVal(e))},track:function(e){if(isUndefined(e))return CT.track;if("function"==valType(e))newEvent.addEventListener("track",e);else if("number"==valType(e)&&video){var t=null;if(isUndefined(video.textTracks)||(t=video.textTracks),t&&"texttracklist"==valType(t)){for(var a=vars.track,n=t.length-1;n>-1;n--)video.find("track").eq(n).remove();for(n=0;n"}if(video){var i=video.htm()+t;video.htm(i)}changeTrackVal(e)}}},fastBack:function(e){if(0!=duration){(isUndefined(e)||"number"!=valType(e))&&(e=20);var t=player.time();return t-e>0?t-=e:t=0,player.seek(t),player}},fastNext:function(e){if(0!=duration){(isUndefined(e)||"number"!=valType(e))&&(e=20);var t=player.time();return t+e200&&(r=200),isUndefined(n.cssDisplay)&&(n.cssPosition=n.css("position"),n.cssDisplay=n.css("display")),n.css({position:"absolute","z-index":r}),a?C.bar.append(n):CM.append(n),n.CK=CK,n.show()}return n},closeLayer:function(e){if("string"==valType(e)){var t=$(e);isUndefined(t)||t.length>0&&(e=t.eq(0))}if(!isUndefined(e)&&"htmlobject"==valType(e)){if(isUndefined(e.captureParentNode))e.remove();else{var a=e.captureParentNode;if(e.nextElement)try{a.insertBefore(e,e.nextElement)}catch(t){a.append(e)}else if(e.prevElement)try{a.insertAfter(e,e.prevElement)}catch(t){a.append(e)}else a.append(e);e.css({display:e.cssDisplay})}isUndefined(e.cssDisplay)||e.css({display:e.cssDisplay,position:e.cssPosition})}return player},message:function(e){return message(e),player},closeFrontAd:function(){return!frontAdPlay||isUndefined(ad)||isUndefined(ad.front)||isUndefined(ad.front.list)||(ad.frontPlayI=ad.front.list.length-1,adFrontEnded(),clearAdFrontSetTime()),player},addListener:function(e,t){newEvent.addEventListener(e,t)},removeListener:function(e,t){newEvent.removeEventListener(e,t)},bar:function(e){barShow=e,e?C.bar.show():C.bar.hide()},rightBar:function(e){rightBarShow=e,e?C.rightBar.show():C.rightBar.hide()},mouseActive:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("mouseActive",e),this},cookie:function(e){if("delete"==e)return cookie(moeplayerCookie,"delete",vars.domain),null;!isUndefined(e)&&e&&(e=e.replace(/[ ]*,[ ]*|[ ]+/g,"").replace(/[ ]*;[ ]*|[ ]+/g,""));var t=cookie(moeplayerCookie);if(t){var a=stringToArray(t),n=[],r=parseInt(.001*Date.now());for(i=0;ir&&n.push(a[i]);if((a=n).length>0){cookie(moeplayerCookie,"delete",vars.domain,vars.cookiePath),cookie(moeplayerCookie,arrayToString(a),vars.domain,vars.cookiePath);for(var i=0;i-1;a--){var n=createlButton("ck-list-p",e[a]+language.playbackrateSuffix);n.attr("data-i",a).attr("data-val",e[a]),C.bar.playbackrate.bg.p.push(n),C.bar.playbackrate.bg.append(n),n.click(playbackrateClick)}if(C.bar.playbackrate.hide(),!isUndefined(vars.playbackrateOpen)&&vars.playbackrateOpen){C.bar.playbackrate.show(),C.bar.playbackrate.bgbox.show();var r=C.bar.playbackrate.bg.getWidth(),i=C.bar.playbackrate.bg.getHeight(),o=C.bar.playbackrate.button.getWidth();C.bar.playbackrate.bg.css({width:r+10+"px"}),r=C.bar.playbackrate.bg.getWidth(),getBarHeight()>C.bar.getHeight()&&(i+=getBarHeight()-C.bar.getHeight()),C.bar.playbackrate.bgbox.attr("style",""),C.bar.playbackrate.bgbox.css({width:r+"px",height:i+2+"px",left:.5*-(r-o)+"px"}),C.bar.playbackrate.button.mouseover(function(){r=C.bar.playbackrate.bg.getWidth(),o=C.bar.playbackrate.button.getWidth(),C.bar.playbackrate.bgbox.css({left:.5*-(r-o)+"px"})}),changePlaybackrateVal(t)}},playbackrateClick=function(e){C.bar.playbackrate.bgbox.hide(),setTimeout(function(){C.bar.playbackrate.bgbox.removeCss("display")},300),message(language.switchTo+$(this).htm()),player.playbackRate(parseFloat($(this).attr("data-val")))},changePlaybackrateVal=function(e){C.bar.playbackrate.bg.find("button").each(function(t,a){var n=parseFloat(a.attr("data-val"));a.removeClass("ck-list-p-focus"),e==n?(a.addClass("ck-list-p-focus"),1!=e?C.bar.playbackrate.button.htm(a.htm()):C.bar.playbackrate.button.htm(language.playbackrate)):a.removeClass("ck-list-p-focus")})},checkTrack=function(){var e=vars.track,t=-1;C.bar.track.bgbox.htm(""),C.bar.track.bg=createlDiv("ck-list-bg"),C.bar.track.bgbox.append(C.bar.track.bg),C.bar.track.bg.p=[];for(var a=null,n=e.length-1;n>-1;n--)(a=createlButton("ck-list-p",e[n].label)).attr("data-i",n).attr("data-title",e[n].label),C.bar.track.bg.p.push(a),C.bar.track.bg.append(a),!isUndefined(e[n].default)&&e[n].default&&(t=n),a.click(trackClick);(a=createlButton("ck-list-p",language.noTrack)).attr("data-i",-1).attr("data-title",language.noTrack),C.bar.track.bg.p.push(a),C.bar.track.bg.append(a),a.click(trackClick),C.bar.track.hide(),C.bar.track.show(),C.bar.track.bgbox.show();var r=C.bar.track.bg.getWidth(),i=C.bar.track.bg.getHeight(),o=C.bar.track.button.getWidth();C.bar.track.bg.css({width:r+10+"px"}),r=C.bar.track.bg.getWidth(),getBarHeight()>C.bar.getHeight()&&(i+=getBarHeight()-C.bar.getHeight()),C.bar.track.bgbox.attr("style",""),C.bar.track.bgbox.css({width:r+"px",height:i+2+"px",left:.5*-(r-o)+"px"}),C.bar.track.button.mouseover(function(){r=C.bar.track.bg.getWidth(),o=C.bar.track.button.getWidth(),C.bar.track.bgbox.css({left:.5*-(r-o)+"px"})}),changeTrackVal(t)},trackClick=function(e){C.bar.track.bgbox.hide(),setTimeout(function(){C.bar.track.bgbox.removeCss("display")},300),message(language.switchTo+$(this).attr("data-title")),player.track(parseFloat($(this).attr("data-i")))},changeTrackVal=function(e){C.bar.track.bg.find("button").each(function(t,a){var n=parseInt(a.attr("data-i"));e==n?(C.bar.track.button.htm(a.attr("data-title")),n>-1?(CT.track=vars.track[n],eventTarget("track",vars.track[n])):(CT.track=null,eventTarget("track",null)),a.addClass("ck-list-p-focus")):a.removeClass("ck-list-p-focus")})},checkDefinition=function(){var e=-1,t=video.currentSrc;if(isUndefined(C.bar.definition.bg)||(C.bar.definition.bgbox.htm(""),C.bar.definition.bgbox.attr("style",""),C.bar.definition.button.htm(language.definition)),"array"==valType(vars.video)){var a=vars.video;C.bar.definition.bg=createlDiv("ck-list-bg"),C.bar.definition.bgbox.append(C.bar.definition.bg),C.bar.definition.bg.p=[];for(var n=a.length-1;n>-1;n--){var r=createlButton("ck-list-p",a[n][2]);r.attr("data-i",n).attr("data-video",a[n][0]).attr("data-type",a[n][1]).attr("data-title",a[n][2]),C.bar.definition.bg.p.push(r),C.bar.definition.bg.append(r),t&&t.indexOf(a[n][0])>-1&&(e=n),r.click(definitionClick)}C.bar.definition.show(),C.bar.definition.bgbox.show();var i=C.bar.definition.bg.getWidth(),o=C.bar.definition.bg.getHeight(),s=C.bar.definition.button.getWidth();C.bar.definition.bg.css({width:i+10+"px"}),i=C.bar.definition.bg.getWidth(),getBarHeight()>C.bar.getHeight()&&(o+=getBarHeight()-C.bar.getHeight()),C.bar.definition.bgbox.attr("style",""),C.bar.definition.bgbox.css({width:i+"px",height:o+2+"px",left:.5*-(i-s)+"px"}),C.bar.definition.button.mouseover(function(){i=C.bar.definition.bg.getWidth(),s=C.bar.definition.button.getWidth(),C.bar.definition.bgbox.css({left:.5*-(i-s)+"px"})})}e>-1&&C.bar.definition.bg.find("button").each(function(t,a){var n=parseInt(a.attr("data-i"));e==n?a.addClass("ck-list-p-focus"):a.removeClass("ck-list-p-focus")})},definitionClick=function(e){C.bar.definition.bgbox.hide(),setTimeout(function(){C.bar.definition.bgbox.removeCss("display")},300),changeDefinition(parseInt($(this).attr("data-i")))},changeDefinition=function(e){C.bar.definition.bg.find("button").each(function(t,a){var n=parseInt(a.attr("data-i"));if(e==n){if(!isUndefined(video.textTracks)&&video.textTracks.length>0)for(var r=video.find("track").length-1;r>-1;r--)video.find("track").eq(r).remove();seekTime=player.time(),video.attr("autoplay","autoplay"),changeVideo(a.attr("data-video")),message(language.switchTo+a.htm()),C.bar.definition.button.htm(a.htm()),a.addClass("ck-list-p-focus"),eventTarget("definition",{id:n,video:a.attr("data-video"),title:a.attr("data-title")})}else a.removeClass("ck-list-p-focus")})},deletePrompt=function(){var e=0;if(!isUndefined(C.prompt)&&"array"==valType(C.prompt)){for(e=C.prompt.length;e>-1;e--)isUndefined(C.prompt[e])||C.prompt[e].remove();C.prompt=null}C.prompt=[]},changePrompt=function(){deletePrompt();for(var e=0;e100&&(r=100),a.css({left:r+"%"}),a.mouseover(function(){this.attr("data-words")&&showPromptWords(this)}),a.mouseout(function(){this.attr("data-words")&&showPromptWords()}),C.prompt.push(a)}}},showPromptWords=function(e){if(isUndefined(C.promptWords)&&(C.promptWords=createlDiv("ck-prompt-words"),CM.append(C.promptWords),C.promptWords.content=createlDiv("ck-prompt-content"),C.promptWords.append(C.promptWords.content)),isUndefined(e))return C.promptWords.content.htm(""),void C.promptWords.hide();C.promptWords.content.htm(e.attr("data-words")),C.promptWords.show();var t=C.promptWords.getWidth(),a=C.promptWords.getHeight(),n=(C.bar.pbox.bg,parseFloat(e.attr("data-time")),CK.getHeight()-getBarHeight()),r=e.offset().left-CK.offset().left+.5*e.getWidth()-.5*t;isUndefined(C.preview)?(n=CK.getHeight()-parseFloat(getBarHeight()+C.tip.minHeight+parseInt(C.tip.css("margin-bottom"))),n-=getBarHeight()-C.bar.getHeight()):n=CK.getHeight()-parseFloat(getBarHeight()+C.preview.smallHight+parseInt(C.preview.css("margin-bottom"))),n-=parseFloat(C.promptWords.css("margin-bottom")),n-=a,(r-=parseFloat(C.promptWords.css("margin-right")))<0&&(r=0),r>CK.getWidth()-t&&(r=CK.getWidth()-t),C.promptWords.css({top:n+"px",left:r+"px"})},changePreview=function(e){if(isUndefined(C.preview)||(C.preview.remove(),C.preview=null),!isUndefined(e)){C.preview=createlDiv("ck-preview"),CM.append(C.preview),isUndefined(vars.preview.type)&&(vars.preview.type=0),1==vars.preview.type&&(C.preview.bg=createlDiv("ck-preview-bg"),C.preview.append(C.preview.bg));var t=[];if("object"==valType(vars.preview))if("array"==valType(vars.preview.file)){t=vars.preview.file;var a=[10,10];if("array"==valType(vars.preview.thumbnail)&&vars.preview.thumbnail.length>1&&("number"==valType(vars.preview.thumbnail[0])&&(a[0]=vars.preview.thumbnail[0]),"number"==valType(vars.preview.thumbnail[1])&&(a[1]=vars.preview.thumbnail[1]),vars.preview.thumbnail=a),t[0]){var n=createlImg(t[0],"ck-preview-load-img").addListener("load",function(){!function(e,a,n,r){if(1==vars.preview.type){C.preview.bg.img=[];for(var i=0;i0){isUndefined(vars.preview.type)&&(vars.preview.type=0);var t=2,a=vars.preview.thumbnail;isUndefined(vars.preview.scale)||(t=vars.preview.scale);var n=0,r=0,i=0,o=0,s=0,l=C.preview.smallWidth,d=C.preview.smallHight,u=e*C.bar.pbox.bg.getWidth()/duration+(C.bar.pbox.bg.offset().left-CK.offset().left);if("none"==C.preview.css("display")&&C.preview.show(),C.preview.css({height:d+"px"}),1==vars.preview.type){n=parseInt(e/(t*a[0])),r=parseInt(e/t);var c=n-5,p=n+5;c<0&&(c=0),p>C.preview.bg.img.length-1&&(p=C.preview.bg.img.length-1);for(var v=c;vC.preview.getWidth()-C.preview.frame.getWidth()){var m=o-(C.preview.getWidth()-C.preview.frame.getWidth());o=C.preview.getWidth()-C.preview.frame.getWidth(),i-=m}C.preview.bg.css({left:i+"px"}),C.preview.frame.css({left:o+"px"})}else{var h=e/t/(a[0]*a[1]);r=parseInt(h);var b=parseInt(100*(h-r)),g=parseInt(b/a[0]),y=b%a[0],k=vars.preview.file;(i=u-.5*l)<0&&(i=0),i>CK.getWidth()-l&&(i=CK.getWidth()-l),C.preview.css({width:C.preview.smallWidth+"px",background:"url("+k[r]+") no-repeat","background-position":"-"+y*l+"px -"+g*d+"px",left:i+"px"})}}},showError=function(){if(C.loading.hide(),!vars.controls&&vars.errorShow){isUndefined(C.error)&&(C.error=createlDiv("ck-error"),CM.append(C.error));var e=CT.error.message;e||(e=language.error.noMessage);var t=e+"(code:"+CT.error.code+")";C.error.htm(t),C.error.show()}},showWindowsError=function(e){var t=createlDiv("moeplayer-error",e);$("body").append(t)},showNextEpisode=function(){if(!isUndefined(vars.next)){if("object"==valType(vars.next)){if("content"in vars.next)return void(C.next=player.layer(vars.next));if("title"in vars.next)return void tip(C.bar.nextEpisode,vars.next.title)}tip(C.bar.nextEpisode,language.next)}},nextClick=function(){"object"==valType(vars.next)&&("click"in vars.next&&("function"==valType(vars.next.click)?vars.next.click():"string"==valType(vars.next.click)&&eval(vars.next.click+"()")),"link"in vars.next&&(window.location.href=vars.next.link),eventTarget("next"))},showEnded=function(){if(!CT.loop&&!isUndefined(vars.ended))return closePauseAd(),C.ended=player.layer(vars.ended),void(C.ended&&C.centerPlay.hide())},windowScroll=function(){CT.smallWindows&&(CT.webFull||CT.theatre||CT.full?exitSmallWindows():(document.documentElement.scrollTop||document.body.scrollTop)>CT.offset().top+CT.getHeight()?CK.hasClass("moeplayer-smallwindow")||(CK.addClass("moeplayer-smallwindow"),eventTarget("smallWindows",!0),smallWindowsState=!0,vars.smallWindowsDrag&&drag(!0),allBarHide(),checkVideoRotate()):exitSmallWindows())},exitSmallWindows=function(){CK.hasClass("moeplayer-smallwindow")&&(CK.removeClass("moeplayer-smallwindow"),vars.smallWindowsDrag&&drag(),eventTarget("smallWindows",!1),smallWindowsState=!1,allBarShow(),checkVideoRotate())},drag=function(e){var t=$(document),a=0,n=0,r=0,i=0,o=!1;isUndefined(e)||(o=e);var s=function(e){e=e||window.event;var t=getClient(e),o=CK.offset();n=t.y-i,a=t.x-r,r=t.x,i=t.y;var s=o.left+a,l=o.top+n;CK.css({left:s+"px",top:l+"px"}),"fixed"!=CK.css("position")&&CK.css({position:"fixed"}),isDrag=!0},l=function(){t.removeListener("mousemove",s),t.removeListener("mouseup",l),CK.css({cursor:"default"})};o?CK.mousedown(function(e){e.preventDefault&&e.preventDefault(),e=e||window.event;var a=getClient(e);r=a.x,i=a.y,t.mousemove(s),t.mouseup(l),CK.css({cursor:"move"})}):CK.unbind("mousedown")},checkVideoRotate=function(){var e=CK.getWidth()*nowZoom*.01,t=CK.getHeight()*nowZoom*.01,a=CV.getWidth(),n=CV.getHeight();if(CV.css({transform:"rotate("+nowRotate+"deg)","-ms-transform":"rotate("+nowRotate+"deg)","-moz-transform":"rotate("+nowRotate+"deg)","-webkit-transform":"rotate("+nowRotate+"deg)","-o-transform":"rotate("+nowRotate+"deg)",width:nowZoom+"%",height:nowZoom+"%"}),0!=nowRotate&&180!=nowRotate){if(n>e&&a>t)return void(n/e>a/t?CV.css({height:nowZoom+"%",width:t+"px"}):CV.css({width:nowZoom+"%",height:e+"px"}));if(nt?CV.css({height:nowZoom+"%",width:t+"px"}):n/a>=e/t?CV.css({width:nowZoom+"%",height:e+"px"}):CV.css({height:nowZoom+"%",width:t+"px"}));if(n>=e&&a<=t)return void CV.css({width:nowZoom+"%",height:e+"px"});a>=t&&nC.bar.getHeight()&&(d-=getBarHeight()-C.bar.getHeight()),l=i>s?n.left-r.left-.5*(i-s):n.left-r.left+.5*(s-i),"left"==a&&(l=n.left-r.left-i,d=n.top-r.top),isUndefined(t)||(l=t.x-r.left-.5*i),l<0&&(l=0),d<0&&(d=0),l>CM.getWidth()-i&&(l=CM.getWidth()-i),d>CM.getHeight()-o&&(d=CM.getHeight()-o),C.tip.css({left:l+"px",top:d-parseInt(C.tip.css("margin-bottom"))+"px"})},progressDragX=function(){var e=C.bar.pbox.bg,t=C.bar.pbox.play,a=C.bar.pbox.slider,n=C.bar.pbox.mouseLine;a.unbind(),e.unbind();var r=0,i=0,o=$(document),s=0,l=function(t){if(t.preventDefault&&t.preventDefault(),vars.timeScheduleAdjust){t=t||window.event;var n=a.offset(),r=e.offset(),c=getClient(t);pSliderMouseDown=!0,i=c.x;var p=n.left-r.left;s=p*duration/(e.getWidth()-a.getWidth()),a.removeListener("mousedown",l),a.removeListener("touchstart",l),o.mousemove(d),o.mouseup(u),a.touchmove(d),a.touchend(u),noScrolling(!0)}},d=function(n){n=n||window.event;var o=a.offset(),l=e.offset(),d=getClient(n);pSliderMouseDown=!0,r=i-d.x,i=d.x;var u=o.left-r-l.left;u<0&&(u=0),u>e.getWidth()-a.getWidth()&&(u=e.getWidth()-a.getWidth()),C.bar.pbox.addClass("ck-bar-progress-slider-move");var c="";if(vars.live)c=formatLiveTime(u*getLiveTime()/(e.getWidth()-a.getWidth()));else{switch(c=u*duration/(e.getWidth()-a.getWidth()),vars.timeScheduleAdjust){case 2:cs)return u=-1e3,void message(language.timeScheduleAdjust.prohibitForward);break;case 4:if(cmaxSeeTime)return u=-1e3,player.seek(maxSeeTime),void message(language.timeScheduleAdjust.prohibitForwardNotViewed)}c=formatSeconds(c)}tip(a,c),u>=0?(a.css({left:u+"px"}),t.css({width:u+.5*a.getWidth()+"px"})):pSliderMouseDown=!1},u=function(){if(noScrolling(),o.removeListener("mousemove",d),o.removeListener("mouseup",u),a.removeListener("touchmove",d),a.removeListener("touchend",u),a.mousedown(l),a.touchstart(l),vars.live){var n=parseInt(vars.live+t.getWidth()*getLiveTime()/(e.getWidth()-.5*a.getWidth()));eventTarget("playback",{time:n,date:date("Y-m-d H:i:s",n)}),eventTarget("seek",{time:n,state:"seeking",date:date("Y-m-d H:i:s",n)})}else{var r=t.getWidth()*duration/(e.getWidth()-.5*a.getWidth());r>duration&&(r=duration),seekTime=0,player.seek(r)}C.bar.pbox.removeClass("ck-bar-progress-slider-move"),c&&tip()},c=!0;a.mousedown(l),a.mouseover(function(){var t="";t=vars.live?language.live:formatSeconds(parseInt(a.css("left"))*duration/(e.getWidth()-a.getWidth())),c=!1,tip(a,t)}),a.mouseleave(function(){c=!0}),a.touchstart(l);var p=null,v=(p=null,function(){p&&(clearTimeout(p),p=null),closeTipFun()});e.mousedown(function(n){n=n||window.event;var r=getClient(n),i=e.offset(),o=r.x-i.left;if(CT.full&&(o+=CK.offset().left),vars.live){var s=parseInt(vars.live+getLiveTime()*o/e.getWidth());eventTarget("playback",{time:s,date:date("Y-m-d H:i:s",s)}),eventTarget("seek",{time:s,state:"seeking",date:date("Y-m-d H:i:s",s)})}else{var l=duration*o/e.getWidth();switch(vars.timeScheduleAdjust){case 0:return void message(language.timeScheduleAdjust.prohibit);case 2:if(loldTime)return void message(language.timeScheduleAdjust.prohibitForward);break;case 4:if(lmaxSeeTime)return void message(language.timeScheduleAdjust.prohibitForwardNotViewed)}seekTime=0,player.seek(l)}o>e.getWidth()-.5*a.getWidth()&&(o=e.getWidth()-.5*a.getWidth()),o<.5*a.getWidth()&&(o=.5*a.getWidth()),pSliderMouseDown=!0,t.css({width:o+"px"}),a.css({left:o-.5*a.getWidth()+"px"})}),e.mousemove(function(t){t=t||window.event;var a=getClient(t),r=e.offset(),i=a.x-r.left;v(),CT.full&&(i+=CK.offset().left);var o=0;vars.live?o=formatLiveTime(getLiveTime()*i/e.getWidth()):(o=duration*i/e.getWidth(),showPreview(o),o=formatSeconds(o)),tip(e,o,a),n.css({left:i-.5*C.bar.pbox.mouseLine.getWidth()+"px"})}),e.mouseout(function(e){v(),p=setTimeout(function(){showPreview(-1)},30)}),n.mouseover(v)},volumeDragY=function(){var e=C.bar.vbox.volume.box,t=C.bar.vbox.volume.bg,a=C.bar.vbox.volume.pp,n=C.bar.vbox.volume.slider,r=$(document),i=0,o=0,s=function(e){e.preventDefault&&e.preventDefault(),noScrolling(!0),e=e||window.event;var t=getClient(e);o=t.y,n.removeListener("mousedown",s),n.removeListener("touchstart",s),C.bar.vbox.mouseDown=!0,r.mousemove(l),r.mouseup(d),n.touchmove(l),n.touchend(d)},l=function(r){r=r||window.event;var s=getClient(r),l=n.offset(),d=e.offset(),u=t.offset();i=s.y-o,o=s.y;var c=l.top-d.top+i,p=u.top-d.top,v=u.top+t.getHeight()-d.top-n.getHeight();cv&&(c=v),n.css({top:c+"px"});var f=c-p+.5*n.getHeight();a.css({"margin-top":f+"px"});var m=(t.getHeight()-f-.5*n.getHeight())/(t.getHeight()-n.getHeight());player.volume(m)},d=function(){noScrolling(),r.removeListener("mousemove",l),r.removeListener("mouseup",d),n.removeListener("touchmove",l),n.removeListener("touchend",d),n.mousedown(s),n.touchstart(s),C.bar.vbox.mouseDown=!1};n.mousedown(s),n.touchstart(s);t.mousedown(function(e){e=e||window.event;var a=getClient(e),n=t.offset(),r=1-(a.y-n.top)/t.getHeight();player.volume(r)})},changeProgress=function(e){if(!("boolean"==valType(vars.live)&&vars.live||pSliderMouseDown)){var t=C.bar.pbox.bg,a=C.bar.pbox.slider,n=e/duration*100;"number"==valType(vars.live)&&(n="100"),C.bar.pbox.play.css({width:n+"%"});var r=a.getWidth()/t.getWidth()*100,i=n-.5*r;i<0&&(i=0),i>100-r&&(i=100-r),C.bar.pbox.slider.css({left:i+"%"}),checkProgressSlider()}},checkProgressSlider=function(){var e=C.bar.pbox.bg,t=C.bar.pbox.slider,a=0;C.bar.pbox.css("transition-duration")&&(a=1e3*parseFloat(C.bar.pbox.css("transition-duration"))+20);setTimeout(function(){var a=parseInt(C.bar.pbox.slider.css("left"));a<0&&(a=0,C.bar.pbox.slider.css({left:a+"px"})),a>e.getWidth()-t.getWidth()&&(a=e.getWidth()-t.getWidth(),C.bar.pbox.slider.css({left:a+"px"}))},a)},changeTopTime=function(){C.topBar.timeEle.htm(date("H:i:s")),setTimeout(changeTopTime,1e3)},changeVolumeSlider=function(e){if(!isUndefined(C.bar.vbox)){var t=C.bar.vbox.volume.box,a=C.bar.vbox.volume.bg,n=C.bar.vbox.volume.pp,r=C.bar.vbox.volume.slider;C.bar.vbox.volume.txt.htm(parseInt(100*e));var i=a.getHeight();if(i){var o=i-e*i;n.css({"margin-top":o+"px"});var s=a.offset().top-t.offset().top+o-.5*r.getHeight();r.css({top:s+"px"})}}},changeLoad=function(){if(video){var e=video.buffered.length;if(e>0){var t=video.buffered.end(e-1);loadTime=1e3&&(t+=a,i(e),e=0),n(r)},i=function(e){e!=CT.fps&&(CT.fps=e,replaceInformation("fps",e),eventTarget("fps",e))};isUndefined(CT.fps)&&(CT.fps=0),r()},getElement=function(e){var t=$(e);if(!isUndefined(t))return"htmlarray"==valType(t)&&(t=t[0]),isUndefined(t.captureParentNode)&&(t.captureParentNode=t.parentNode,t.prevElement=t.prev(),t.nextElement=t.next()),t},$=function(e,t){var a=null;document&&(a=document),isUndefined(t)||(a=t);var n=[];if(e)if("htmlobject"==valType(e)||"object"==valType(e)){if(!isUndefined((n=e).moeplayer))return n}else if("string"==valType(e)&&""!=e)switch(e.substr(0,1)){case".":if(e=e.substr(1,e.length),a.getElementsByClassName){if(!(n=a.getElementsByClassName(e)).length)return null}else if(!a&&document.getElementsByClassName){if(!(n=document.getElementsByClassName(e)).length)return null}else{var r=new RegExp(" "+e+" ","i"),i=null;i=a.getElementsByTagName?a.getElementsByTagName("*"):document.getElementsByTagName("*");for(var o=0;o1&&(n=t[1].substr(0,1).toLocaleUpperCase()+t[1].substr(1,t[1].length-1)),t.length>2&&(n=t[2].substr(0,1).toLocaleUpperCase()+t[2].substr(1,t[2].length-1)),a+n+""}return e};if(isUndefined(t)){if(!isUndefined(e)&&"string"==valType(e))return this.currentStyle?this.currentStyle[e]:document.defaultView.getComputedStyle(this,null)[e];if(isUndefined(e))return this.currentStyle?this.currentStyle:document.defaultView.getComputedStyle(this,null)}if("object"!=valType(e)){var n=a(e);if(this.length>1)for(var r=0;r=e+1?this[e]:null};for(o=0;ot&&(t=parseInt(n))}return t}function getWindowSize(){return{width:window.innerWidth,height:window.innerHeight}}function standardization(e,t){var a,n={};for(a in e)n[a]=e[a];for(a in t)a in n&&(n[a]=t[a]);return n}function mergeObj(e,t){var a,n={};for(a in e)n[a]=e[a];for(a in t)if(a in n)if("object"===valType(n[a]))"object"==valType(t[a])&&(n[a]=mergeObj(n[a],t[a]));else valType(n[a])==valType(t[a])&&(n[a]=t[a]);return n}function valType(e){if(void 0===e)return"undefined";var t=Object.prototype.toString.call(e).split(" ")[1].replace("]","").toLowerCase();return"html"!=t.substr(0,4)||"element"!=t.substr(-7)&&"document"!=t.substr(-8)&&"window"!=t||(t="htmlobject"),"htmlcollection"!=t&&"nodelist"!=t||(t="htmlarray"),t}function isUndefined(e){try{return"undefined"===valType(e)||null==e||"number"===valType(e)&&isNaN(e)}catch(e){return!0}return!1}function prev(e){var t=e.previousSibling;if(null==t)return null;if(3!=t.nodeType)return 1==t.nodeType&&t;var a=prev(t);return a&&1==a.nodeType?a:void 0}function next(e){var t=e.nextSibling;if(null==t)return null;if(3!=t.nodeType)return 1==t.nodeType&&t;var a=next(t);return a&&1==a.nodeType?a:void 0}function addListener(e,t,a,n){if(isUndefined(n)&&(n=!1),e.addEventListener)try{e.addEventListener(t,a,n)}catch(e){}else if(e.attachEvent)try{e.attachEvent("on"+t,a)}catch(e){}else e["on"+t]=a;return isUndefined(e.listenerList)&&(e.listenerList=[]),e.listenerList.push([t,a]),e}function removeListener(e,t,a,n){if(isUndefined(n)&&(n=!1),e.removeEventListener)try{e.removeEventListener(t,a,n)}catch(t){}else if(e.detachEvent)try{e.detachEvent("on"+t,a)}catch(t){}else e["on"+t]=null;if(!isUndefined(e.listenerList)){for(var r=[],i=0;i=4&&t>=6-r?(e=new Date(a.getFullYear()-1+"/12/31"),date("W",Math.round(e.getTime()/1e3))):1+(r<=3?(t+r)/7:(t-(7-r))/7)|0},F:function(){return o[s.n()]},m:function(){return n(s.n(),2)},M:function(){return s.F().substr(0,3)},n:function(){return a.getMonth()+1},t:function(){var e;return 2==(e=a.getMonth()+1)?28+s.L():1&e&&e<8||!(1&e)&&e>7?31:30},L:function(){var e=s.Y();return 3&e||!(e%100)&&e%400?0:1},Y:function(){return a.getFullYear()},y:function(){return(a.getFullYear()+"").slice(2)},a:function(){return a.getHours()>11?"pm":"am"},A:function(){return s.a().toUpperCase()},B:function(){var e=60*(a.getTimezoneOffset()+60),t=3600*a.getHours()+60*a.getMinutes()+a.getSeconds()+e,n=Math.floor(t/86.4);return n>1e3&&(n-=1e3),n<0&&(n+=1e3),1==String(n).length&&(n="00"+n),2==String(n).length&&(n="0"+n),n},g:function(){return a.getHours()%12||12},G:function(){return a.getHours()},h:function(){return n(s.g(),2)},H:function(){return n(a.getHours(),2)},i:function(){return n(a.getMinutes(),2)},s:function(){return n(a.getSeconds(),2)},O:function(){var e=n(Math.abs(a.getTimezoneOffset()/60*100),4);return e=a.getTimezoneOffset()>0?"-"+e:"+"+e},P:function(){var e=s.O();return e.substr(0,3)+":"+e.substr(3,2)},c:function(){return s.Y()+"-"+s.m()+"-"+s.d()+"T"+s.h()+":"+s.i()+":"+s.s()+s.P()},U:function(){return Math.round(a.getTime()/1e3)}};return e.replace(/([a-zA-Z])/g,function(e,t){return e!=t?t:s[t]?s[t]():t})}function dataURLtoBlob(e){for(var t=e.split(","),a=t[0].match(/:(.*?);/)[1],n=atob(t[1]),r=n.length,i=new Uint8Array(r);r--;)i[r]=n.charCodeAt(r);return new Blob([i],{type:a})}function decodeURIString(e){for(var t in e){if("string"==valType(e[t])&&e[t])try{e[t]=decodeURI(e[t])}catch(e){}"object"==valType(e[t])&&(e[t]=decodeURIString(e[t]))}return e}function getApp(){if(navigator.userAgent.toLowerCase().indexOf("iphone")>-1)return"iphone"}function cookie(e,t,a,n){isUndefined(a)&&(a=""),isUndefined(n)&&(n="/");var r=";domain="+a+";path="+n;"https"==location.protocol&&(r+=";SameSite=None;Secure=true");var i=function(e){var t,a=new RegExp("(^| )"+e+"=([^;]*)(;|$)");return(t=document.cookie.match(a))?unescape(t[2]):null};return isUndefined(e)||isUndefined(t)?!isUndefined(e)&&isUndefined(t)?i(e):void isUndefined(e):"delete"==t?(function(e){var t=new Date;t.setTime(t.getTime()-1);var a=i(e);null!=a&&(document.cookie=e+"="+a+";expires="+t.toGMTString()+r)}(e),null):(function(e,t){var a=new Date;a.setTime(a.getTime()+31104e6);try{document.cookie=e+"="+escape(t)+";expires="+a.toGMTString()+r}catch(e){console.error(e)}}(e,t),i(e))}function arrayToString(e){var t="";if(!isUndefined(e))for(var a=0;a0&&(t+=",");for(var r=0;r0&&(t+=";"),"number"==valType(n[r])?t+=parseInt(100*n[r]):t+=n[r]}return t}function stringToArray(e){var t=[];if(!isUndefined(e))for(var a=e.split(","),n=0;nt&&(t=parseInt(n))}return t}function getWindowSize(){return{width:window.innerWidth,height:window.innerHeight}}function prev(e){var t=e.previousSibling;if(null==t)return null;if(3!=t.nodeType)return 1==t.nodeType&&t;var a=prev(t);return a&&1==a.nodeType?a:void 0}function next(e){var t=e.nextSibling;if(null==t)return null;if(3!=t.nodeType)return 1==t.nodeType&&t;var a=next(t);return a&&1==a.nodeType?a:void 0}function addListener(e,t,a,n){if(isUndefined(n)&&(n=!1),e.addEventListener)try{e.addEventListener(t,a,n)}catch(e){}else if(e.attachEvent)try{e.attachEvent("on"+t,a)}catch(e){}else e["on"+t]=a;return isUndefined(e.listenerList)&&(e.listenerList=[]),e.listenerList.push([t,a]),e}function removeListener(e,t,a,n){if(isUndefined(n)&&(n=!1),e.removeEventListener)try{e.removeEventListener(t,a,n)}catch(t){}else if(e.detachEvent)try{e.detachEvent("on"+t,a)}catch(t){}else e["on"+t]=null;if(!isUndefined(e.listenerList)){for(var r=[],i=0;i-1)return"iphone"}function formatSeconds(e){isUndefined(e)&&(e=0);var t=parseInt(e);isUndefined(t)&&(t=0),t<0&&(t=0);var a=Math.floor(t/3600)<10?"0"+Math.floor(t/3600):Math.floor(t/3600),n="";return"00"!==a&&(n+=a+":"),n+=(Math.floor(t/60%60)<10?"0"+Math.floor(t/60%60):Math.floor(t/60%60))+":"+(Math.floor(t%60)<10?"0"+Math.floor(t%60):Math.floor(t%60))}function date(e,t){isUndefined(t)&&(t=new Date),t.toString().length<13&&(t*=1e3);var a=t?new Date(t):new Date,n=function(e,t){return(e+="").length=4&&t>=6-r?(e=new Date(a.getFullYear()-1+"/12/31"),date("W",Math.round(e.getTime()/1e3))):1+(r<=3?(t+r)/7:(t-(7-r))/7)|0},F:function(){return o[s.n()]},m:function(){return n(s.n(),2)},M:function(){return s.F().substr(0,3)},n:function(){return a.getMonth()+1},t:function(){var e;return 2==(e=a.getMonth()+1)?28+s.L():1&e&&e<8||!(1&e)&&e>7?31:30},L:function(){var e=s.Y();return 3&e||!(e%100)&&e%400?0:1},Y:function(){return a.getFullYear()},y:function(){return(a.getFullYear()+"").slice(2)},a:function(){return a.getHours()>11?"pm":"am"},A:function(){return s.a().toUpperCase()},B:function(){var e=60*(a.getTimezoneOffset()+60),t=3600*a.getHours()+60*a.getMinutes()+a.getSeconds()+e,n=Math.floor(t/86.4);return n>1e3&&(n-=1e3),n<0&&(n+=1e3),1==String(n).length&&(n="00"+n),2==String(n).length&&(n="0"+n),n},g:function(){return a.getHours()%12||12},G:function(){return a.getHours()},h:function(){return n(s.g(),2)},H:function(){return n(a.getHours(),2)},i:function(){return n(a.getMinutes(),2)},s:function(){return n(a.getSeconds(),2)},O:function(){var e=n(Math.abs(a.getTimezoneOffset()/60*100),4);return e=a.getTimezoneOffset()>0?"-"+e:"+"+e},P:function(){var e=s.O();return e.substr(0,3)+":"+e.substr(3,2)},c:function(){return s.Y()+"-"+s.m()+"-"+s.d()+"T"+s.h()+":"+s.i()+":"+s.s()+s.P()},U:function(){return Math.round(a.getTime()/1e3)}};return e.replace(/([a-zA-Z])/g,function(e,t){return e!=t?t:s[t]?s[t]():t})}function arrayToString(e){var t="";if(!isUndefined(e))for(var a=0;a0&&(t+=",");for(var r=0;r0&&(t+=";"),"number"==valType(n[r])?t+=parseInt(100*n[r]):t+=n[r]}return t}function stringToArray(e){var t=[];if(!isUndefined(e))for(var a=e.split(","),n=0;n0),isUndefined(CT)||null==CT)return null;"htmlarray"==valType(CT)&&(CT=CT.eq(0)),calculationFps(),existenceObj="string"==valType(vars.video)&&("."==vars.video.substr(0,1)&&-1==vars.video.indexOf("/")||"#"==vars.video.substr(0,1)),existenceObj&&(CK=CT.find(".moeplayer")?CT.find(".moeplayer").eq(0):null,CK&&(CM=CK.find(".ck-main")?CK.find(".ck-main").eq(0):null),CM&&(CV=CM.find(".ck-video")?CM.find(".ck-video").eq(0):null)),CK&&CM&&CV||(CT.htm(""),CK=createlDiv("moeplayer"),CT.append(CK),CM=createlDiv("ck-main"),CK.append(CM),CV=createlDiv("ck-video"),CM.append(CV)),video&&(video.remove(),video=null),existenceObj&&(video=$(vars.video)?$(vars.video).eq(0):null),video||(video=createlVideo(),video.attr("width","100%").attr("height","100%"),CV.append(video)),video.volume=vars.volume,vars.autoplay?(player.volume(0),player.muted(),recoveryVolume=!0,video.attr("autoplay","autoplay"),paused=!1):video.attr("preload","metadata"),CT.loop=vars.loop,CT.loop&&video.attr("loop","loop"),vars.controls?video.controls=!0:video.controls=!1;try{existenceObj||(video.attr("controlslist","nodownload"),video.attr("x-webkit-airplay","true"),video.attr("x5-video-orientation","portraint"),video.attr("playsinline","true"),video.attr("webkit-playsinline","true"),video.attr("x5-playsinline","true")),vars.crossOrigin&&(video.useCORS=!0,video.crossOrigin=vars.crossOrigin)}catch(e){}if(CT.smallWindows=!0,CT.webFull=!1,CT.theatre=!1,loadFace(),vars.rotate>0&&player.rotate(vars.rotate),vars.zoom>0&&player.zoom(vars.zoom),isUndefined(video.canPlayType))return CT.error={code:5,message:language.error.supportVideoError},eventTarget("error",CT.error),showError(),player;if(addAllListener(),!isUndefined(vars.loaded))if("function"==valType(vars.loaded))try{vars.loaded(player)}catch(e){}else if("string"==valType(vars.loaded))try{eval(vars.loaded+"(player)")}catch(e){}return changeVideo(existenceObj?video.attr("src"):vars.video),player},changeVideo=function(e){var t=0;if((video.attr("src")||video.htm())&&player.pause(),video.attr("src")&&!existenceObj&&(video.attr("src",""),video.removeAttr("src")),!isUndefined(video.textTracks)&&video.textTracks.length>0)for(t=video.find("track").length-1;t>-1;t--)video.find("track").eq(t).remove();existenceObj||video.htm(""),isUndefined(vars.ad)||(ad=vars.ad);var a="";if("string"==valType(e)){if("website:"==e.substr(0,8)||"url:"==e.substr(0,4)){var n="";return"website:"==e.substr(0,8)&&(n=e.substring(8)),"url:"==e.substr(0,4)&&(n=e.substring(4)),void ajax({url:n,success:function(e){null!=e?(vars=standardization(varsTemp,e),changeVideo(vars.video)):(CT.error={code:8,message:language.error.ajax},eventTarget("error",CT.error),showError())}})}vars.plug&&!canPlay(e)?plugPlayer(e):existenceObj||video.attr("src",e),loadTrack()}else if("array"==valType(e)){for(t=0;t1&&(a+='")}a&&video.htm(a),loadTrack()}else"object"==valType(e)&&(vars.plug?plugPlayer(e):(CT.error={code:10,message:language.error.emptied},eventTarget("error",CT.error),showError()),loadTrack());if(!isUndefined(video.find("source"))&&video.find("source").length>0&&video.find("source").eq(video.find("source").length-1).addListener("error",videoHandler.error),checkBar(),loadLogo(),isChangeDef&&checkDefinition(),vars.cookie&&("array"==valType(vars.cookie)&&vars.cookie.length>=2&&(vars.cookie[0]&&"string"==valType(vars.cookie[0])&&(cookieName=vars.cookie[0]),vars.cookie[1]&&"number"==valType(vars.cookie[1])&&(cookieTime=vars.cookie[1])),"object"!=valType(vars.cookie)||isUndefined(vars.cookie.name)||(cookieName=vars.cookie.name,isUndefined(vars.cookie.hour)||"number"!=valType(vars.cookie.hour)||(cookieTime=vars.cookie.hour)),"string"==valType(vars.cookie)&&(cookieName=vars.cookie),cookieName&&(cookieName=cookieName.replace(/[ ]*,[ ]*|[ ]+/g,"").replace(/[ ]*;[ ]*|[ ]+/g,""))),!isUndefined(vars.seek)&&!seekTime&&("number"==valType(vars.seek)&&vars.seek>0&&(seekTime=vars.seek),"string"==valType(vars.seek)&&"cookie"==vars.seek&&cookieName)){var i=player.cookie(cookieName);i&&(seekTime=i.time)}},plugPlayer=function(e){switch(vars.plug){case"hls.js":hlsPlayer(e);break;case"flv.js":flvPlayer(e);break;case"mpegts.js":mpegtsPlayer(e);break;case"dash.js":dashPlayer(e);break;default:"function"==valType(vars.plug)?vars.plug(video,e):(CT.error={code:10,message:language.error.emptied},eventTarget("error",CT.error),showError())}},hlsPlayer=function(e){var t=getPath("hls.js")+"hls.min.js";loadJs(t,function(){!isUndefined(Hls)&&Hls.isSupported()?((hls=new Hls).loadSource(e),hls.attachMedia(video),hls.on(Hls.Events.ERROR,function(e,t){var a=9,n=language.error.loadingFailed,r=t.fatal;isUndefined(t.response)||(isUndefined(t.response.code)||(a=t.response.code),!isUndefined(t.response.text)&&t.response.text?n=t.response.text:isUndefined(e)||(n=e)),CT.error={code:a,message:n},eventTarget("error",CT.error),r&&showError()})):canPlay(e)&&video.attr("src",e)})},flvPlayer=function(e){var t=getPath("flv.js")+"flv.min.js";loadJs(t,function(){if("undefined"!=typeof flvjs&&!isUndefined(flvjs)&&flvjs.isSupported()){var t={type:"flv",url:e};"object"==valType(e)&&(t=e),vars.live&&(t.isLive=!0),pugPlayer&&(pugPlayer.pause(),pugPlayer.unload(),pugPlayer.detachMediaElement(),pugPlayer.destroy(),pugPlayer=null),(pugPlayer=flvjs.createPlayer(t)).attachMediaElement(video),pugPlayer.load(),pugPlayer.on(flvjs.Events.METADATA_ARRIVED,function(e){videoHandler.loadedMetaData()}),pugPlayer.on(flvjs.Events.ERROR,function(e,t,a){CT.error={code:a.code,message:a.msg},eventTarget("error",CT.error),showError()})}})},mpegtsPlayer=function(e){var t=getPath("mpegts.js")+"mpegts.js";loadJs(t,function(){if("undefined"!=typeof mpegts&&!isUndefined(mpegts)&&mpegts.getFeatureList().mseLivePlayback){var t={type:"mse",url:e};"object"==valType(e)&&(t=e),vars.live&&(t.isLive=!0),pugPlayer&&(pugPlayer.pause(),pugPlayer.unload(),pugPlayer.detachMediaElement(),pugPlayer.destroy(),pugPlayer=null),(pugPlayer=mpegts.createPlayer(t)).attachMediaElement(video),pugPlayer.load(),pugPlayer.on(mpegts.Events.METADATA_ARRIVED,function(e){videoHandler.loadedMetaData()}),pugPlayer.on(mpegts.Events.ERROR,function(e,t,a){CT.error={code:a.code,message:a.msg},eventTarget("error",CT.error),showError()})}})},canPlay=function(e,t){var a=[{vidType:"video/ogg",codType:"theora, vorbis"},{vidType:"video/mp4",codType:"avc1.4D401E, mp4a.40.2"},{vidType:"video/mp4",codType:"avc1"},{vidType:"video/mp4",codType:"hevc"},{vidType:"video/webm",codType:"vp8.0, vorbis"},{vidType:"video/webm",codType:"vp9"},{vidType:"",codType:"application/x-mpegURL"},{vidType:"",codType:"application/vnd.apple.mpegurl"}],n={ogg:a[0],mp4:[a[1],a[2],a[3]],webm:[a[4],a[5]],m3u8:[a[6],a[7]]},r=[],i="",o=function(e){var t=e.vidType,a="";a=t?t+'; codecs="'+e.codType+'"':e.codType;var n=video.canPlayType(a);return""==n&&(n="no"),n},s=function(e){return e.replace(/.+\./,"")};if(isUndefined(t)){if("string"==valType(e))if(vars.type)for(i in a)a[i].vidType==vars.type&&r.push(a[i]);else if(s(e)&&s(e)in n){var l=n[s(e)];if("array"==valType(l))for(var d=0;d0)for(d=0;di&&t[n][0]!=cookieName&&r<19&&(o.push(t[n]),r++);t=o}else t.push([cookieName,e,i+3600*cookieTime]);t.length>0&&(cookie(moeplayerCookie,"delete",vars.domain,vars.cookiePath),cookie(moeplayerCookie,arrayToString(t),vars.domain,vars.cookiePath)),cookieArray=t},loadTrack=function(){if(!isUndefined(video.textTracks)){var e=0;if(!isUndefined(vars.track)&&"array"==valType(vars.track)&&!video.find("track")){var t="",a=vars.track;for(C.bar.track.show(),e=0;e"}if(video){var r=video.htm()+t;video.htm(r)}video.find("track")&&!loadedTrack&&(loadedTrack=!0,checkTrack())}}},loadedMetaData=function(){eventTarget("loadedMetaData",{width:CK.getWidth(),height:CK.getHeight(),videoWidth:CT.videoWidth,videoHeight:CT.videoHeight,duration:duration,volume:CT.volume}),eventTarget("duration",duration),"error"in C&&C.error.hide(),replaceInformation("videoWidth",CT.videoWidth),replaceInformation("videoHeight",CT.videoHeight),replaceInformation("volume",parseInt(100*CT.volume)),replaceInformation("duration",parseInt(duration)),documentHidden(function(e){vars.documentFocusPause&&("show"==e?!focusPause&&paused&&player.play():(focusPause=paused,player.pause()))})},videoHandler={loadStart:function(){vars.controls||"iphone"==app||C.loading.show(),C.centerPlay.hide(),eventTarget("loadstart")},canPlay:function(){C.loading.hide(),eventTarget("canplay")},loadedData:function(){eventTarget("loadeddata")},loadedMetaData:function(){duration=this.duration,!isUndefined(this.duration)&&vars.duration&&(duration=vars.duration),vars.live||(C.time.htm(formatSeconds(this.currentTime)+"/"+formatSeconds(duration)),C.tempTime.htm(formatSeconds(this.currentTime)+"/"+formatSeconds(duration))),C.loading.hide(),vars.poster&&video.attr("poster",vars.poster),vars.autoplay||vars.controls||(C.centerPlay.show(),C.buffer.hide()),CT.duration=duration,CT.videoWidth=this.videoWidth,CT.videoHeight=this.videoHeight,CT.volume=this.volume,(CT.videoWidth||CT.videoHeight||duration)&&loadedMetaData();var e=0;isUndefined(this.buffered)||(e=this.buffered.length),e>0&&changeLoad(),vars.live?changePreview():changePreview(vars.preview),isUndefined(vars.prompt)||"array"!=valType(vars.prompt)||vars.live?deletePrompt():changePrompt(),isChangeDef&&(checkDefinition(),isChangeDef=!1),pSliderMouseDown=!1,loadedmetadataNum++,!isUndefined(ad)&&!isUndefined(ad.frontPlay)&&ad.frontPlay&&loadedmetadataNum>1&&(player.play(),calculationAdFrontTime(duration)),isUndefined(ad)||isUndefined(ad.frontPlay)||ad.frontPlay||(player.volume(vars.volume),player.play()),!vars.autoplay&&loadMeta&&(loadMeta=!1,player.pause(),setTimeout(player.pause,300))},timeUpDate:function(){waited||(waited=!0,C.buffer.hide(),eventTarget("buffer","end")),this.buffered.length>0&&changeLoad(),!duration&&this.duration&&(duration=this.duration,CT.duration=duration,CT.videoWidth=this.videoWidth,CT.videoHeight=this.videoHeight,(CT.videoWidth||CT.videoHeight||duration)&&loadedMetaData()),oldTime=playTime,playTime=this.currentTime,maxSeeTime1&&calculationAdFrontTime(duration-playTime),isUndefined(C.error)||"block"!=C.error.css("display")||C.error.hide(),cookieName&&changeCookie(playTime),replaceInformation("audioDecodedByteCount",this.webkitAudioDecodedByteCount||this.audioDecodedByteCount||0),replaceInformation("videoDecodedByteCount",this.webkitVideoDecodedByteCount||this.videoDecodedByteCount||0)},ended:function(){isUndefined(ad)||isUndefined(ad.frontPlay)||!ad.frontPlay?(C.bar.playAndPause.pause.hide(),C.bar.playAndPause.play.hide(),C.bar.playAndPause.refresh.show(),eventTarget("ended"),showEnded(),message()):adFrontEnded()},error:function(e){if(!isUndefined(e.type)){var t=this.error,a=function(){var a=12,n=language.error.loadingFailed;isUndefined(t)?(CT.error={code:a,message:n},e.target.attr("src")&&showError()):(isUndefined(t.code)||(a=t.code),isUndefined(t.message)||(n=t.message),CT.error={code:a,message:n},showError()),eventTarget("error",CT.error)};if("error"==e.type)try{video.currentSrc?ajax({url:video.currentSrc,error:function(e){e&&"object"==valType(e)&&"code"in e&&e.code?(CT.error=e,eventTarget("error",CT.error),showError()):a()},success:function(e){e||a()}}):a()}catch(e){a()}}},stalled:function(){eventTarget("stalled"),CT.error={code:13,message:"load:stalled"},eventTarget("error",CT.error)},suspend:function(){eventTarget("suspend")},emptied:function(){eventTarget("emptied"),CT.error={code:7,message:language.error.emptied},eventTarget("error",CT.error)},seeked:function(){paused&&player.play(),pSliderMouseDown=!1,eventTarget("seek",{time:this.currentTime,state:"seeked"}),eventTarget("seeked")},seeking:function(){paused&&player.play();var e=this.currentTime;switch(-1==firstSeekTime&&(firstSeekTime=e),vars.timeScheduleAdjust){case 0:if(oldTime!=e)return waitingMessage=!1,player.seek(oldTime),void message(language.timeScheduleAdjust.prohibit);break;case 2:if(eoldTime)return waitingMessage=!1,player.seek(oldTime),void message(language.timeScheduleAdjust.prohibitForward);break;case 4:if(emaxSeeTime)return waitingMessage=!1,player.seek(maxSeeTime),void message(language.timeScheduleAdjust.prohibitForwardNotViewed)}eventTarget("seek",{time:e,state:"seeking"}),eventTarget("seeking"),vars.live||(C.time.htm(formatSeconds(e)+"/"+formatSeconds(duration)),C.tempTime.htm(formatSeconds(e)+"/"+formatSeconds(duration)))},waiting:function(){waited=!1,eventTarget("buffer","start"),C.centerPlay.hide(),vars.controls||C.buffer.show(),waitingMessage?message(language.waiting):waitingMessage=!0},play:function(){if(paused=!1,C.bar.playAndPause.play.hide(),C.bar.playAndPause.pause.show(),C.bar.playAndPause.refresh.hide(),C.centerPlay.hide(),"button"==playType?C.bar.pbox.removeClass("ck-bar-progress-out"):C.bar.pbox.addClass("ck-bar-progress-out"),recoveryVolume&&(recoveryVolume=!1,player.exitMuted()),hideBar(),closePauseAd(),playType="",isUndefined(C.ended)||player.closeLayer(C.ended),"error"in C&&C.error.hide(),eventTarget("play"),!isUndefined(ad)&&!isUndefined(ad.front)&&isUndefined(ad.frontPlay))return ad.frontPlayI=0,ad.frontPlay=!0,player.pause(),void adFrontPlay();seekTime&&(isUndefined(vars.live)||!isUndefined(vars.live)&&"boolean"==valType(vars.live)&&!vars.live)&&seekTime<.01*parseInt(100*duration)&&(player.seek(seekTime),seekTime=0)},pause:function(){paused=!0,isUndefined(ad)||isUndefined(ad.frontPlay)||!isUndefined(ad.frontPlay)&&!ad.frontPlay?isUndefined(ad)||isUndefined(ad.pause)?vars.controls||(C.centerPlay.show(),C.buffer.hide()):(isUndefined(ad.pausePlayI)&&(ad.pausePlayI=0),adPausePlay()):vars.controls||(C.centerPlay.show(),C.buffer.hide()),C.bar.playAndPause.pause.hide(),C.bar.playAndPause.play.show(),C.bar.playAndPause.refresh.hide(),C.bar.pbox.removeClass("ck-bar-progress-out"),checkProgressSlider(),eventTarget("pause"),C.bar.removeClass("ck-bar-out"),CM.removeClass("ck-nocursor")},volumeChange:function(){if(0!=this.volume||mutedState||(this.muted=!0),this.volume>0&&mutedState&&(this.muted=!1),mutedState!=this.muted&&(mutedState=this.muted,changeMuted(this.muted),CT.muted=this.muted,eventTarget("muted",CT.muted)),CT.volume=this.volume,eventTarget("volume",this.volume),!isUndefined(C.bar.vbox)){var e=parseInt(100*this.volume);C.bar.vbox.volume.txt.htm(e),C.bar.vbox.mouseDown||changeVolumeSlider(this.muted?0:this.volume),this.muted||message(language.volume+e+"%")}replaceInformation("volume",parseInt(100*this.volume))},resize:function(){var e=document.fullScreen||document.mozFullScreen||document.webkitIsFullScreen||document.msFullscreenElement;e?(C.bar.fullAndExit.exitFull.show(),C.bar.fullAndExit.full.hide(),C.ad.bottom.fullAndExit.exitFull.show(),C.ad.bottom.fullAndExit.full.hide(),CM.hasClass("ck-main-full")||CM.addClass("ck-main-full"),message(language.full),C.bar.webFullAndExit.hide(),C.bar.theatreAndExit.hide(),isUndefined(C.menu)||CM.append(C.menu)):(e=!1,C.bar.fullAndExit.full.show(),C.bar.fullAndExit.exitFull.hide(),C.ad.bottom.fullAndExit.full.show(),C.ad.bottom.fullAndExit.exitFull.hide(),CM.hasClass("ck-main-full")&&CM.removeClass("ck-main-full"),!isUndefined(vars.webFull)&&vars.webFull&&C.bar.webFullAndExit.show(),isUndefined(vars.theatre)||CT.webFull||C.bar.theatreAndExit.show(),isUndefined(C.menu)||$("body").append(C.menu),CV.css("width")!=CM.css("width")&&player.zoom(100)),CT.full!=e&&(CT.full=e,eventTarget("full",e)),checkVideoRotate(),changeProgress(player.time())},keydown:function(e){var t=(e=window.event||e).keyCode||e.which,a=player.volume(),n=function(){e.preventDefault?e.preventDefault():e.returnValue=!1};switch(t){case 32:n(),player.playOrPause();break;case 37:player.fastBack();break;case 39:player.fastNext();break;case 38:"number"==valType(vars.keyVolume)&&(1==vars.keyVolume||2==vars.keyVolume&&CT.full)&&(n(),player.volume(a+.1<1?a+=.1:1));break;case 40:"number"==valType(vars.keyVolume)&&(1==vars.keyVolume||2==vars.keyVolume&&CT.full)&&(n(),player.volume(a-.1>0?a-=.1:0))}},mouseWheel:function(e){if("number"==valType(vars.mouseWheelVolume)&&(1==vars.mouseWheelVolume||2==vars.mouseWheelVolume&&CT.full)){e=window.event||e;var t=player.volume();e.preventDefault?e.preventDefault():e.returnValue=!1,e.wheelDelta?(e.wheelDelta>0&&player.volume(t+.1<1?t+=.1:1),e.wheelDelta<0&&player.volume(t-.1>0?t-=.1:0)):e.detail&&(e.detail>0&&player.volume(t-.1>0?t-=.1:0),e.detail<0&&player.volume(t+.1<1?t+=.1:1))}}},adFrontPlay=function(){if(0==ad.frontPlayI&&(allBarHide(!1),C.ad.show(),ad.front.video=!1,isUndefined(ad.front.closeTime)||(ad.front.closeTime>0?(C.ad.top.closeTime.show(),adFrontCloseTime()):C.ad.top.closeAd.show())),isUndefined(ad.front.node)||null==ad.front.node||(CM.append(ad.front.node),player.closeLayer(ad.front.node),ad.front.node=null),C.ad.picture.htm(""),C.ad.picture.hide(),C.ad.link.hide(),!isUndefined(ad.front.list[ad.frontPlayI])){var e=ad.front.list[ad.frontPlayI];frontAdPlay=!0,eventTarget("frontAd",e),"picture"==e.type?adPicturePlay(e):"node"==e.type?adNode(e):(C.ad.link.attr("data-link",e.link),adVideoPlay(e.file)),isUndefined(e.link)?C.ad.bottom.details.hide():(C.ad.bottom.details.show(),C.ad.bottom.details.htm(''+language.details+""))}},adFrontCloseTime=function(){isUndefined(ad.front.closeSetTime)||(clearTimeout(ad.front.closeSetTime),ad.front.closeSetTime=null),C.ad.top.closeTime.htmReplace("{seconds}",ad.front.closeTime,language.closeTime),ad.front.closeTime--,ad.front.closeTime>0?ad.front.closeSetTime=setTimeout(adFrontCloseTime,1e3):(C.ad.top.closeAd.show(),C.ad.top.closeTime.hide())},calculationAdFrontTime=function(e){isUndefined(e)||(ad.front.list[ad.frontPlayI].time=e),ad.front.countDown=0;for(var t=ad.frontPlayI;t0?(e.time--,ad.front.countDown--,C.ad.top.countDown.htm(ad.front.countDown+language.second),adFrontSetTime=setTimeout(adFrontCountDown,1e3)):adFrontEnded()},adFrontEnded=function(){ad.frontPlayI0||i>0){if(e.link){var o=createlA("",e.link);o.append(this),C.ad.picture.append(o)}else C.ad.picture.append(this);t.unbind(),t.click(function(){eventTarget("frontAdClick",e)})}else a<10&&(a++,n())})};n(),calculationAdFrontTime(),adFrontCountDown(),C.ad.bottom.mutedAndExit.hide()}},adNode=function(e){isUndefined(e.content)||(ad.front.node=player.layer(e),ad.front.node.css({"z-index":1}),C.ad.append(ad.front.node),ad.front.node.unbind(),ad.front.node.click(function(){eventTarget("frontAdClick",e)}),calculationAdFrontTime(),adFrontCountDown(),C.ad.bottom.mutedAndExit.hide())},frontVideoClickHandler=function(){var e=C.ad.link.attr("data-link");window.open(e,"_blank")},closeFrontAd=function(){if(isUndefined(ad)||isUndefined(ad.front)||isUndefined(ad.front.closeButtonClick))player.closeFrontAd();else if("function"==valType(ad.front.closeButtonClick))try{ad.front.closeButtonClick()}catch(e){console.error(e)}else if("string"==valType(ad.front.closeButtonClick))try{eval(ad.front.closeButtonClick+"()")}catch(e){console.error(e)}},adPausePlay=function(){if(closePauseAd(),!isUndefined(ad)&&!isUndefined(ad.pause)&&!isUndefined(ad.pause.list)&&ad.pause.list.length-1>=ad.pausePlayI){var e=ad.pause.list[ad.pausePlayI];if(!isUndefined(ad.pause.close)&&ad.pause.close&&(ad.pauseClose=createlButton("ck-pause-close"),ad.pauseClose.click(function(){C.centerPlay.show(),C.buffer.hide(),closePauseAd()})),isUndefined(e.file))isUndefined(e.content)||(ad.pause.node=player.layer(e),ad.pauseClose&&ad.pause.node.append(ad.pauseClose),ad.pause.node.click(function(){eventTarget("pauseAdClick",e)}));else{var t=null,a=0,n=function(){t=createlImg(e.file),C.adPause.show(),C.adPause.htm(""),C.adPause.append(t),t.addListener("load",function(){var r=this.getWidth(),i=this.getHeight();if(r>0||i>0){if(C.adPause.htm(""),e.link){var o=createlA("",e.link);o.append(this),C.adPause.append(o)}else C.adPause.append(this);C.adPause.css({width:r+"px",height:i+"px"}),ad.pauseClose&&C.adPause.append(ad.pauseClose),t.click(function(){eventTarget("pauseAdClick",e)})}else a<10&&(a++,n())})};n()}eventTarget("pauseAd",e),!isUndefined(e.time)&&e.time>0&&(adPauseSetTime=setTimeout(function(){ad.pausePlayI++,ad.pausePlayI>ad.pause.list.length-1&&(ad.pausePlayI=0),adPausePlay()},1e3*e.time))}},closePauseAd=function(){adPauseSetTime&&(clearTimeout(adPauseSetTime),adPauseSetTime=null),C.adPause.hide(),isUndefined(ad)||isUndefined(ad.pauseClose)||null==ad.pauseClose||(ad.pauseClose.remove(),ad.pauseClose=null),isUndefined(ad)||isUndefined(ad.pause)||isUndefined(ad.pause.node)||!ad.pause.node||(ad.pause.node.unbind(),player.closeLayer(ad.pause.node),eventTarget("pauseAdClose"))},player={width:function(e){return isUndefined(e)||("number"==valType(e)&&(e+="px"),CT.css({width:e}),checkVideoRotate()),CK.getWidth()},height:function(e){return isUndefined(e)||("number"==valType(e)&&(e+="px"),CT.css({height:e}),checkVideoRotate()),CK.getHeight()},videoWidth:function(){return video?video.videoWidth:null},videoHeight:function(){return video?video.videoHeight:null},zoom:function(e){if(!isUndefined(e)&&("function"==valType(e)&&newEvent.addEventListener("zoom",e),"number"==valType(e))){for(var t=[C.topBar.zoomEle.zoom50,C.topBar.zoomEle.zoom75,C.topBar.zoomEle.zoom100],a=0;ae&&e>0?a=t[e]:t.indexOf(e)>-1&&(a=e),a!=nowRotate&&(eventTarget("rotate",a),nowRotate=a,checkVideoRotate())}},vars:function(e,t){if(!isUndefined(e)){if("string"==valType(e)&&!isUndefined(t)){var a={};a[e]=t,e=a}var n=!1;for(var r in e)if(r in vars&&e[r]!=vars[r]){n=!0;break}n&&(vars=standardization(vars,e)),isUndefined(e.video)||(isChangeDef=!0,changeVideo(vars.video)),isUndefined(e.title)||C.topBar.titleEle.htm(e.title)}},loadstart:function(e){isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("loadstart",e)},loadeddata:function(e){isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("loadeddata",e)},loadedMetaData:function(e){isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("loadedMetaData",e)},canplay:function(e){isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("canplay",e)},play:function(e){if("object"==valType(e)&&(e.target!=C.bar.playAndPause.play&&e.target!=C.bar.playAndPause.refresh||(playType="button")),isUndefined(e)||"function"!=valType(e)){if(loadedmetadataNum>0&&video)try{video.play()}catch(e){console.error(e)}}else newEvent.addEventListener("play",e);return player},pause:function(e){if(isUndefined(e)||"function"!=valType(e)){if(loadedmetadataNum>0&&video)try{video.pause()}catch(e){console.error(e)}}else newEvent.addEventListener("pause",e);return player},playOrPause:function(){return paused?player.play():player.pause(),player},volume:function(e){if(isUndefined(e)){if(video)return video.volume}else"function"==valType(e)?newEvent.addEventListener("volume",e):"number"==valType(e)&&video&&(e<0&&(e=0),e>1&&(e=1),video.muted&&(video.volume=.5*e),video.volume=e);return player},muted:function(e){return isUndefined(e)||"function"!=valType(e)?video&&(video.muted=!0):newEvent.addEventListener("muted",e),player},exitMuted:function(){return video&&(video.muted=!1,0==video.volume&&player.volume(vars.volume>0?vars.volume:.8)),player},time:function(e){if(isUndefined(e)||"function"!=valType(e)){if(video)return video.currentTime||0}else newEvent.addEventListener("time",e)},seek:function(e){if(!isUndefined(e)&&("function"==valType(e)&&newEvent.addEventListener("seek",e),"number"==valType(e)&&video)){switch(vars.timeScheduleAdjust){case 0:return void message(language.timeScheduleAdjust.prohibit);case 1:break;case 2:if(eoldTime)return void message(language.timeScheduleAdjust.prohibitForward);break;case 4:if(emaxSeeTime)return waitingMessage=!1,video.currentTime=maxSeeTime,void message(language.timeScheduleAdjust.prohibitForwardNotViewed)}pSliderMouseDown=!1,video.currentTime=e}return player},buffer:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("buffer",e),player},ended:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("ended",e),player},next:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("next",e),player},error:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("error",e),player},emptied:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("emptied",e),player},duration:function(e){if(isUndefined(e)||"function"!=valType(e))return duration||0;newEvent.addEventListener("duration",e)},playbackRate:function(e){if(isUndefined(e))return video.playbackRate;"function"==valType(e)?newEvent.addEventListener("playbackRate",e):"number"==valType(e)&&video&&(video.playbackRate=e,CT.playbackRate=e,eventTarget("playbackRate",e),changePlaybackrateVal(e))},track:function(e){if(isUndefined(e))return CT.track;if("function"==valType(e))newEvent.addEventListener("track",e);else if("number"==valType(e)&&video){var t=null;if(isUndefined(video.textTracks)||(t=video.textTracks),t&&"texttracklist"==valType(t)){for(var a=vars.track,n=t.length-1;n>-1;n--)video.find("track").eq(n).remove();for(n=0;n"}if(video){var i=video.htm()+t;video.htm(i)}changeTrackVal(e)}}},fastBack:function(e){if(0!=duration){(isUndefined(e)||"number"!=valType(e))&&(e=20);var t=player.time();return t-e>0?t-=e:t=0,player.seek(t),player}},fastNext:function(e){if(0!=duration){(isUndefined(e)||"number"!=valType(e))&&(e=20);var t=player.time();return t+e200&&(r=200),isUndefined(n.cssDisplay)&&(n.cssPosition=n.css("position"),n.cssDisplay=n.css("display")),n.css({position:"absolute","z-index":r}),a?C.bar.append(n):CM.append(n),n.CK=CK,n.show()}return n},closeLayer:function(e){if("string"==valType(e)){var t=$(e);isUndefined(t)||t.length>0&&(e=t.eq(0))}if(!isUndefined(e)&&"htmlobject"==valType(e)){if(isUndefined(e.captureParentNode))e.remove();else{var a=e.captureParentNode;if(e.nextElement)try{a.insertBefore(e,e.nextElement)}catch(t){a.append(e)}else if(e.prevElement)try{a.insertAfter(e,e.prevElement)}catch(t){a.append(e)}else a.append(e);e.css({display:e.cssDisplay})}isUndefined(e.cssDisplay)||e.css({display:e.cssDisplay,position:e.cssPosition})}return player},message:function(e){return message(e),player},closeFrontAd:function(){return!frontAdPlay||isUndefined(ad)||isUndefined(ad.front)||isUndefined(ad.front.list)||(ad.frontPlayI=ad.front.list.length-1,adFrontEnded(),clearAdFrontSetTime()),player},addListener:function(e,t){newEvent.addEventListener(e,t)},removeListener:function(e,t){newEvent.removeEventListener(e,t)},bar:function(e){barShow=e,e?C.bar.show():C.bar.hide()},rightBar:function(e){rightBarShow=e,e?C.rightBar.show():C.rightBar.hide()},mouseActive:function(e){return isUndefined(e)||"function"!=valType(e)||newEvent.addEventListener("mouseActive",e),this},cookie:function(e){if("delete"==e)return cookie(moeplayerCookie,"delete",vars.domain),null;!isUndefined(e)&&e&&(e=e.replace(/[ ]*,[ ]*|[ ]+/g,"").replace(/[ ]*;[ ]*|[ ]+/g,""));var t=cookie(moeplayerCookie);if(t){var a=stringToArray(t),n=[],r=parseInt(.001*Date.now());for(i=0;ir&&n.push(a[i]);if((a=n).length>0){cookie(moeplayerCookie,"delete",vars.domain,vars.cookiePath),cookie(moeplayerCookie,arrayToString(a),vars.domain,vars.cookiePath);for(var i=0;i-1;a--){var n=createlButton("ck-list-p",e[a]+language.playbackrateSuffix);n.attr("data-i",a).attr("data-val",e[a]),C.bar.playbackrate.bg.p.push(n),C.bar.playbackrate.bg.append(n),n.click(playbackrateClick)}if(C.bar.playbackrate.hide(),!isUndefined(vars.playbackrateOpen)&&vars.playbackrateOpen){C.bar.playbackrate.show(),C.bar.playbackrate.bgbox.show();var r=C.bar.playbackrate.bg.getWidth(),i=C.bar.playbackrate.bg.getHeight(),o=C.bar.playbackrate.button.getWidth();C.bar.playbackrate.bg.css({width:r+10+"px"}),r=C.bar.playbackrate.bg.getWidth(),getBarHeight()>C.bar.getHeight()&&(i+=getBarHeight()-C.bar.getHeight()),C.bar.playbackrate.bgbox.attr("style",""),C.bar.playbackrate.bgbox.css({width:r+"px",height:i+2+"px",left:.5*-(r-o)+"px"}),C.bar.playbackrate.button.mouseover(function(){r=C.bar.playbackrate.bg.getWidth(),o=C.bar.playbackrate.button.getWidth(),C.bar.playbackrate.bgbox.css({left:.5*-(r-o)+"px"})}),changePlaybackrateVal(t)}},playbackrateClick=function(e){C.bar.playbackrate.bgbox.hide(),setTimeout(function(){C.bar.playbackrate.bgbox.removeCss("display")},300),message(language.switchTo+$(this).htm()),player.playbackRate(parseFloat($(this).attr("data-val")))},changePlaybackrateVal=function(e){C.bar.playbackrate.bg.find("button").each(function(t,a){var n=parseFloat(a.attr("data-val"));a.removeClass("ck-list-p-focus"),e==n?(a.addClass("ck-list-p-focus"),1!=e?C.bar.playbackrate.button.htm(a.htm()):C.bar.playbackrate.button.htm(language.playbackrate)):a.removeClass("ck-list-p-focus")})},checkTrack=function(){var e=vars.track,t=-1;C.bar.track.bgbox.htm(""),C.bar.track.bg=createlDiv("ck-list-bg"),C.bar.track.bgbox.append(C.bar.track.bg),C.bar.track.bg.p=[];for(var a=null,n=e.length-1;n>-1;n--)(a=createlButton("ck-list-p",e[n].label)).attr("data-i",n).attr("data-title",e[n].label),C.bar.track.bg.p.push(a),C.bar.track.bg.append(a),!isUndefined(e[n].default)&&e[n].default&&(t=n),a.click(trackClick);(a=createlButton("ck-list-p",language.noTrack)).attr("data-i",-1).attr("data-title",language.noTrack),C.bar.track.bg.p.push(a),C.bar.track.bg.append(a),a.click(trackClick),C.bar.track.hide(),C.bar.track.show(),C.bar.track.bgbox.show();var r=C.bar.track.bg.getWidth(),i=C.bar.track.bg.getHeight(),o=C.bar.track.button.getWidth();C.bar.track.bg.css({width:r+10+"px"}),r=C.bar.track.bg.getWidth(),getBarHeight()>C.bar.getHeight()&&(i+=getBarHeight()-C.bar.getHeight()),C.bar.track.bgbox.attr("style",""),C.bar.track.bgbox.css({width:r+"px",height:i+2+"px",left:.5*-(r-o)+"px"}),C.bar.track.button.mouseover(function(){r=C.bar.track.bg.getWidth(),o=C.bar.track.button.getWidth(),C.bar.track.bgbox.css({left:.5*-(r-o)+"px"})}),changeTrackVal(t)},trackClick=function(e){C.bar.track.bgbox.hide(),setTimeout(function(){C.bar.track.bgbox.removeCss("display")},300),message(language.switchTo+$(this).attr("data-title")),player.track(parseFloat($(this).attr("data-i")))},changeTrackVal=function(e){C.bar.track.bg.find("button").each(function(t,a){var n=parseInt(a.attr("data-i"));e==n?(C.bar.track.button.htm(a.attr("data-title")),n>-1?(CT.track=vars.track[n],eventTarget("track",vars.track[n])):(CT.track=null,eventTarget("track",null)),a.addClass("ck-list-p-focus")):a.removeClass("ck-list-p-focus")})},checkDefinition=function(){var e=-1,t=video.currentSrc;if(isUndefined(C.bar.definition.bg)||(C.bar.definition.bgbox.htm(""),C.bar.definition.bgbox.attr("style",""),C.bar.definition.button.htm(language.definition)),"array"==valType(vars.video)){var a=vars.video;C.bar.definition.bg=createlDiv("ck-list-bg"),C.bar.definition.bgbox.append(C.bar.definition.bg),C.bar.definition.bg.p=[];for(var n=a.length-1;n>-1;n--){var r=createlButton("ck-list-p",a[n][2]);r.attr("data-i",n).attr("data-video",a[n][0]).attr("data-type",a[n][1]).attr("data-title",a[n][2]),C.bar.definition.bg.p.push(r),C.bar.definition.bg.append(r),t&&t.indexOf(a[n][0])>-1&&(e=n),r.click(definitionClick)}C.bar.definition.show(),C.bar.definition.bgbox.show();var i=C.bar.definition.bg.getWidth(),o=C.bar.definition.bg.getHeight(),s=C.bar.definition.button.getWidth();C.bar.definition.bg.css({width:i+10+"px"}),i=C.bar.definition.bg.getWidth(),getBarHeight()>C.bar.getHeight()&&(o+=getBarHeight()-C.bar.getHeight()),C.bar.definition.bgbox.attr("style",""),C.bar.definition.bgbox.css({width:i+"px",height:o+2+"px",left:.5*-(i-s)+"px"}),C.bar.definition.button.mouseover(function(){i=C.bar.definition.bg.getWidth(),s=C.bar.definition.button.getWidth(),C.bar.definition.bgbox.css({left:.5*-(i-s)+"px"})})}e>-1&&C.bar.definition.bg.find("button").each(function(t,a){var n=parseInt(a.attr("data-i"));e==n?a.addClass("ck-list-p-focus"):a.removeClass("ck-list-p-focus")})},definitionClick=function(e){C.bar.definition.bgbox.hide(),setTimeout(function(){C.bar.definition.bgbox.removeCss("display")},300),changeDefinition(parseInt($(this).attr("data-i")))},changeDefinition=function(e){C.bar.definition.bg.find("button").each(function(t,a){var n=parseInt(a.attr("data-i"));if(e==n){if(!isUndefined(video.textTracks)&&video.textTracks.length>0)for(var r=video.find("track").length-1;r>-1;r--)video.find("track").eq(r).remove();seekTime=player.time(),video.attr("autoplay","autoplay"),changeVideo(a.attr("data-video")),message(language.switchTo+a.htm()),C.bar.definition.button.htm(a.htm()),a.addClass("ck-list-p-focus"),eventTarget("definition",{id:n,video:a.attr("data-video"),title:a.attr("data-title")})}else a.removeClass("ck-list-p-focus")})},deletePrompt=function(){var e=0;if(!isUndefined(C.prompt)&&"array"==valType(C.prompt)){for(e=C.prompt.length;e>-1;e--)isUndefined(C.prompt[e])||C.prompt[e].remove();C.prompt=null}C.prompt=[]},changePrompt=function(){deletePrompt();for(var e=0;e100&&(r=100),a.css({left:r+"%"}),a.mouseover(function(){this.attr("data-words")&&showPromptWords(this)}),a.mouseout(function(){this.attr("data-words")&&showPromptWords()}),C.prompt.push(a)}}},showPromptWords=function(e){if(isUndefined(C.promptWords)&&(C.promptWords=createlDiv("ck-prompt-words"),CM.append(C.promptWords),C.promptWords.content=createlDiv("ck-prompt-content"),C.promptWords.append(C.promptWords.content)),isUndefined(e))return C.promptWords.content.htm(""),void C.promptWords.hide();C.promptWords.content.htm(e.attr("data-words")),C.promptWords.show();var t=C.promptWords.getWidth(),a=C.promptWords.getHeight(),n=(C.bar.pbox.bg,parseFloat(e.attr("data-time")),CK.getHeight()-getBarHeight()),r=e.offset().left-CK.offset().left+.5*e.getWidth()-.5*t;isUndefined(C.preview)?(n=CK.getHeight()-parseFloat(getBarHeight()+C.tip.minHeight+parseInt(C.tip.css("margin-bottom"))),n-=getBarHeight()-C.bar.getHeight()):n=CK.getHeight()-parseFloat(getBarHeight()+C.preview.smallHight+parseInt(C.preview.css("margin-bottom"))),n-=parseFloat(C.promptWords.css("margin-bottom")),n-=a,(r-=parseFloat(C.promptWords.css("margin-right")))<0&&(r=0),r>CK.getWidth()-t&&(r=CK.getWidth()-t),C.promptWords.css({top:n+"px",left:r+"px"})},changePreview=function(e){if(isUndefined(C.preview)||(C.preview.remove(),C.preview=null),!isUndefined(e)){C.preview=createlDiv("ck-preview"),CM.append(C.preview),isUndefined(vars.preview.type)&&(vars.preview.type=0),1==vars.preview.type&&(C.preview.bg=createlDiv("ck-preview-bg"),C.preview.append(C.preview.bg));var t=[];if("object"==valType(vars.preview))if("array"==valType(vars.preview.file)){t=vars.preview.file;var a=[10,10];if("array"==valType(vars.preview.thumbnail)&&vars.preview.thumbnail.length>1&&("number"==valType(vars.preview.thumbnail[0])&&(a[0]=vars.preview.thumbnail[0]),"number"==valType(vars.preview.thumbnail[1])&&(a[1]=vars.preview.thumbnail[1]),vars.preview.thumbnail=a),t[0]){var n=createlImg(t[0],"ck-preview-load-img").addListener("load",function(){!function(e,a,n,r){if(1==vars.preview.type){C.preview.bg.img=[];for(var i=0;i0){isUndefined(vars.preview.type)&&(vars.preview.type=0);var t=2,a=vars.preview.thumbnail;isUndefined(vars.preview.scale)||(t=vars.preview.scale);var n=0,r=0,i=0,o=0,s=0,l=C.preview.smallWidth,d=C.preview.smallHight,u=e*C.bar.pbox.bg.getWidth()/duration+(C.bar.pbox.bg.offset().left-CK.offset().left);if("none"==C.preview.css("display")&&C.preview.show(),C.preview.css({height:d+"px"}),1==vars.preview.type){n=parseInt(e/(t*a[0])),r=parseInt(e/t);var c=n-5,p=n+5;c<0&&(c=0),p>C.preview.bg.img.length-1&&(p=C.preview.bg.img.length-1);for(var v=c;vC.preview.getWidth()-C.preview.frame.getWidth()){var m=o-(C.preview.getWidth()-C.preview.frame.getWidth());o=C.preview.getWidth()-C.preview.frame.getWidth(),i-=m}C.preview.bg.css({left:i+"px"}),C.preview.frame.css({left:o+"px"})}else{var h=e/t/(a[0]*a[1]);r=parseInt(h);var b=parseInt(100*(h-r)),g=parseInt(b/a[0]),y=b%a[0],k=vars.preview.file;(i=u-.5*l)<0&&(i=0),i>CK.getWidth()-l&&(i=CK.getWidth()-l),C.preview.css({width:C.preview.smallWidth+"px",background:"url("+k[r]+") no-repeat","background-position":"-"+y*l+"px -"+g*d+"px",left:i+"px"})}}},showError=function(){if(C.loading.hide(),!vars.controls&&vars.errorShow){isUndefined(C.error)&&(C.error=createlDiv("ck-error"),CM.append(C.error));var e=CT.error.message;e||(e=language.error.noMessage);var t=e+"(code:"+CT.error.code+")";C.error.htm(t),C.error.show()}},showWindowsError=function(e){var t=createlDiv("moeplayer-error",e);$("body").append(t)},showNextEpisode=function(){if(!isUndefined(vars.next)){if("object"==valType(vars.next)){if("content"in vars.next)return void(C.next=player.layer(vars.next));if("title"in vars.next)return void tip(C.bar.nextEpisode,vars.next.title)}tip(C.bar.nextEpisode,language.next)}},nextClick=function(){"object"==valType(vars.next)&&("click"in vars.next&&("function"==valType(vars.next.click)?vars.next.click():"string"==valType(vars.next.click)&&eval(vars.next.click+"()")),"link"in vars.next&&(window.location.href=vars.next.link),eventTarget("next"))},showEnded=function(){if(!CT.loop&&!isUndefined(vars.ended))return closePauseAd(),C.ended=player.layer(vars.ended),void(C.ended&&C.centerPlay.hide())},windowScroll=function(){CT.smallWindows&&(CT.webFull||CT.theatre||CT.full?exitSmallWindows():(document.documentElement.scrollTop||document.body.scrollTop)>CT.offset().top+CT.getHeight()?CK.hasClass("moeplayer-smallwindow")||(CK.addClass("moeplayer-smallwindow"),eventTarget("smallWindows",!0),smallWindowsState=!0,vars.smallWindowsDrag&&drag(!0),allBarHide(),checkVideoRotate()):exitSmallWindows())},exitSmallWindows=function(){CK.hasClass("moeplayer-smallwindow")&&(CK.removeClass("moeplayer-smallwindow"),vars.smallWindowsDrag&&drag(),eventTarget("smallWindows",!1),smallWindowsState=!1,allBarShow(),checkVideoRotate())},drag=function(e){var t=$(document),a=0,n=0,r=0,i=0,o=!1;isUndefined(e)||(o=e);var s=function(e){e=e||window.event;var t=getClient(e),o=CK.offset();n=t.y-i,a=t.x-r,r=t.x,i=t.y;var s=o.left+a,l=o.top+n;CK.css({left:s+"px",top:l+"px"}),"fixed"!=CK.css("position")&&CK.css({position:"fixed"}),isDrag=!0},l=function(){t.removeListener("mousemove",s),t.removeListener("mouseup",l),CK.css({cursor:"default"})};o?CK.mousedown(function(e){e.preventDefault&&e.preventDefault(),e=e||window.event;var a=getClient(e);r=a.x,i=a.y,t.mousemove(s),t.mouseup(l),CK.css({cursor:"move"})}):CK.unbind("mousedown")},checkVideoRotate=function(){var e=CK.getWidth()*nowZoom*.01,t=CK.getHeight()*nowZoom*.01,a=CV.getWidth(),n=CV.getHeight();if(CV.css({transform:"rotate("+nowRotate+"deg)","-ms-transform":"rotate("+nowRotate+"deg)","-moz-transform":"rotate("+nowRotate+"deg)","-webkit-transform":"rotate("+nowRotate+"deg)","-o-transform":"rotate("+nowRotate+"deg)",width:nowZoom+"%",height:nowZoom+"%"}),0!=nowRotate&&180!=nowRotate){if(n>e&&a>t)return void(n/e>a/t?CV.css({height:nowZoom+"%",width:t+"px"}):CV.css({width:nowZoom+"%",height:e+"px"}));if(nt?CV.css({height:nowZoom+"%",width:t+"px"}):n/a>=e/t?CV.css({width:nowZoom+"%",height:e+"px"}):CV.css({height:nowZoom+"%",width:t+"px"}));if(n>=e&&a<=t)return void CV.css({width:nowZoom+"%",height:e+"px"});a>=t&&nC.bar.getHeight()&&(d-=getBarHeight()-C.bar.getHeight()),l=i>s?n.left-r.left-.5*(i-s):n.left-r.left+.5*(s-i),"left"==a&&(l=n.left-r.left-i,d=n.top-r.top),isUndefined(t)||(l=t.x-r.left-.5*i),l<0&&(l=0),d<0&&(d=0),l>CM.getWidth()-i&&(l=CM.getWidth()-i),d>CM.getHeight()-o&&(d=CM.getHeight()-o),C.tip.css({left:l+"px",top:d-parseInt(C.tip.css("margin-bottom"))+"px"})},progressDragX=function(){var e=C.bar.pbox.bg,t=C.bar.pbox.play,a=C.bar.pbox.slider,n=C.bar.pbox.mouseLine;a.unbind(),e.unbind();var r=0,i=0,o=$(document),s=0,l=function(t){if(t.preventDefault&&t.preventDefault(),vars.timeScheduleAdjust){t=t||window.event;var n=a.offset(),r=e.offset(),c=getClient(t);pSliderMouseDown=!0,i=c.x;var p=n.left-r.left;s=p*duration/(e.getWidth()-a.getWidth()),a.removeListener("mousedown",l),a.removeListener("touchstart",l),o.mousemove(d),o.mouseup(u),a.touchmove(d),a.touchend(u),noScrolling(!0)}},d=function(n){n=n||window.event;var o=a.offset(),l=e.offset(),d=getClient(n);pSliderMouseDown=!0,r=i-d.x,i=d.x;var u=o.left-r-l.left;u<0&&(u=0),u>e.getWidth()-a.getWidth()&&(u=e.getWidth()-a.getWidth()),C.bar.pbox.addClass("ck-bar-progress-slider-move");var c="";if(vars.live)c=formatLiveTime(u*getLiveTime()/(e.getWidth()-a.getWidth()));else{switch(c=u*duration/(e.getWidth()-a.getWidth()),vars.timeScheduleAdjust){case 2:cs)return u=-1e3,void message(language.timeScheduleAdjust.prohibitForward);break;case 4:if(cmaxSeeTime)return u=-1e3,player.seek(maxSeeTime),void message(language.timeScheduleAdjust.prohibitForwardNotViewed)}c=formatSeconds(c)}tip(a,c),u>=0?(a.css({left:u+"px"}),t.css({width:u+.5*a.getWidth()+"px"})):pSliderMouseDown=!1},u=function(){if(noScrolling(),o.removeListener("mousemove",d),o.removeListener("mouseup",u),a.removeListener("touchmove",d),a.removeListener("touchend",u),a.mousedown(l),a.touchstart(l),vars.live){var n=parseInt(vars.live+t.getWidth()*getLiveTime()/(e.getWidth()-.5*a.getWidth()));eventTarget("playback",{time:n,date:date("Y-m-d H:i:s",n)}),eventTarget("seek",{time:n,state:"seeking",date:date("Y-m-d H:i:s",n)})}else{var r=t.getWidth()*duration/(e.getWidth()-.5*a.getWidth());r>duration&&(r=duration),seekTime=0,player.seek(r)}C.bar.pbox.removeClass("ck-bar-progress-slider-move"),c&&tip()},c=!0;a.mousedown(l),a.mouseover(function(){var t="";t=vars.live?language.live:formatSeconds(parseInt(a.css("left"))*duration/(e.getWidth()-a.getWidth())),c=!1,tip(a,t)}),a.mouseleave(function(){c=!0}),a.touchstart(l);var p=null,v=(p=null,function(){p&&(clearTimeout(p),p=null),closeTipFun()});e.mousedown(function(n){n=n||window.event;var r=getClient(n),i=e.offset(),o=r.x-i.left;if(CT.full&&(o+=CK.offset().left),vars.live){var s=parseInt(vars.live+getLiveTime()*o/e.getWidth());eventTarget("playback",{time:s,date:date("Y-m-d H:i:s",s)}),eventTarget("seek",{time:s,state:"seeking",date:date("Y-m-d H:i:s",s)})}else{var l=duration*o/e.getWidth();switch(vars.timeScheduleAdjust){case 0:return void message(language.timeScheduleAdjust.prohibit);case 2:if(loldTime)return void message(language.timeScheduleAdjust.prohibitForward);break;case 4:if(lmaxSeeTime)return void message(language.timeScheduleAdjust.prohibitForwardNotViewed)}seekTime=0,player.seek(l)}o>e.getWidth()-.5*a.getWidth()&&(o=e.getWidth()-.5*a.getWidth()),o<.5*a.getWidth()&&(o=.5*a.getWidth()),pSliderMouseDown=!0,t.css({width:o+"px"}),a.css({left:o-.5*a.getWidth()+"px"})}),e.mousemove(function(t){t=t||window.event;var a=getClient(t),r=e.offset(),i=a.x-r.left;v(),CT.full&&(i+=CK.offset().left);var o=0;vars.live?o=formatLiveTime(getLiveTime()*i/e.getWidth()):(o=duration*i/e.getWidth(),showPreview(o),o=formatSeconds(o)),tip(e,o,a),n.css({left:i-.5*C.bar.pbox.mouseLine.getWidth()+"px"})}),e.mouseout(function(e){v(),p=setTimeout(function(){showPreview(-1)},30)}),n.mouseover(v)},volumeDragY=function(){var e=C.bar.vbox.volume.box,t=C.bar.vbox.volume.bg,a=C.bar.vbox.volume.pp,n=C.bar.vbox.volume.slider,r=$(document),i=0,o=0,s=function(e){e.preventDefault&&e.preventDefault(),noScrolling(!0),e=e||window.event;var t=getClient(e);o=t.y,n.removeListener("mousedown",s),n.removeListener("touchstart",s),C.bar.vbox.mouseDown=!0,r.mousemove(l),r.mouseup(d),n.touchmove(l),n.touchend(d)},l=function(r){r=r||window.event;var s=getClient(r),l=n.offset(),d=e.offset(),u=t.offset();i=s.y-o,o=s.y;var c=l.top-d.top+i,p=u.top-d.top,v=u.top+t.getHeight()-d.top-n.getHeight();cv&&(c=v),n.css({top:c+"px"});var f=c-p+.5*n.getHeight();a.css({"margin-top":f+"px"});var m=(t.getHeight()-f-.5*n.getHeight())/(t.getHeight()-n.getHeight());player.volume(m)},d=function(){noScrolling(),r.removeListener("mousemove",l),r.removeListener("mouseup",d),n.removeListener("touchmove",l),n.removeListener("touchend",d),n.mousedown(s),n.touchstart(s),C.bar.vbox.mouseDown=!1};n.mousedown(s),n.touchstart(s);t.mousedown(function(e){e=e||window.event;var a=getClient(e),n=t.offset(),r=1-(a.y-n.top)/t.getHeight();player.volume(r)})},changeProgress=function(e){if(!("boolean"==valType(vars.live)&&vars.live||pSliderMouseDown)){var t=C.bar.pbox.bg,a=C.bar.pbox.slider,n=e/duration*100;"number"==valType(vars.live)&&(n="100"),C.bar.pbox.play.css({width:n+"%"});var r=a.getWidth()/t.getWidth()*100,i=n-.5*r;i<0&&(i=0),i>100-r&&(i=100-r),C.bar.pbox.slider.css({left:i+"%"}),checkProgressSlider()}},checkProgressSlider=function(){var e=C.bar.pbox.bg,t=C.bar.pbox.slider,a=0;C.bar.pbox.css("transition-duration")&&(a=1e3*parseFloat(C.bar.pbox.css("transition-duration"))+20);setTimeout(function(){var a=parseInt(C.bar.pbox.slider.css("left"));a<0&&(a=0,C.bar.pbox.slider.css({left:a+"px"})),a>e.getWidth()-t.getWidth()&&(a=e.getWidth()-t.getWidth(),C.bar.pbox.slider.css({left:a+"px"}))},a)},changeTopTime=function(){C.topBar.timeEle.htm(date("H:i:s")),setTimeout(changeTopTime,1e3)},changeVolumeSlider=function(e){if(!isUndefined(C.bar.vbox)){var t=C.bar.vbox.volume.box,a=C.bar.vbox.volume.bg,n=C.bar.vbox.volume.pp,r=C.bar.vbox.volume.slider;C.bar.vbox.volume.txt.htm(parseInt(100*e));var i=a.getHeight();if(i){var o=i-e*i;n.css({"margin-top":o+"px"});var s=a.offset().top-t.offset().top+o-.5*r.getHeight();r.css({top:s+"px"})}}},changeLoad=function(){if(video){var e=video.buffered.length;if(e>0){var t=video.buffered.end(e-1);loadTime=1e3&&(t+=a,i(e),e=0),n(r)},i=function(e){e!=CT.fps&&(CT.fps=e,replaceInformation("fps",e),eventTarget("fps",e))};isUndefined(CT.fps)&&(CT.fps=0),r()},getElement=function(e){var t=$(e);if(!isUndefined(t))return"htmlarray"==valType(t)&&(t=t[0]),isUndefined(t.captureParentNode)&&(t.captureParentNode=t.parentNode,t.prevElement=t.prev(),t.nextElement=t.next()),t},$=function(e,t){var a=null;document&&(a=document),isUndefined(t)||(a=t);var n=[];if(e)if("htmlobject"==valType(e)||"object"==valType(e)){if(!isUndefined((n=e).moeplayer))return n}else if("string"==valType(e)&&""!=e)switch(e.substr(0,1)){case".":if(e=e.substr(1,e.length),a.getElementsByClassName){if(!(n=a.getElementsByClassName(e)).length)return null}else if(!a&&document.getElementsByClassName){if(!(n=document.getElementsByClassName(e)).length)return null}else{var r=new RegExp(" "+e+" ","i"),i=null;i=a.getElementsByTagName?a.getElementsByTagName("*"):document.getElementsByTagName("*");for(var o=0;o1&&(n=t[1].substr(0,1).toLocaleUpperCase()+t[1].substr(1,t[1].length-1)),t.length>2&&(n=t[2].substr(0,1).toLocaleUpperCase()+t[2].substr(1,t[2].length-1)),a+n+""}return e};if(isUndefined(t)){if(!isUndefined(e)&&"string"==valType(e))return this.currentStyle?this.currentStyle[e]:document.defaultView.getComputedStyle(this,null)[e];if(isUndefined(e))return this.currentStyle?this.currentStyle:document.defaultView.getComputedStyle(this,null)}if("object"!=valType(e)){var n=a(e);if(this.length>1)for(var r=0;r=e+1?this[e]:null};for(o=0;o=20.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz",
+ "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz",
+ "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz",
+ "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz",
+ "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz",
+ "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz",
+ "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz",
+ "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz",
+ "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz",
+ "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz",
+ "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz",
+ "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz",
+ "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz",
+ "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz",
+ "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz",
+ "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz",
+ "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz",
+ "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz",
+ "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz",
+ "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz",
+ "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz",
+ "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz",
+ "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz",
+ "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz",
+ "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz",
+ "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/acorn": {
"version": "8.17.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
@@ -110,6 +530,21 @@
"webworkify-webpack": "^2.1.5"
}
},
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/hls.js": {
"version": "1.6.16",
"resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.16.tgz",
@@ -126,6 +561,71 @@
"webworkify-webpack": "github:xqq/webworkify-webpack"
}
},
+ "node_modules/rollup": {
+ "version": "4.62.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz",
+ "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.9"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.62.2",
+ "@rollup/rollup-android-arm64": "4.62.2",
+ "@rollup/rollup-darwin-arm64": "4.62.2",
+ "@rollup/rollup-darwin-x64": "4.62.2",
+ "@rollup/rollup-freebsd-arm64": "4.62.2",
+ "@rollup/rollup-freebsd-x64": "4.62.2",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.62.2",
+ "@rollup/rollup-linux-arm-musleabihf": "4.62.2",
+ "@rollup/rollup-linux-arm64-gnu": "4.62.2",
+ "@rollup/rollup-linux-arm64-musl": "4.62.2",
+ "@rollup/rollup-linux-loong64-gnu": "4.62.2",
+ "@rollup/rollup-linux-loong64-musl": "4.62.2",
+ "@rollup/rollup-linux-ppc64-gnu": "4.62.2",
+ "@rollup/rollup-linux-ppc64-musl": "4.62.2",
+ "@rollup/rollup-linux-riscv64-gnu": "4.62.2",
+ "@rollup/rollup-linux-riscv64-musl": "4.62.2",
+ "@rollup/rollup-linux-s390x-gnu": "4.62.2",
+ "@rollup/rollup-linux-x64-gnu": "4.62.2",
+ "@rollup/rollup-linux-x64-musl": "4.62.2",
+ "@rollup/rollup-openbsd-x64": "4.62.2",
+ "@rollup/rollup-openharmony-arm64": "4.62.2",
+ "@rollup/rollup-win32-arm64-msvc": "4.62.2",
+ "@rollup/rollup-win32-ia32-msvc": "4.62.2",
+ "@rollup/rollup-win32-x64-gnu": "4.62.2",
+ "@rollup/rollup-win32-x64-msvc": "4.62.2",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "7.0.7",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.7.tgz",
+ "integrity": "sha512-YAy8Od6KV+uuwUuU50np8fGB/Aues6Y0nAhA9y/hId74PlKUcme4pXcBD46NWKr1Q4osN/iseZ17YqO1XfmI8g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/smob": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.2.tgz",
+ "integrity": "sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
diff --git a/package.json b/package.json
index 87f355c..9be1380 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"description": "一款中文友好的网页视频播放器(fork 自 ckplayer X3),支持 mp4/flv/m3u8/ts,可搭配 Moodle media 插件使用",
"license": "MIT",
"scripts": {
- "build": "node scripts/build.js"
+ "build": "rollup -c && node scripts/copy-libs.js"
},
"dependencies": {
"flv.js": "^1.6.2",
@@ -12,6 +12,7 @@
"mpegts.js": "^1.8.0"
},
"devDependencies": {
- "terser": "^5.0.0"
+ "@rollup/plugin-terser": "^1.0.0",
+ "rollup": "^4.62.2"
}
}
diff --git a/rollup.config.js b/rollup.config.js
new file mode 100644
index 0000000..6d0b376
--- /dev/null
+++ b/rollup.config.js
@@ -0,0 +1,49 @@
+/*
+ * rollup 构建配置
+ * 功能:把 src/ 下的 ES Module 打包成与旧版等价的 UMD 产物
+ * 1. moeplayer/js/moeplayer.js —— 未压缩版
+ * 2. moeplayer/js/moeplayer.min.js —— terser 压缩版(保留版权注释)
+ * 运行时依赖(hls.js/flv.js/mpegts.js)的拷贝由 scripts/copy-libs.js 完成
+ * 用法:npm run build
+ */
+import terser from '@rollup/plugin-terser';
+
+// 产物头部版权注释(与 src/index.js 顶部一致)
+const banner = `/*
+ * 软件名称:MoePlayer
+ * 版本:X3
+ * 版权:MoePlayer 项目(fork 自 ckplayer, www.ckplayer.com)
+ * 开源协议:MIT
+ */`;
+
+const outputBase = {
+ format: 'umd',
+ name: 'MoePlayer',
+ // 仅导出 moeplayerEmbed 函数本身,与旧 UMD 的 module.exports = factory() 行为一致
+ exports: 'default',
+ banner
+};
+
+export default {
+ input: 'src/index.js',
+ // 关闭 tree-shaking:完整保留所有工具函数(含暂未被引用的),与旧单文件内容一致
+ treeshake: false,
+ output: [
+ {
+ ...outputBase,
+ file: 'moeplayer/js/moeplayer.js'
+ },
+ {
+ ...outputBase,
+ file: 'moeplayer/js/moeplayer.min.js',
+ plugins: [
+ terser({
+ format: {
+ // 保留文件头部的版权注释
+ comments: /^!|软件名称|版权/
+ }
+ })
+ ]
+ }
+ ]
+};
diff --git a/scripts/build.js b/scripts/copy-libs.js
similarity index 59%
rename from scripts/build.js
rename to scripts/copy-libs.js
index 35850c1..283afee 100644
--- a/scripts/build.js
+++ b/scripts/copy-libs.js
@@ -1,14 +1,12 @@
/*
- * 构建脚本
- * 功能:
- * 1. 使用 terser 将 moeplayer/js/moeplayer.js 压缩为 moeplayer.min.js
- * 2. 从 node_modules 拷贝运行时依赖(hls.js/flv.js/mpegts.js)到 moeplayer/ 对应目录
+ * 构建脚本(第二步)
+ * 功能:从 node_modules 拷贝运行时依赖(hls.js/flv.js/mpegts.js)到 moeplayer/ 对应目录
* 播放器运行时会按需动态加载这些文件,目录结构需与 getPath() 的约定保持一致
- * 用法:npm run build
+ * 第一步(rollup 打包压缩)见 rollup.config.js
+ * 用法:npm run build(即 rollup -c && node scripts/copy-libs.js)
*/
const fs = require('fs');
const path = require('path');
-const terser = require('terser');
const root = path.resolve(__dirname, '..');
@@ -19,23 +17,6 @@ const libs = [
['mpegts.js', 'mpegts.js', ['mpegts.js', 'mpegts.js.map', 'LICENSE']]
];
-async function minifyCore() {
- const src = path.join(root, 'moeplayer/js/moeplayer.js');
- const dist = path.join(root, 'moeplayer/js/moeplayer.min.js');
- const code = fs.readFileSync(src, 'utf8');
- const result = await terser.minify(code, {
- output: {
- // 保留文件头部的版权注释
- comments: /^!|软件名称|版权/
- }
- });
- if (result.error) {
- throw result.error;
- }
- fs.writeFileSync(dist, result.code, 'utf8');
- console.log('压缩完成: moeplayer/js/moeplayer.min.js (' + result.code.length + ' bytes)');
-}
-
function copyLibs() {
for (const [pkg, dir, files] of libs) {
const pkgRoot = path.dirname(require.resolve(pkg + '/package.json'));
@@ -55,11 +36,10 @@ function copyLibs() {
}
}
-(async () => {
- await minifyCore();
+try {
copyLibs();
- console.log('构建完成');
-})().catch(err => {
- console.error('构建失败:', err);
+ console.log('依赖拷贝完成');
+} catch (err) {
+ console.error('拷贝失败:', err);
process.exit(1);
-});
+}
diff --git a/src/core/moeplayerEmbed.js b/src/core/moeplayerEmbed.js
new file mode 100644
index 0000000..41cf00a
--- /dev/null
+++ b/src/core/moeplayerEmbed.js
@@ -0,0 +1,6484 @@
+import { language as languageDefault } from '../language.js';
+import { videoObjectDefault } from '../defaults.js';
+import { ajax, dataURLtoBlob, getApp } from '../utils/net.js';
+import { documentReady, checkJs, getMaxZIndex, getWindowSize, prev, next, addListener, removeListener, documentHidden } from '../utils/dom.js';
+import { formatSeconds, date, arrayToString, stringToArray } from '../utils/format.js';
+import { standardization, mergeObj, valType, isUndefined, decodeURIString } from '../utils/type.js';
+import { cookie } from '../utils/cookie.js';
+import { getPath } from '../utils/path.js';
+
+var language = languageDefault;
+
+ function moeplayerEmbed(videoObj){
+ /*
+ * rightMenu
+ * 功能:全局变量,右键内容
+ * 初始化设置menu可替换该变量内容
+ */
+ var rightMenu=[
+ {
+ title:'MoePlayer'
+ },
+ {
+ title:'version:X3',
+ underline:true
+ },
+ {
+ title:'about',
+ click:'aboutShow'
+ }
+ ];
+ var vars={},varsTemp={};//保存传递过来的videoObject
+ var video=null;//视频播放器对象
+ var duration=0;//总时间
+ var mutedState='';//默认静音状态
+ var recoveryVolume=false;//是否需要在播放时恢复音量
+ var waited=true;//是否缓冲结束
+ var paused=true;//默认暂停状态
+ var loadTime=0;//已加载部分
+ var seekTime=0;//需要跳转的时间,初次播放以及切换清晰度后会用该变量记录需要seek的时间
+ var oldTime=0,playTime=0,firstSeekTime=-1,maxSeeTime=0;//oldTime=记录上次播放时间,playTime=当前播放时间,firstSeekTime=记录第一次拖动的时间,maxSeeTime=看过的最大时间
+ var isChangeDef=true;//是否需要重置清晰度
+ var playType='';//播放类别,默认='',是通过api接口播放,='button'则判定是通过点击按钮播放
+ var msgSetTime=null,tipSetTime=null,mouseSetTime=null;//用于显示提示后自动隐藏的计时器
+ var adFrontSetTime=null,adPauseSetTime=null;//贴片广告和暂停广告的计时器
+ var closeTipFun=null;//关闭提示的函数
+ var closeTipMouseOut=null;//鼠标离开节点时执行的函数
+ var waitingMessage=true;//显示缓冲提示
+ var hidePreviewSetTime=null;//隐藏预览图的计时器
+ var pSliderMouseDown=false;//判断是否在进度条上的滑块上按下
+ var playbackTime=0;//记录回放时间
+ var loadedmetadataNum=0;//记录元数据加载成功次数,记录视频播放数量
+ var screenshotImg=null;//记录最新一张截图
+ var ad=null;//广告对象
+ var frontAdPlay=false,pauseAdPlay=false;//贴片广告是否播放,暂停广告是否播放
+ var barShow=true,rightBarShow=true;
+ var EventTarget=null,newEvent=null,eventTargetList=null;//注册监听
+ var loadedTrack=false;//默认未加载字幕
+ var C={};//保存播放器界面上的所有节点
+ var CT=null,CK=null,CM=null,CV=null;//CT=播放器容器,页面中已存的,CT>CK>CM>CV>video
+ var pugPlayer=null;//插件播放器
+ var hls=null;//播放hls
+ var loadMeta=true;//第一次加载到元数据
+ var app='';//平台类型
+ var nowRotate=0;//当前视频旋转角度
+ var nowZoom=100;//当前缩放比例
+ var smallWindowsState=false;//当前是否处理小窗口状态
+ var isDrag=false;//是否在播放器上按下并且拖动
+ var moeplayerCookie='moeplayer-player-cookie';
+ var cookieName='';//cookie名称
+ var cookieTime=0;//cookie保存时间,单位:秒
+ var cookieArray=[];//保存当前所有记录
+ var focusPause=true;//失去焦点前是否是暂停状态
+ var existenceObj=false;//是否使用源码里已有的dom
+ /*
+ * into
+ * 功能:初始化,调用播放器则首先调用该函数
+ * @obj=初始化时的配置对象:videoObject
+ */
+ var into=function(obj){
+ /*
+ * 如果未传递初始化配置对象,则为player变量增加一个add函数,功能相当于into
+ */
+ if(isUndefined(obj)){
+ player.add=player.into=into;
+ return player;
+ }
+ /*
+ * 转码默认语言包
+ */
+ language=decodeURIString(language);
+ /*
+ * 检查是否在顶部引入了外部语言包文件,如果引入了,则使用外部语言包替换进language变量
+ */
+ if(!isUndefined(window.moeplayerLanguage)){
+ language=mergeObj(language,window.moeplayerLanguage);
+ }
+ /*
+ * 初始化注册事件函数,该函数的作用是将所有相关的事件都注册进一个变量newEvent
+ * newEvent是提供给播放器外部监听函数使用的,如监听时间player.time(function(t){console.log('已播放:'+t);});
+ */
+ eventTarget();
+ /*
+ * 监听页面标签状态(判断是否失去焦点)
+ */
+ documentHidden(function(state){
+ eventTarget('visibilityState',state);
+ });
+ /*
+ * 判断平台类型,主要是判断是否是iphone类型的平台
+ */
+ app=getApp();
+ /*
+ * 简单复制一下初始化时的默认配置
+ */
+ varsTemp={};
+ for(var key in videoObjectDefault){
+ varsTemp[key]=videoObjectDefault[key];
+ }
+ /*
+ * 如果初始化配置是字符串并且是以website:开头或url:开头的,则认为需要请求一个json文件来获取配置
+ */
+ if(valType(obj)=='string' && (obj.substr(0,8)=='website:' || obj.substr(0,4)=='url:')){
+ var ajaxUrl='';
+ if(obj.substr(0,8)=='website:'){
+ ajaxUrl=obj.substring(8);
+ }
+ if(obj.substr(0,4)=='url:'){
+ ajaxUrl=obj.substring(4);
+ }
+ ajax({url:ajaxUrl,success:function(data){
+ if(data){
+ return into(data);
+ }
+ else{
+ showWindowsError(language['error']['ajax']+',url:'+ajaxUrl);
+ return null;
+ }
+ }});
+ }
+ /*
+ * 如果初始化配置是一个object,则进行下面的操作
+ */
+ else if(valType(obj)=='object'){
+ varsTemp = standardization(varsTemp, obj);//将obj合并到varsTemp对象里
+ if(!isUndefined(obj['container']) && obj['container']){
+ CT=$(obj['container']);
+ if(CT){//如果播放容器存在,则调用语言判断函数
+ return loadLanguage(obj);
+ }
+ else{//如果播放容器不存在,则则等页面加载完成后运行
+ return bodyReady(obj);
+ }
+ }
+ else{//不存在播放容器配置则等页面加载完成后运行
+ return bodyReady(obj);
+ }
+ }
+ else{
+ showWindowsError(language['error']['noVideoContainer']);
+ return null;
+ }
+ },
+ /*
+ * bodyReady
+ * 功能:页面加载完成后构建播放器
+ * @obj=初始化时的配置对象
+ */
+ bodyReady=function (obj){
+ documentReady(function(){
+ if(!isUndefined(obj['container'])){
+ CT=$(obj['container']);
+ if(CT){//如果播放容器存在,则调用语言判断函数
+ return loadLanguage(obj);
+ }
+ else{
+ showWindowsError(language['error']['noVideoContainer']);
+ return null;
+ }
+ }
+ else{//不存在播放容器则重新判断
+ return ajaxWebsite(obj);
+ }
+ });
+ return null;
+ },
+ /*
+ * ajaxWebsite
+ * 功能:页面加载完成后重新初始化
+ * @obj=初始化时的配置对象
+ */
+ ajaxWebsite=function (obj){
+ if(valType(obj['video'])=='string' && (obj['video'].substr(0,8)=='website:' || obj['video'].substr(0,4)=='url:')){
+ varsTemp = standardization(varsTemp, obj);
+ var ajaxUrl='';
+ if(obj['video'].substr(0,8)=='website:'){
+ ajaxUrl=obj['video'].substring(8);
+ }
+ if(obj['video'].substr(0,4)=='url:'){
+ ajaxUrl=obj['video'].substring(4);
+ }
+ ajax({url:ajaxUrl,success:function(data){
+ if(data){
+ return into(data);
+ }
+ else{
+ showWindowsError(language['error']['ajax']+',url:'+ajaxUrl);
+ return null;
+ }
+ }});
+ }
+ else{
+ showWindowsError(language['error']['noVideoContainer']);
+ return null;
+ }
+ },
+ /*
+ * loadLanguage
+ * 功能:加载Language
+ * @obj=初始化时的配置对象
+ */
+ loadLanguage=function (obj){
+ vars = standardization(varsTemp, obj);
+ if(vars['language']){
+ var path=getPath('language')+vars['language']+'.js';
+ loadJs(path,function(){
+ if(!isUndefined(window['moeplayerLanguage'])){
+ language=mergeObj(language,window['moeplayerLanguage']);
+ }
+ return embed(obj);
+ });
+ }
+ else{
+ return embed(obj);
+ }
+ },
+ /*
+ * embed
+ * 功能:构建播放器
+ * @obj=初始化时的配置对象
+ */
+ embed=function (obj){
+ /*
+ * 判断静音状态
+ */
+ mutedState=vars['volume']>0?false:true;
+ if(!isUndefined(CT) && CT!=null){
+ if(valType(CT)=='htmlarray'){
+ CT=CT.eq(0);
+ }
+ }
+ else{
+ return null;
+ }
+ /*
+ * 注册获取fps的函数
+ */
+ calculationFps();
+ /*
+ * 如果video指向一个已存在的video标签对象
+ */
+ existenceObj=valType(vars['video'])=='string' && ((vars['video'].substr(0,1)=='.' && vars['video'].indexOf('/')==-1) || vars['video'].substr(0,1)=='#');
+ /*
+ * 清空容器
+ */
+ if(existenceObj){
+ CK=CT.find('.moeplayer')?CT.find('.moeplayer').eq(0):null;
+ if(CK){
+ CM=CK.find('.ck-main')?CK.find('.ck-main').eq(0):null;
+ }
+ if(CM){
+ CV=CM.find('.ck-video')?CM.find('.ck-video').eq(0):null;
+ }
+ }
+ if(!CK || !CM || !CV){
+ CT.htm('');
+ /*
+ * 在播放容器里新建一个总的容器
+ */
+ CK=createlDiv('moeplayer');
+ CT.append(CK);
+ /*
+ * 在总容器里再新建一个容器
+ */
+ CM=createlDiv('ck-main');
+ CK.append(CM);
+ /*
+ * 新建一个放置video标签的容器
+ */
+ CV=createlDiv('ck-video');
+ CM.append(CV);
+ }
+ /*
+ * 如果已存在video.则先设置成空
+ */
+ if(video){
+ video.remove();
+ video=null;
+ }
+ /*
+ * 如果video指向一个已存在的video标签对象,则直接调用该对象
+ */
+ if(existenceObj){
+ video=$(vars['video'])?$(vars['video']).eq(0):null;
+ }
+ /*
+ * 新建一个video标签
+ */
+ if(!video){
+ video = createlVideo();
+ video.attr('width','100%').attr('height','100%');
+ CV.append(video);
+ }
+ video.volume=vars['volume'];
+ if(vars['autoplay']){
+ player.volume(0);
+ player.muted();
+ recoveryVolume=true;
+ video.attr('autoplay','autoplay');
+ paused=false;
+ }
+ else{
+ video.attr('preload','metadata');
+ }
+ CT.loop=vars['loop'];
+ if(CT.loop){
+ video.attr('loop','loop');
+ }
+ if(vars['controls']){
+ video.controls=true;
+ }
+ else{
+ video.controls=false;
+ }
+ try{
+ if(!existenceObj){
+ video.attr('controlslist','nodownload');
+ video.attr('x-webkit-airplay','true');
+ video.attr('x5-video-orientation','portraint');
+ video.attr('playsinline','true');
+ video.attr('webkit-playsinline','true');
+ video.attr('x5-playsinline','true');
+ }
+ if(vars['crossOrigin']){
+ video.useCORS=true;//解决跨域
+ video.crossOrigin=vars['crossOrigin'];//解决跨域
+ }
+ }
+ catch(event){}
+ /*
+ * 默认设置支持小窗口模式
+ */
+ CT.smallWindows=true;
+ /*
+ * 默认设置不显示页面全屏按钮
+ */
+ CT.webFull=false;
+ /*
+ * 默认设置不显示剧场模式按钮
+ */
+ CT.theatre=false;
+ /*
+ * 加载播放器界面
+ */
+ loadFace();
+ /*
+ * 判断是否需要默认旋转视频
+ */
+ if(vars['rotate']>0){
+ player.rotate(vars['rotate']);
+ }
+ /*
+ * 判断是否需要默认缩放视频
+ */
+ if(vars['zoom']>0){
+ player.zoom(vars['zoom']);
+ }
+ /*
+ * 判断是否支持video标签
+ */
+ if(isUndefined(video.canPlayType)){
+ CT.error={code:5,message:language['error']['supportVideoError']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ return player;
+ }
+ /*
+ * 注册视频播放器内部监听,监听到事件后注册给CT使用
+ */
+ addAllListener();
+ /*
+ * 如果需要在视频播放器加载成功后调用相关函数,此时则开始调用
+ */
+ if(!isUndefined(vars['loaded'])){
+ if(valType(vars['loaded'])=='function'){
+ try{
+ vars['loaded'](player);
+ }
+ catch(event){}
+ }
+ else if(valType(vars['loaded'])=='string'){
+ try{
+ eval(vars['loaded']+ '(player)');
+ }
+ catch(event){}
+ }
+ }
+ /*
+ * 播放视频
+ */
+ if(!existenceObj){
+ changeVideo(vars['video']);
+ }
+ else{
+ changeVideo(video.attr('src'));
+ }
+ /*
+ * 返回 播放器
+ */
+ return player;
+ },
+ /*
+ * changeVideo
+ * 功能:初始化视频地址或修改视频地址
+ */
+ changeVideo=function (vstr){
+ var i=0;
+ if(video.attr('src') || video.htm()){
+ player.pause();
+ }
+ if(video.attr('src') && !existenceObj){
+ video.attr('src','');
+ video.removeAttr('src');
+ }
+ if(!isUndefined(video.textTracks) && video.textTracks.length>0){
+ for(i=video.find('track').length-1;i>-1;i--){
+ video.find('track').eq(i).remove();
+ }
+ }
+ if(!existenceObj){
+ video.htm('');
+ }
+ if(!isUndefined(vars['ad'])){
+ ad=vars['ad'];
+ }
+ var source='';
+ if(valType(vstr)=='string'){
+ if(vstr.substr(0,8)=='website:' || vstr.substr(0,4)=='url:'){
+ var ajaxUrl='';
+ if(vstr.substr(0,8)=='website:'){
+ ajaxUrl=vstr.substring(8);
+ }
+ if(vstr.substr(0,4)=='url:'){
+ ajaxUrl=vstr.substring(4);
+ }
+ ajax({url:ajaxUrl,success:function(data){
+ if(data!=null){
+ vars = standardization(varsTemp, data);
+ changeVideo(vars['video']);
+ }
+ else{
+ CT.error={code:8,message:language['error']['ajax']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ }
+ }});
+ return;
+ }
+ else{
+ if(vars['plug'] && !canPlay(vstr)){
+ plugPlayer(vstr);
+ }
+ else{
+ if(!existenceObj){
+ video.attr('src',vstr);
+ }
+ }
+ loadTrack();
+ }
+ }
+ else if(valType(vstr)=='array'){
+ for(i=0;i1){
+ source += '';
+ }
+ }
+ }
+ }
+ if(source){
+ video.htm(source);
+ }
+ loadTrack();
+ }
+ else if(valType(vstr)=='object'){
+ if(vars['plug']){
+ plugPlayer(vstr);
+ }
+ else{
+ CT.error={code:10,message:language['error']['emptied']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ }
+ loadTrack();
+ }
+ if(!isUndefined(video.find('source')) && video.find('source').length>0){
+ video.find('source').eq(video.find('source').length-1).addListener('error',videoHandler.error);
+ }
+ checkBar();
+ loadLogo();
+ if(isChangeDef){
+ checkDefinition();
+ }
+ /*
+ * 对cookie进行相关分析
+ */
+ if(vars['cookie']){
+ if(valType(vars['cookie'])=='array' && vars['cookie'].length>=2){
+ if(vars['cookie'][0] && valType(vars['cookie'][0])=='string'){
+ cookieName=vars['cookie'][0];
+ }
+ if(vars['cookie'][1] && valType(vars['cookie'][1])=='number'){
+ cookieTime=vars['cookie'][1];
+ }
+ }
+ if(valType(vars['cookie'])=='object' && !isUndefined(vars['cookie']['name'])){
+ cookieName=vars['cookie']['name'];
+ if(!isUndefined(vars['cookie']['hour']) && valType(vars['cookie']['hour'])=='number'){
+ cookieTime=vars['cookie']['hour'];
+ }
+ }
+ if(valType(vars['cookie'])=='string'){
+ cookieName=vars['cookie'];
+ }
+ if(cookieName){
+ cookieName=cookieName.replace(/[ ]*,[ ]*|[ ]+/g, '').replace(/[ ]*;[ ]*|[ ]+/g, '');
+ }
+ }
+ if(!isUndefined(vars['seek']) && !seekTime){
+ if(valType(vars['seek'])=='number' && vars['seek']>0){
+ seekTime=vars['seek'];
+ }
+ if(valType(vars['seek'])=='string' && vars['seek']=='cookie' && cookieName){
+ var cke=player.cookie(cookieName);
+ if(cke){
+ seekTime=cke['time'];
+ }
+
+ }
+ }
+ },
+ /*
+ * plugPlayer
+ * 功能:使用插件进行播放
+ */
+ plugPlayer=function (url){
+ switch(vars['plug']){
+ case 'hls.js':
+ hlsPlayer(url);
+ break;
+ case 'flv.js':
+ flvPlayer(url);
+ break;
+ case 'mpegts.js':
+ mpegtsPlayer(url);
+ break;
+ case 'dash.js':
+ dashPlayer(url);
+ break;
+ default:
+ if(valType(vars['plug'])=='function'){
+ vars['plug'](video,url);
+ }
+ else{
+ CT.error={code:10,message:language['error']['emptied']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ }
+
+ break;
+ }
+ },
+ /*
+ * hlsPlayer
+ * 功能:使用hls.js插件进行播放
+ */
+ hlsPlayer=function (url){
+ var path=getPath('hls.js')+'hls.min.js';
+ loadJs(path,function(){
+ if (!isUndefined(Hls) && Hls.isSupported()) {
+ hls = new Hls();
+ hls.loadSource(url);
+ hls.attachMedia(video);
+ hls.on(Hls.Events.ERROR, function(event, data){
+ var code=9;
+ var message=language['error']['loadingFailed'];
+ var fatal=data.fatal;
+ if(!isUndefined(data.response)){
+ if(!isUndefined(data.response.code)){
+ code=data.response.code;
+ }
+ if(!isUndefined(data.response.text) && data.response.text){
+ message=data.response.text;
+ }
+ else{
+ if(!isUndefined(event)){
+ message=event;
+ }
+ }
+ }
+ CT.error={code:code,message:message};
+ eventTarget('error',CT.error);//注册监听error
+ if(fatal){
+ showError();
+ }
+ });
+ }
+ else if(canPlay(url)){
+ video.attr('src',url);
+ }
+ });
+ },
+ /*
+ * flvPlayer
+ * 功能:使用flv.js插件进行播放
+ */
+ flvPlayer=function (url){
+ var path=getPath('flv.js')+'flv.min.js';
+ loadJs(path,function(){
+ if (typeof(flvjs)!='undefined' && !isUndefined(flvjs) && flvjs.isSupported()) {
+ var config={
+ type: 'flv',
+ url: url
+ };
+ if(valType(url)=='object'){
+ config=url;
+ }
+ if(vars['live']){
+ config['isLive']=true;
+ }
+ if(pugPlayer){
+ pugPlayer.pause();
+ pugPlayer.unload();
+ pugPlayer.detachMediaElement();
+ pugPlayer.destroy();
+ pugPlayer=null;
+ }
+ pugPlayer = flvjs.createPlayer(config);
+ pugPlayer.attachMediaElement(video);
+ pugPlayer.load();
+ pugPlayer.on(flvjs.Events.METADATA_ARRIVED, function(res){
+ videoHandler.loadedMetaData();
+ });
+ pugPlayer.on(flvjs.Events.ERROR, function(errorType, errorDetail, errorInfo){
+ CT.error={code:errorInfo['code'],message:errorInfo['msg']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ });
+ }
+ });
+ },
+ /*
+ * mpegtsPlayer
+ * 功能:使用mpegts.js插件进行播放
+ */
+ mpegtsPlayer=function (url){
+ var path=getPath('mpegts.js')+'mpegts.js';
+ loadJs(path,function(){
+ if (typeof(mpegts)!='undefined' && !isUndefined(mpegts) && mpegts.getFeatureList().mseLivePlayback) {
+ var config={
+ type: 'mse',
+ url: url
+ };
+ if(valType(url)=='object'){
+ config=url;
+ }
+ if(vars['live']){
+ config['isLive']=true;
+ }
+ if(pugPlayer){
+ pugPlayer.pause();
+ pugPlayer.unload();
+ pugPlayer.detachMediaElement();
+ pugPlayer.destroy();
+ pugPlayer=null;
+ }
+ pugPlayer = mpegts.createPlayer(config);
+ pugPlayer.attachMediaElement(video);
+ pugPlayer.load();
+
+ pugPlayer.on(mpegts.Events.METADATA_ARRIVED, function(res){
+ videoHandler.loadedMetaData();
+ });
+ pugPlayer.on(mpegts.Events.ERROR, function(errorType, errorDetail, errorInfo){
+ CT.error={code:errorInfo['code'],message:errorInfo['msg']};
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ });
+ }
+ });
+ },
+ /*
+ * canPlay
+ * 功能:判断是否能支持相关视频格式
+ */
+ canPlay=function(vStr,num){
+ var vTypeArr=[
+ {vidType:'video/ogg',codType:'theora, vorbis'},
+ {vidType:'video/mp4',codType:'avc1.4D401E, mp4a.40.2'},
+ {vidType:'video/mp4',codType:'avc1'},
+ {vidType:'video/mp4',codType:'hevc'},
+ {vidType:'video/webm',codType:'vp8.0, vorbis'},
+ {vidType:'video/webm',codType:'vp9'},
+ {vidType:'',codType:'application/x-mpegURL'},
+ {vidType:'',codType:'application/vnd.apple.mpegurl'}
+ ];
+ var vType={
+ ogg:vTypeArr[0],
+ mp4:[vTypeArr[1],vTypeArr[2],vTypeArr[3]],
+ webm:[vTypeArr[4],vTypeArr[5]],
+ m3u8:[vTypeArr[6],vTypeArr[7]]
+ };
+ var arr=[];
+ var k='';
+ var supportType=function(obj){
+ var vType=obj['vidType'];
+ var str='';
+ if(vType){
+ str=vType+'; '+ 'codecs="' + obj['codType'] + '"';
+ }
+ else{
+ str=obj['codType'];
+ }
+ var sup = video.canPlayType(str);
+ if(sup == '') {
+ sup = 'no';
+ }
+ return sup;
+ };
+ var getExtension=function(filepath) {
+ return filepath.replace(/.+\./, '');
+ };
+ if(isUndefined(num)){
+ if(valType(vStr)=='string'){
+ if(vars['type']){
+ for(k in vTypeArr){
+ if(vTypeArr[k]['vidType']==vars['type']){
+ arr.push(vTypeArr[k]);
+ }
+ }
+ }
+ else{
+ if(getExtension(vStr) && getExtension(vStr) in vType){
+ var temp=vType[getExtension(vStr)];
+ if(valType(temp)=='array'){
+ for(var i=0;i0){
+ for(var i=0;icTime && arr[i][0]!=cookieName && y<19){
+ tempArr.push(arr[i]);
+ y++;
+ }
+ }
+ arr=tempArr;
+ }
+ if(arr.length>0){
+ cookie(moeplayerCookie,'delete',vars['domain'],vars['cookiePath']);
+ cookie(moeplayerCookie,arrayToString(arr),vars['domain'],vars['cookiePath']);
+ }
+ cookieArray=arr;
+ },
+ /*
+ * loadTrack
+ * 功能:加载track
+ */
+ loadTrack=function(){
+ if(isUndefined(video.textTracks)){
+ return;
+ }
+ var i=0;
+ if(!isUndefined(vars['track']) && valType(vars['track'])=='array' && !video.find('track')){
+ var track='';
+ var arr=vars['track'];
+ C['bar']['track'].show();
+ for(i=0;i';
+ }
+ if(video){
+ var html=video.htm()+track;
+ video.htm(html);
+ }
+ if(video.find('track') && !loadedTrack){
+ loadedTrack=true;
+ checkTrack();
+ }
+ }
+ },
+ /*
+ * loadedMetaData
+ * 功能:获取元数据后执行的函数
+ */
+ loadedMetaData=function(){
+ eventTarget('loadedMetaData',{
+ width:CK.getWidth(),
+ height:CK.getHeight(),
+ videoWidth:CT.videoWidth,
+ videoHeight:CT.videoHeight,
+ duration:duration,
+ volume:CT.volume
+ });
+ eventTarget('duration',duration);
+ if('error' in C){
+ C['error'].hide();
+ }
+ replaceInformation('videoWidth',CT.videoWidth);
+ replaceInformation('videoHeight',CT.videoHeight);
+ replaceInformation('volume',parseInt(CT.volume*100));
+ replaceInformation('duration',parseInt(duration));
+ documentHidden(function(state){
+ if(vars['documentFocusPause']){
+ if(state=='show'){
+ if(!focusPause && paused){
+ player.play();
+ }
+ }
+ else{
+ focusPause=paused;
+ player.pause();
+ }
+ }
+ });
+ };
+ /*
+ * videoHandler
+ * 功能:视频播放对象video注册内部监听调用函数
+ */
+ var videoHandler={
+ loadStart:function(){
+ if(!vars['controls'] && app!='iphone'){
+ C['loading'].show();
+ }
+ C['centerPlay'].hide();
+ eventTarget('loadstart');
+
+ },
+ canPlay:function(){
+ C['loading'].hide();
+ eventTarget('canplay');
+ },
+ loadedData:function(){
+ eventTarget('loadeddata');
+ },
+ loadedMetaData:function(){
+ duration=this.duration;
+ if(!isUndefined(this.duration) && vars['duration']){
+ duration=vars['duration'];
+ }
+ if(!vars['live']){
+ C['time'].htm(formatSeconds(this.currentTime)+'/'+formatSeconds(duration));
+ C['tempTime'].htm(formatSeconds(this.currentTime)+'/'+formatSeconds(duration));
+ }
+ C['loading'].hide();
+ if(vars['poster']){
+ video.attr('poster',vars['poster']);
+ }
+ if(!vars['autoplay'] && !vars['controls']){
+ C['centerPlay'].show();
+ C['buffer'].hide();
+ }
+
+ CT.duration=duration;
+ CT.videoWidth=this.videoWidth;
+ CT.videoHeight=this.videoHeight;
+ CT.volume=this.volume;
+ if(CT.videoWidth || CT.videoHeight || duration){
+ loadedMetaData();
+ }
+ var len = 0;
+ if(!isUndefined(this.buffered)){
+ len=this.buffered.length;
+ }
+ if(len>0){
+ changeLoad();
+ }
+ if(!vars['live']){
+ changePreview(vars['preview']);//修改预览图片
+ }
+ else{
+ changePreview();//修改预览图片
+ }
+ if(!isUndefined(vars['prompt']) && valType(vars['prompt'])=='array' && !vars['live']){
+ changePrompt();
+ }
+ else{
+ deletePrompt();
+ }
+ if(isChangeDef){
+ checkDefinition();
+ isChangeDef=false;
+ }
+ pSliderMouseDown=false;
+ loadedmetadataNum++;
+ if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && ad['frontPlay'] && loadedmetadataNum>1){//如果是贴片广告播放中,则进行播放和计算
+ player.play();
+ calculationAdFrontTime(duration);//计算贴片广告的时间
+ }
+ if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && !ad['frontPlay']){//如果广告播放结束则播放正片
+ player.volume(vars['volume']);
+ player.play();
+ }
+ if(!vars['autoplay'] && loadMeta){
+ loadMeta=false;
+ player.pause();
+ setTimeout(player.pause,300);
+ }
+ },
+ timeUpDate:function(){//监听播放时间
+ if(!waited){
+ waited=true;
+ C['buffer'].hide();
+ eventTarget('buffer','end');
+ }
+ var len = this.buffered.length;
+ if(len>0){
+ changeLoad();
+ }
+ if(!duration && this.duration){
+ duration=this.duration;
+ CT.duration=duration;
+ CT.videoWidth=this.videoWidth;
+ CT.videoHeight=this.videoHeight;
+ if(CT.videoWidth || CT.videoHeight || duration){
+ loadedMetaData();
+ }
+ }
+ oldTime=playTime;
+ playTime=this.currentTime;
+ if(maxSeeTime1){//如果是贴片广告播放中,则进行播放
+ calculationAdFrontTime(duration-playTime);//计算贴片广告的时间
+ }
+ if(!isUndefined(C['error']) && C['error'].css('display')=='block'){
+ C['error'].hide();
+ }
+ if(cookieName){
+ changeCookie(playTime);
+ }
+ replaceInformation('audioDecodedByteCount',this.webkitAudioDecodedByteCount || this.audioDecodedByteCount || 0);
+ replaceInformation('videoDecodedByteCount',this.webkitVideoDecodedByteCount || this.videoDecodedByteCount || 0);
+ },
+ ended:function(){//监听播放结束
+ if(!isUndefined(ad) && !isUndefined(ad['frontPlay']) && ad['frontPlay']){//如果是贴片广告播放中,则用广告结束函数对此进行判断
+ adFrontEnded();
+ }
+ else{
+ C['bar']['playAndPause']['pause'].hide();
+ C['bar']['playAndPause']['play'].hide();
+ C['bar']['playAndPause']['refresh'].show();
+ eventTarget('ended');
+ showEnded();
+ message();
+ }
+ },
+ error:function(event){
+ if(!isUndefined(event.type)){
+ var errorInfo=this.error;
+ var errorBak=function(){
+ var code=12;
+ var msg=language['error']['loadingFailed'];
+ if(!isUndefined(errorInfo)){
+ if(!isUndefined(errorInfo.code)){
+ code=errorInfo.code;
+ }
+ if(!isUndefined(errorInfo.message)){
+ msg=errorInfo.message;
+ }
+ CT.error={code:code,message:msg};
+ showError();
+ }
+ else{
+ CT.error={code:code,message:msg};
+ if(event.target.attr('src')){
+ showError();
+ }
+ }
+ eventTarget('error',CT.error);//注册监听error
+ };
+ if(event.type=='error'){
+ try{
+ if(video.currentSrc){
+ ajax({url:video.currentSrc,error:function(info){
+ if(info && valType(info)=='object' && 'code' in info && info['code']){
+ CT.error=info;
+ eventTarget('error',CT.error);//注册监听error
+ showError();
+ }
+ else{
+ errorBak();
+ }
+ },success:function(data){
+ if(!data){
+ errorBak();
+ }
+ }});
+ }
+ else{
+ errorBak();
+ }
+ }
+ catch(event){
+ errorBak();
+ }
+ }
+ }
+ },
+ stalled:function(){
+ eventTarget('stalled');//注册监听error
+ CT.error={code:13,message:'load:stalled'};
+ eventTarget('error',CT.error);//注册监听error
+ },
+ suspend:function(){
+ eventTarget('suspend');//注册监听error
+ },
+ emptied:function(){
+ eventTarget('emptied');//注册监听error
+ CT.error={code:7,message:language['error']['emptied']};
+ eventTarget('error',CT.error);//注册监听error
+ },
+ seeked:function(){
+ if(paused){
+ player.play();
+ }
+ pSliderMouseDown=false;
+ eventTarget('seek',{time:this.currentTime,state:'seeked'});
+ eventTarget('seeked');
+ },
+ seeking:function(){
+ if(paused){
+ player.play();
+ }
+ var seekingTime=this.currentTime;
+ if(firstSeekTime==-1){
+ firstSeekTime=seekingTime;//记录第一次拖动的时间
+ }
+ switch(vars['timeScheduleAdjust']){
+ case 0://禁止拖动
+ if(oldTime!=seekingTime){
+ waitingMessage=false;
+ player.seek(oldTime);
+ message(language['timeScheduleAdjust']['prohibit']);
+ return;
+ }
+ break;
+ case 2://只能前进(向右拖动
+ if(seekingTimeoldTime){
+ waitingMessage=false;
+ player.seek(oldTime);
+ message(language['timeScheduleAdjust']['prohibitForward']);
+ return;
+ }
+ break;
+ case 4://只能前进但能回到第一次拖动时的位置
+ if(seekingTimemaxSeeTime){
+ waitingMessage=false;
+ player.seek(maxSeeTime);
+ message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
+ return;
+ }
+ break;
+ }
+ eventTarget('seek',{time:seekingTime,state:'seeking'});
+ eventTarget('seeking');
+ if(!vars['live']){
+ C['time'].htm(formatSeconds(seekingTime)+'/'+formatSeconds(duration));
+ C['tempTime'].htm(formatSeconds(seekingTime)+'/'+formatSeconds(duration));
+ }
+
+ },
+ waiting:function(){
+ waited=false;
+ eventTarget('buffer','start');//注册监听视频缓冲
+ C['centerPlay'].hide();
+ if(!vars['controls']){
+ C['buffer'].show();
+ }
+ if(!waitingMessage){
+ waitingMessage=true;
+ }
+ else{
+ message(language['waiting']);
+ }
+
+ },
+ play:function(){
+ paused=false;
+ C['bar']['playAndPause']['play'].hide();
+ C['bar']['playAndPause']['pause'].show();
+ C['bar']['playAndPause']['refresh'].hide();
+ C['centerPlay'].hide();
+ if(playType=='button'){
+ C['bar']['pbox'].removeClass('ck-bar-progress-out');
+ }
+ else{
+ C['bar']['pbox'].addClass('ck-bar-progress-out');
+ }
+ if(recoveryVolume){
+ recoveryVolume=false;
+ player.exitMuted();
+ }
+ hideBar();
+ closePauseAd();//关闭暂停广告
+ playType='';
+ if(!isUndefined(C['ended'])){
+ player.closeLayer(C['ended']);
+ }
+ if('error' in C){
+ C['error'].hide();
+ }
+ eventTarget('play');
+ if(!isUndefined(ad)){//如果存在广告
+ if(!isUndefined(ad['front'])){//如果存在贴片广告
+ if(isUndefined(ad['frontPlay'])){//如果贴片广告还未播放
+ ad['frontPlayI']=0;
+ ad['frontPlay']=true;//开始播放贴片广告
+ player.pause();//暂停视频
+ adFrontPlay();
+ return;
+ }
+ }
+ }
+ if(seekTime && (isUndefined(vars['live']) || (!isUndefined(vars['live']) && valType(vars['live'])=='boolean' && !vars['live'])) && seekTime0 && mutedState){
+ this.muted=false;
+ }
+ if(mutedState!=this.muted){
+ mutedState=this.muted;
+ changeMuted(this.muted);
+ CT.muted=this.muted;
+ eventTarget('muted',CT.muted);//注册静音事件
+ }
+ CT.volume=this.volume;
+ eventTarget('volume',this.volume);//注册音量事件
+ if(!isUndefined(C['bar']['vbox'])){
+ var vol=parseInt(this.volume*100);
+ C['bar']['vbox']['volume']['txt'].htm(vol);
+ if(!C['bar']['vbox']['mouseDown']){
+ changeVolumeSlider(this.muted?0:this.volume);
+ }
+ if(!this.muted){//如果非静音状态
+ message(language['volume']+vol+'%');
+ }
+ }
+ replaceInformation('volume',parseInt(this.volume*100));
+ },
+ resize:function(){
+ var fullState = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement;
+ if(fullState) {
+ C['bar']['fullAndExit']['exitFull'].show();
+ C['bar']['fullAndExit']['full'].hide();
+ C['ad']['bottom']['fullAndExit']['exitFull'].show();
+ C['ad']['bottom']['fullAndExit']['full'].hide();
+ if(!CM.hasClass('ck-main-full')){
+ CM.addClass('ck-main-full');
+ }
+ message(language['full']);
+ C['bar']['webFullAndExit'].hide();
+ C['bar']['theatreAndExit'].hide();
+ if(!isUndefined(C['menu'])){
+ CM.append(C['menu']);
+ }
+ }
+ else {
+ fullState=false;
+ C['bar']['fullAndExit']['full'].show();
+ C['bar']['fullAndExit']['exitFull'].hide();
+ C['ad']['bottom']['fullAndExit']['full'].show();
+ C['ad']['bottom']['fullAndExit']['exitFull'].hide();
+ if(CM.hasClass('ck-main-full')){
+ CM.removeClass('ck-main-full');
+ }
+ if(!isUndefined(vars['webFull']) && vars['webFull']){
+ C['bar']['webFullAndExit'].show();
+ }
+ if(!isUndefined(vars['theatre']) && !CT.webFull){
+ C['bar']['theatreAndExit'].show();
+ }
+ if(!isUndefined(C['menu'])){
+ $('body').append(C['menu']);
+ }
+ if(CV.css('width')!=CM.css('width')){
+ player.zoom(100);
+ }
+ }
+ if(CT.full!=fullState){
+ CT.full=fullState;
+ eventTarget('full',fullState);//注册播放事件
+ }
+ checkVideoRotate();
+ changeProgress(player.time());
+ },
+ keydown:function(event){
+ event=window.event || event;
+ var keycode = event.keyCode || event.which;
+ var v=player.volume();
+ var pre=function(){
+ if(event.preventDefault){
+ event.preventDefault();
+ }
+ else{
+ event.returnValue = false;
+ }
+ };
+ switch(keycode) {
+ case 32:
+ pre();
+ player.playOrPause();
+ break;
+ case 37:
+ player.fastBack();
+ break;
+ case 39:
+ player.fastNext();
+ break;
+ case 38:
+ if(valType(vars['keyVolume'])=='number' && (vars['keyVolume']==1 || (vars['keyVolume']==2 && CT.full))){
+ pre();
+ player.volume(v+.1<1?v+=.1:1);
+ }
+ break;
+ case 40:
+ if(valType(vars['keyVolume'])=='number' && (vars['keyVolume']==1 || (vars['keyVolume']==2 && CT.full))){
+ pre();
+ player.volume(v-.1>0?v-=.1:0);
+ }
+ break;
+ default:
+ break;
+ }
+ },
+ mouseWheel:function(event){
+ if(valType(vars['mouseWheelVolume'])=='number' && (vars['mouseWheelVolume']==1 || (vars['mouseWheelVolume']==2 && CT.full))){
+ event=window.event || event;
+ var v=player.volume();
+ if(event.preventDefault){
+ event.preventDefault();
+ }
+ else{
+ event.returnValue = false;
+ }
+ if(event.wheelDelta) {
+ if(event.wheelDelta > 0) {
+ player.volume(v+.1<1?v+=.1:1);
+ }
+ if(event.wheelDelta < 0) {
+ player.volume(v-.1>0?v-=.1:0);
+ }
+ } else if(event.detail) {
+ if(event.detail > 0) {
+ player.volume(v-.1>0?v-=.1:0);
+ }
+ if(event.detail < 0) {
+ player.volume(v+.1<1?v+=.1:1);
+ }
+ }
+ }
+
+ }
+ };
+ /*
+ * adFrontPlay
+ * 功能:播放贴片广告
+ */
+ var adFrontPlay=function(){
+ if(ad['frontPlayI']==0){//如果是播放第一个广告,则显示相关组件
+ allBarHide(false);
+ C['ad'].show();
+ ad['front']['video']=false;//初始化,不包含视频广告
+ //判断是否需要启用固定时间后关闭广告按钮
+ if(!isUndefined(ad['front']['closeTime'])){
+ if(ad['front']['closeTime']>0){
+ C['ad']['top']['closeTime'].show();
+ adFrontCloseTime();
+ }
+ else{
+ C['ad']['top']['closeAd'].show();
+ }
+ }
+ }
+ if(!isUndefined(ad['front']['node']) && ad['front']['node']!=null){
+ CM.append(ad['front']['node']);
+ player.closeLayer(ad['front']['node']);
+ ad['front']['node']=null;
+ }
+ C['ad']['picture'].htm('');
+ C['ad']['picture'].hide();
+ C['ad']['link'].hide();
+ if(!isUndefined(ad['front']['list'][ad['frontPlayI']])){
+ var adv=ad['front']['list'][ad['frontPlayI']];
+ frontAdPlay=true;//贴片广告播放状态
+ eventTarget('frontAd',adv);
+ if(adv['type']=='picture'){
+ adPicturePlay(adv);
+ }
+ else if(adv['type']=='node'){
+ adNode(adv);
+ }
+ else{
+ C['ad']['link'].attr('data-link',adv['link']);
+ adVideoPlay(adv['file']);
+ }
+ if(!isUndefined(adv['link'])){
+ C['ad']['bottom']['details'].show();
+ C['ad']['bottom']['details'].htm(''+language['details']+'');
+ }
+ else{
+ C['ad']['bottom']['details'].hide();
+ }
+ }
+ },
+ /*
+ * adFrontCloseTime
+ * 功能:播放贴片广告时按指定时间后显示关闭广告按钮
+ */
+ adFrontCloseTime=function(){
+ if(!isUndefined(ad['front']['closeSetTime'])){
+ clearTimeout(ad['front']['closeSetTime']);
+ ad['front']['closeSetTime']=null;
+ }
+ C['ad']['top']['closeTime'].htmReplace('{seconds}',ad['front']['closeTime'],language['closeTime']);
+ ad['front']['closeTime']--;
+ if(ad['front']['closeTime']>0){
+ ad['front']['closeSetTime']=setTimeout(adFrontCloseTime,1000);
+ }
+ else{
+ C['ad']['top']['closeAd'].show();
+ C['ad']['top']['closeTime'].hide();
+ }
+ },
+ /*
+ * calculationAdFrontTime
+ * 功能:计算贴片广告倒计时时间以及广告是视频时用于倒计时
+ */
+ calculationAdFrontTime=function(t){
+ if(!isUndefined(t)){
+ ad['front']['list'][ad['frontPlayI']]['time']=t;
+ }
+ ad['front']['countDown']=0;
+ for(var i=ad['frontPlayI'];i0){
+ adv['time']--;
+ ad['front']['countDown']--;
+ C['ad']['top']['countDown'].htm(ad['front']['countDown']+language['second']);
+ adFrontSetTime=setTimeout(adFrontCountDown,1000);
+ }
+ else{
+ adFrontEnded();
+ }
+ },
+ /*
+ * adFrontEnded
+ * 功能:贴片广告单个播放完成后进行判断是否需要播放下一个广告还是播放正片
+ */
+ adFrontEnded=function(){
+ if(ad['frontPlayI']0 || h>0){
+ if(adv['link']){
+ var a=createlA('',adv['link']);
+ a.append(this);
+ C['ad']['picture'].append(a);
+ }
+ else{
+ C['ad']['picture'].append(this)
+ }
+ img.unbind();
+ img.click(function(){
+ eventTarget('frontAdClick',adv);
+ });
+ }
+ else{
+ if(imgloadNum<10){
+ imgloadNum++;
+ imgLoadHandler();
+ }
+ }
+ });
+ };
+ imgLoadHandler();
+ calculationAdFrontTime();//计算时间
+ adFrontCountDown();//开启倒计时
+ C['ad']['bottom']['mutedAndExit'].hide();
+ },
+ /*
+ * adNode
+ * 功能:贴片广告播放外部节点
+ */
+ adNode=function(adv){
+ if(isUndefined(adv['content'])) return;
+ ad['front']['node']=player.layer(adv);
+ ad['front']['node'].css({'z-index':1});
+ C['ad'].append(ad['front']['node']);
+ ad['front']['node'].unbind();
+ ad['front']['node'].click(function(){
+ eventTarget('frontAdClick',adv);
+ });
+ calculationAdFrontTime();//计算时间
+ adFrontCountDown();//开启倒计时
+ C['ad']['bottom']['mutedAndExit'].hide();
+ },
+ /*
+ * frontVideoClickHandler
+ * 功能:视频广告上方层单击事件
+ */
+ frontVideoClickHandler=function(){
+ var url=C['ad']['link'].attr('data-link');
+ window.open(url,'_blank');
+ },
+ /*
+ * closeFrontAd
+ * 功能:关闭贴片广告
+ */
+ closeFrontAd=function(){
+ if(!isUndefined(ad) && !isUndefined(ad['front']) && !isUndefined(ad['front']['closeButtonClick'])){
+ if(valType(ad['front']['closeButtonClick'])=='function'){
+ try{
+ ad['front']['closeButtonClick']();
+ }
+ catch(event){console.error(event);}
+ }
+ else if(valType(ad['front']['closeButtonClick'])=='string'){
+ try{
+ eval(ad['front']['closeButtonClick']+ '()');
+ }
+ catch(event){console.error(event);}
+ }
+ }
+ else{
+ player.closeFrontAd();
+ }
+ },
+ /*
+ * adPausePlay
+ * 功能:播放暂停广告
+ */
+ adPausePlay=function(){
+ closePauseAd();
+ if(!isUndefined(ad) && !isUndefined(ad['pause']) && !isUndefined(ad['pause']['list']) && ad['pause']['list'].length-1>=ad['pausePlayI']){
+ var adv=ad['pause']['list'][ad['pausePlayI']];
+ if(!isUndefined(ad['pause']['close']) && ad['pause']['close']){
+ ad['pauseClose']=createlButton('ck-pause-close');
+ ad['pauseClose'].click(function(){
+ C['centerPlay'].show();
+ C['buffer'].hide();
+ closePauseAd();
+ });
+ }
+ if(!isUndefined(adv['file'])){//图片
+ var img = null;
+ var imgloadNum=0;
+ var imgLoadHandler=function(){
+ img = createlImg(adv['file']);
+ C['adPause'].show();
+ C['adPause'].htm('');
+ C['adPause'].append(img);
+ img.addListener('load',function(){
+ var w=this.getWidth(),h=this.getHeight();
+ if(w>0 || h>0){
+ C['adPause'].htm('');
+ if(adv['link']){
+ var a=createlA('',adv['link']);
+ a.append(this);
+ C['adPause'].append(a);
+ }
+ else{
+ C['adPause'].append(this)
+ }
+
+ C['adPause'].css({
+ 'width':w+'px',
+ 'height':h+'px'
+ });
+ if(ad['pauseClose']){
+ C['adPause'].append(ad['pauseClose']);
+ }
+ img.click(function(){
+ eventTarget('pauseAdClick',adv);
+ });
+ }
+ else{
+ if(imgloadNum<10){
+ imgloadNum++;
+ imgLoadHandler();
+ }
+ }
+ });
+ };
+ imgLoadHandler();
+ }
+ else if(!isUndefined(adv['content'])){
+ ad['pause']['node']=player.layer(adv);
+ if(ad['pauseClose']){
+ ad['pause']['node'].append(ad['pauseClose']);
+ }
+ ad['pause']['node'].click(function(){
+ eventTarget('pauseAdClick',adv);
+ });
+ }
+ eventTarget('pauseAd',adv);
+ if(!isUndefined(adv['time']) && adv['time']>0){
+ adPauseSetTime=setTimeout(function(){
+ ad['pausePlayI']++;
+ if(ad['pausePlayI']>ad['pause']['list'].length-1){
+ ad['pausePlayI']=0;
+ }
+ adPausePlay();
+ },adv['time']*1000)
+ }
+ }
+ },
+ /*
+ * closePauseAd
+ * 功能:关闭暂停广告
+ */
+ closePauseAd=function(){
+ if(adPauseSetTime){
+ clearTimeout(adPauseSetTime);
+ adPauseSetTime=null;
+ }
+ C['adPause'].hide();
+ if(!isUndefined(ad) && !isUndefined(ad['pauseClose']) && ad['pauseClose']!=null){
+ ad['pauseClose'].remove();
+ ad['pauseClose']=null;
+ }
+ if(!isUndefined(ad) && !isUndefined(ad['pause']) && !isUndefined(ad['pause']['node']) && ad['pause']['node']){
+ ad['pause']['node'].unbind();
+ player.closeLayer(ad['pause']['node']);
+ eventTarget('pauseAdClose');
+ }
+ };
+ /*
+ * player
+ * 功能:开放接口,向外部提供播放器的交互功能列表,包含获取,执行,监听这三种功能
+ */
+ var player={
+ /*
+ * width
+ * 功能:获取或设置播放器宽度
+ * 这是一个动态的值,会随着全屏切换或播放器本身尺寸变化而变化
+ * @value,支持数字,字符,当存在@value时则设置播放器宽度,@value为空时则获取播放器宽度
+ */
+ width:function(value){
+ if(!isUndefined(value)){
+ if(valType(value)=='number'){
+ value+='px';
+ }
+ CT.css({'width':value});
+ checkVideoRotate();
+ }
+ return CK.getWidth();
+ },
+ /*
+ * height
+ * 功能:获取或设置播放器显示高度
+ * 这是一个动态的值,会随着全屏切换或播放器本身尺寸变化而变化
+ * @value,支持数字,字符,当存在@value时则设置播放器高度,@value为空时则获取播放器高度
+ */
+ height:function(value){
+ if(!isUndefined(value)){
+ if(valType(value)=='number'){
+ value+='px';
+ }
+ CT.css({'height':value});
+ checkVideoRotate();
+ }
+ return CK.getHeight();
+ },
+ /*
+ * videoWidth
+ * 功能:获取视频本身的宽度,这是一个固定值
+ */
+ videoWidth:function(){
+ if(video){
+ return video.videoWidth;
+ }
+ return null;
+ },
+ /*
+ * videoHeight
+ * 功能:获取视频本身的高度,这是一个固定值
+ */
+ videoHeight:function(){
+ if(video){
+ return video.videoHeight;
+ }
+ return null;
+ },
+ /*
+ * height
+ * 功能:获取或设置播放器显示高度
+ * 这是一个动态的值,会随着全屏切换或播放器本身尺寸变化而变化
+ * @value,支持数字,字符,当存在@value时则设置播放器高度,@value为空时则获取播放器高度
+ */
+ zoom:function(fn){
+ if(!isUndefined(fn)){
+ if(valType(fn)=='function'){
+ newEvent.addEventListener('zoom',fn);
+ }
+ if(valType(fn)=='number'){
+ var arr=[C['topBar']['zoomEle']['zoom50'],C['topBar']['zoomEle']['zoom75'],C['topBar']['zoomEle']['zoom100']];
+ for(var i=0;ifn && fn>0){
+ rot=arr[fn];
+ }
+ else{
+ if(arr.indexOf(fn)>-1){
+ rot=fn;
+ }
+ }
+ if(rot!=nowRotate){
+ eventTarget('rotate',rot);
+ nowRotate=rot;
+ checkVideoRotate();//调整视频尺寸
+ }
+ }
+ }
+ },
+ /*
+ * vars
+ * 提供给播放器外部使用
+ * 修改vars,动态切换视频地址
+ * @obj为新的播放配置对象
+ */
+ vars:function(obj,val){
+ if(isUndefined(obj)){
+ return;
+ }
+ if(valType(obj)=='string' && !isUndefined(val)){
+ var temp={};
+ temp[obj]=val;
+ obj=temp;
+ }
+ var isChange=false;
+ for(var k in obj){
+ if(k in vars && obj[k]!=vars[k]){
+ isChange=true;
+ break;
+ }
+ }
+ if(isChange){
+ vars = standardization(vars, obj);
+ }
+ if(!isUndefined(obj['video'])){
+ isChangeDef=true;
+ changeVideo(vars['video']);
+ }
+ if(!isUndefined(obj['title'])){
+ C['topBar']['titleEle'].htm(obj['title']);
+ }
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:监听视频准备加载
+ */
+ loadstart:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('loadstart',fn);
+ }
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:监听视频加载
+ */
+ loadeddata:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('loadeddata',fn);
+ }
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:监听视频元数据加载成功
+ */
+ loadedMetaData:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('loadedMetaData',fn);
+ }
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:监听视频可以播放
+ */
+ canplay:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('canplay',fn);
+ }
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:执行播放操作/监听播放
+ * @fn为函数时则监听视频播放,@fn为空时,则控制视频播放
+ */
+ play:function(fn){
+ if(valType(fn)=='object'){
+ if(fn['target']==C['bar']['playAndPause']['play'] || fn['target']==C['bar']['playAndPause']['refresh']){
+ playType='button';
+ }
+ }
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('play',fn);
+ }
+ else{
+ if(loadedmetadataNum>0 && video){
+ try{video.play();}catch(event){console.error(event)}
+ }
+ }
+ return player;
+ },
+ /*
+ * puase
+ * 功能:执行暂停操作/监听暂停
+ * @fn为函数时则监听视频暂停,@fn为空时,则控制视频暂停
+ */
+ pause:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('pause',fn);
+ }
+ else{
+ if(loadedmetadataNum>0 && video){
+ try{video.pause();}catch(event){console.error(event)}
+ }
+ }
+ return player;
+ },
+ /*
+ * playOrPause
+ * 功能:在播放和暂停动作之间进行切换
+ */
+ playOrPause:function(){
+ if(paused){
+ player.play();
+ }
+ else{
+ player.pause();
+ }
+ return player;
+ },
+ /*
+ * volume
+ * 功能:调节和监听以及获取音量
+ * @fn为函数时,则进行音量变化的监听,@fn为数字时,则进行音量调节,@fn为空时,则获取当前音量
+ */
+ volume:function(fn){
+ if(!isUndefined(fn)){
+ if(valType(fn)=='function'){
+ newEvent.addEventListener('volume', fn);
+ }
+ else if(valType(fn)=='number' && video){
+ if(fn<0)fn=0;
+ if(fn>1)fn=1;
+ if(video.muted){
+ video.volume=fn*.5;
+ }
+ video.volume=fn;
+ }
+ }
+ else if(video){
+ return video.volume;
+ }
+ return player;
+ },
+ /*
+ * muted
+ * 功能:执行静音操作/监听静音
+ * @fn为函数时则监听视频静音,@fn为空时,则控制视频静音
+ */
+ muted:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('muted', fn);
+ }
+ else if(video){
+ video.muted=true;
+ }
+ return player;
+ },
+ /*
+ * exitMuted
+ * 功能:执行取消静音操作
+ */
+ exitMuted:function(){
+ if(video){
+ video.muted=false;
+ if(video.volume==0){
+ player.volume(vars['volume']>0?vars['volume']:.8);
+ }
+ }
+ return player;
+ },
+ /*
+ * time
+ * 功能:获取当前播放时间/监听播放时间
+ * @fn为函数时监听当前播放时间,为空时获取当前播放时间
+ */
+ time:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('time',fn);
+ }
+ else if(video){
+ return video.currentTime || 0;
+ }
+ },
+ /*
+ * seek
+ * 功能:监听跳转/执行跳转操作
+ * @fn为函数时则监听视频跳转动作,@fn为数字时执行跳转操作
+ */
+ seek:function(fn){
+ if(!isUndefined(fn)){
+ if(valType(fn)=='function'){
+ newEvent.addEventListener('seek',fn);
+ }
+ if(valType(fn)=='number' && video){
+ switch(vars['timeScheduleAdjust']){
+ case 0://禁止拖动
+ message(language['timeScheduleAdjust']['prohibit']);
+ return;
+ break;
+ case 1://可以拖动
+ break;
+ case 2://只能前进(向右拖动
+ if(fnoldTime){
+ message(language['timeScheduleAdjust']['prohibitForward']);
+ return;
+ }
+ break;
+ case 4://只能前进但能回到第一次拖动时的位置
+ if(fnmaxSeeTime){
+ waitingMessage=false;
+ video.currentTime=maxSeeTime;
+ message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
+ return;
+ }
+ break;
+ }
+ pSliderMouseDown=false;
+ video.currentTime=fn;
+ }
+ }
+ return player;
+ },
+ /*
+ * buffer
+ * 功能:监听视频缓冲
+ * @fn为监听执行的函数
+ */
+ buffer:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('buffer',fn);
+ }
+ return player;
+ },
+ /*
+ * ended
+ * 功能:监听视频播放结束
+ * @fn为监听执行的函数
+ */
+ ended:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('ended',fn);
+ }
+ return player;
+ },
+ /*
+ * 提供给播放器外部使用
+ * 功能:监听点击下一集按钮的动作
+ */
+ next:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('next',fn);
+ }
+ return player;
+ },
+ /*
+ * error
+ * 功能,监听播放器在加载视频过程和播放视频过程中出现的错误
+ * @fn为监听执行的函数
+ */
+ error:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('error',fn);
+ }
+ return player;
+ },
+ /*
+ * emptied
+ * 功能,监听播放器播放的视频文件发生故障并且文件突然不可用时
+ * @fn为监听执行的函数
+ */
+ emptied:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('emptied',fn);
+ }
+ return player;
+ },
+ /*
+ * duration
+ * 功能:获取视频总时间/监听视频总时间
+ * @fn为函数时执行监听视频总时间,为空时获取视频总时间
+ */
+ duration:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('duration',fn);
+ }
+ else{
+ return duration || 0;
+ }
+ },
+ /*
+ * playbackRate
+ * 功能:监听或返回视频播放速度
+ * @fn为函数时执行监听视频播放速度,为数字时切换播放速度,为空时获取视频播放速度
+ */
+ playbackRate:function(fn){
+ if(!isUndefined(fn)){
+ if(valType(fn)=='function'){
+ newEvent.addEventListener('playbackRate',fn);
+ }
+ else if(valType(fn)=='number' && video){
+ video.playbackRate=fn;
+ CT.playbackRate=fn;
+ eventTarget('playbackRate',fn);
+ changePlaybackrateVal(fn);
+ }
+
+ }
+ else{
+ return video.playbackRate;
+ }
+ },
+ /*
+ * track
+ * 功能:监听或返回视频的字幕
+ * @fn为函数时执行监听视频字幕,为数字时切换字幕,为空时获取字幕
+ */
+ track:function(fn){
+ if(!isUndefined(fn)){
+ if(valType(fn)=='function'){
+ newEvent.addEventListener('track',fn);
+ }
+ else if(valType(fn)=='number' && video){
+ var track=null;
+ if(!isUndefined(video.textTracks)){
+ track=video.textTracks;
+ }
+ if(track && valType(track)=='texttracklist'){
+ var arr=vars['track'];
+ for(var i=track.length-1;i>-1;i--){
+ video.find('track').eq(i).remove();
+ }
+ for(var i=0;i';
+ }
+ if(video){
+ var html=video.htm()+track;
+ video.htm(html);
+ }
+ changeTrackVal(fn);
+ }
+ }
+
+ }
+ else{
+ return CT.track;
+ }
+ },
+ /*
+ * fastBack
+ * 功能:快退
+ * @num为数字时快退指定秒数,为空时快退20秒
+ */
+ fastBack:function(num){
+ if(duration==0) return;
+ if(isUndefined(num) || valType(num)!='number'){
+ num=20;
+ }
+ var time=player.time();
+ if(time-num>0){
+ time-=num;
+ }
+ else{
+ time=0;
+ }
+ player.seek(time);
+ return player;
+ },
+ /*
+ * fastNext
+ * 功能:快进
+ * @num为数字时快进指定秒数,为空时快进20秒
+ */
+ fastNext:function(num){
+ if(duration==0) return;
+ if(isUndefined(num) || valType(num)!='number'){
+ num=20;
+ }
+ var time=player.time();
+ if(time+num200) zIndex=200;
+ if(isUndefined(ele.cssDisplay)){
+ ele.cssPosition=ele.css('position');
+ ele.cssDisplay=ele.css('display');
+ }
+ ele.css({
+ 'position': 'absolute',
+ 'z-index':zIndex
+ });
+ if(!cBar){
+ CM.append(ele);
+ }
+ else{
+ C['bar'].append(ele);
+ }
+ ele.CK=CK;
+ ele.show();
+ }
+ return ele;
+ },
+ /*
+ * closeLayer
+ * 功能:关闭一个层
+ */
+ closeLayer:function(ele){
+ if(valType(ele)=='string'){
+ var temp=$(ele);
+ if(!isUndefined(temp)){
+ if(temp.length>0){
+ ele=temp.eq(0);
+ }
+ }
+ }
+ if(!isUndefined(ele) && valType(ele)=='htmlobject'){
+ if(!isUndefined(ele.captureParentNode)){
+ var eleP=ele.captureParentNode;
+ if (ele.nextElement) {
+ try {
+ eleP.insertBefore(ele, ele.nextElement);
+ }
+ catch (event) {
+ eleP.append(ele);
+ }
+ }
+ else if (ele.prevElement) {
+ try {
+ eleP.insertAfter(ele, ele.prevElement);
+ }
+ catch (event) {
+ eleP.append(ele);
+ }
+ }
+ else {
+ eleP.append(ele);
+ }
+ ele.css({'display':ele.cssDisplay});
+ }
+ else{
+ ele.remove();
+ }
+ if(!isUndefined(ele.cssDisplay)){
+ ele.css({
+ 'display':ele.cssDisplay,
+ 'position':ele.cssPosition
+ });
+ }
+ }
+ return player;
+ },
+ /*
+ * message
+ * 在播放器内部显示一条提示信息
+ */
+ message:function(str){
+ message(str);
+ return player;
+ },
+ /*
+ * closeFrontAd
+ * 功能:关闭贴片广告
+ */
+ closeFrontAd:function(){
+ if(frontAdPlay && !isUndefined(ad) && !isUndefined(ad['front']) && !isUndefined(ad['front']['list'])){
+ ad['frontPlayI']=ad['front']['list'].length-1;
+ adFrontEnded();
+ clearAdFrontSetTime();
+ }
+ return player;
+ },
+ /*
+ * addListener
+ * 功能:监听功能
+ */
+ addListener:function(name,fn){
+ newEvent.addEventListener(name,fn);
+ },
+ /*
+ * removeListener
+ * 功能:监听功能
+ */
+ removeListener:function(name,fn){
+ newEvent.removeEventListener(name,fn);
+ },
+ /*
+ * bar
+ * 功能:显示/关闭底部控制栏
+ */
+ bar:function(bool){
+ barShow=bool;
+ if(bool){
+ C['bar'].show();
+ }
+ else{
+ C['bar'].hide();
+ }
+ },
+ /*
+ * rightBar
+ * 功能:显示/关闭右边控制栏
+ */
+ rightBar:function(bool){
+ rightBarShow=bool;
+ if(bool){
+ C['rightBar'].show();
+ }
+ else{
+ C['rightBar'].hide();
+ }
+ },
+ /*
+ * mouseActive
+ * 功能,监听鼠标是否经过播放器
+ */
+ mouseActive:function(fn){
+ if(!isUndefined(fn) && valType(fn)=='function'){
+ newEvent.addEventListener('mouseActive',fn);
+ }
+ return this;
+ },
+ /*
+ * cookie
+ * 功能,读取cookie
+ */
+ cookie:function(name){
+ if(name=='delete'){
+ cookie(moeplayerCookie,'delete',vars['domain']);
+ return null;
+ }
+ if(!isUndefined(name) && name){
+ name=name.replace(/[ ]*,[ ]*|[ ]+/g, '').replace(/[ ]*;[ ]*|[ ]+/g, '');
+ }
+ var cStr=cookie(moeplayerCookie);
+ if(cStr){
+ var arr=stringToArray(cStr);
+ var tempArr=[];
+ var cTime=parseInt(Date.now()*0.001);
+ for(i=0;icTime){
+ tempArr.push(arr[i]);
+ }
+ }
+ arr=tempArr;
+ if(arr.length>0){
+ cookie(moeplayerCookie,'delete',vars['domain'],vars['cookiePath']);
+ cookie(moeplayerCookie,arrayToString(arr),vars['domain'],vars['cookiePath']);
+ for(var i=0;i-1;i--){
+ var pTemp=createlButton('ck-list-p',playbackrate[i]+language['playbackrateSuffix']);
+ pTemp.attr('data-i',i).attr('data-val',playbackrate[i]);
+ C['bar']['playbackrate']['bg']['p'].push(pTemp);
+ C['bar']['playbackrate']['bg'].append(pTemp);
+ pTemp.click(playbackrateClick);
+ }
+ C['bar']['playbackrate'].hide();
+ if(!isUndefined(vars['playbackrateOpen']) && vars['playbackrateOpen']){
+ C['bar']['playbackrate'].show();
+ C['bar']['playbackrate']['bgbox'].show();
+ var w=C['bar']['playbackrate']['bg'].getWidth(),h=C['bar']['playbackrate']['bg'].getHeight();
+ var bw=C['bar']['playbackrate']['button'].getWidth();
+ C['bar']['playbackrate']['bg'].css({'width':w+10+'px'});
+ w=C['bar']['playbackrate']['bg'].getWidth();
+ if(getBarHeight()>C['bar'].getHeight()){
+ h+=(getBarHeight()-C['bar'].getHeight());
+ }
+ C['bar']['playbackrate']['bgbox'].attr('style','');
+ C['bar']['playbackrate']['bgbox'].css({
+ 'width':w+'px',
+ 'height':(h+2)+'px',
+ 'left':-(w-bw)*0.5+'px'
+ });
+ C['bar']['playbackrate']['button'].mouseover(function(){
+ w=C['bar']['playbackrate']['bg'].getWidth();
+ bw=C['bar']['playbackrate']['button'].getWidth();
+ C['bar']['playbackrate']['bgbox'].css({
+ 'left':-(w-bw)*0.5+'px'
+ });
+ });
+ changePlaybackrateVal(pbr);
+ }
+ },
+ /*
+ * playbackrateClick
+ * 功能:选择播速
+ */
+ playbackrateClick=function(e){
+ C['bar']['playbackrate']['bgbox'].hide();
+ setTimeout(function(){C['bar']['playbackrate']['bgbox'].removeCss('display');},300);
+ message(language['switchTo']+$(this).htm());
+ player.playbackRate(parseFloat($(this).attr('data-val')));
+ },
+ /*
+ * changePlaybackrateVal
+ * 功能:根据速度检查播速
+ */
+ changePlaybackrateVal=function(num){
+ C['bar']['playbackrate']['bg'].find('button').each(function(index,ele){
+ var val=parseFloat(ele.attr('data-val'));
+ ele.removeClass('ck-list-p-focus');
+ if(num==val){
+ ele.addClass('ck-list-p-focus');
+ if(num!=1){
+ C['bar']['playbackrate']['button'].htm(ele.htm());
+ }
+ else{
+ C['bar']['playbackrate']['button'].htm(language['playbackrate']);
+ }
+ }
+ else{
+ ele.removeClass('ck-list-p-focus');
+ }
+ });
+ },
+ /*
+ * checkTrack
+ * 功能:初始化或重置字幕组件内容
+ */
+ checkTrack=function(){
+ var track=vars['track'];
+ var pbr=-1;
+ C['bar']['track']['bgbox'].htm('');
+ C['bar']['track']['bg']=createlDiv('ck-list-bg');
+ C['bar']['track']['bgbox'].append(C['bar']['track']['bg']);
+ C['bar']['track']['bg']['p']=[];
+ var pTemp=null;
+ for(var i=track.length-1;i>-1;i--){
+ pTemp=createlButton('ck-list-p',track[i]['label']);
+ pTemp.attr('data-i',i).attr('data-title',track[i]['label']);
+ C['bar']['track']['bg']['p'].push(pTemp);
+ C['bar']['track']['bg'].append(pTemp);
+ if(!isUndefined(track[i]['default']) && track[i]['default']){
+ pbr=i;
+ }
+ pTemp.click(trackClick);
+ }
+ //
+ pTemp=createlButton('ck-list-p',language['noTrack']);
+ pTemp.attr('data-i',-1).attr('data-title',language['noTrack']);
+ C['bar']['track']['bg']['p'].push(pTemp);
+ C['bar']['track']['bg'].append(pTemp);
+ pTemp.click(trackClick);
+ //
+ C['bar']['track'].hide();
+ C['bar']['track'].show();
+ C['bar']['track']['bgbox'].show();
+ var w=C['bar']['track']['bg'].getWidth(),h=C['bar']['track']['bg'].getHeight();
+ var bw=C['bar']['track']['button'].getWidth();
+ C['bar']['track']['bg'].css({'width':w+10+'px'});
+ w=C['bar']['track']['bg'].getWidth();
+ if(getBarHeight()>C['bar'].getHeight()){
+ h+=(getBarHeight()-C['bar'].getHeight());
+ }
+ C['bar']['track']['bgbox'].attr('style','');
+ C['bar']['track']['bgbox'].css({
+ 'width':w+'px',
+ 'height':(h+2)+'px',
+ 'left':-(w-bw)*0.5+'px'
+ });
+ C['bar']['track']['button'].mouseover(function(){
+ w=C['bar']['track']['bg'].getWidth();
+ bw=C['bar']['track']['button'].getWidth();
+ C['bar']['track']['bgbox'].css({
+ 'left':-(w-bw)*0.5+'px'
+ });
+ });
+ changeTrackVal(pbr);
+ },
+ /*
+ * trackClick
+ * 功能:选择字幕
+ */
+ trackClick=function(e){
+ C['bar']['track']['bgbox'].hide();
+ setTimeout(function(){C['bar']['track']['bgbox'].removeCss('display');},300);
+ message(language['switchTo']+$(this).attr('data-title'));
+ player.track(parseFloat($(this).attr('data-i')));
+ },
+ /*
+ * changeTrackVal
+ * 功能:根据字幕检查
+ */
+ changeTrackVal=function(num){
+ C['bar']['track']['bg'].find('button').each(function(index,ele){
+ var i=parseInt(ele.attr('data-i'));
+ if(num==i){
+ C['bar']['track']['button'].htm(ele.attr('data-title'));
+ if(i>-1){
+ CT.track=vars['track'][i];
+ eventTarget('track',vars['track'][i]);
+ }
+ else{
+ CT.track=null;
+ eventTarget('track',null);
+ }
+ ele.addClass('ck-list-p-focus');
+ }
+ else{
+ ele.removeClass('ck-list-p-focus');
+ }
+ });
+ },
+ /*
+ * checkDefinition
+ * 功能:初始化或重置清晰度组件内容
+ */
+ checkDefinition=function(){
+ var pi=-1;
+ var videoUrl=video['currentSrc'];
+ if(!isUndefined(C['bar']['definition']['bg'])){
+ C['bar']['definition']['bgbox'].htm('');
+ C['bar']['definition']['bgbox'].attr('style','');
+ C['bar']['definition']['button'].htm(language['definition']);
+ }
+ if(valType(vars['video'])=='array'){
+ var arr=vars['video'];
+ C['bar']['definition']['bg']=createlDiv('ck-list-bg');
+ C['bar']['definition']['bgbox'].append(C['bar']['definition']['bg']);
+ C['bar']['definition']['bg']['p']=[];
+ for(var i=arr.length-1;i>-1;i--){
+ var pTemp=createlButton('ck-list-p',arr[i][2]);
+ pTemp.attr('data-i',i).attr('data-video',arr[i][0]).attr('data-type',arr[i][1]).attr('data-title',arr[i][2]);
+ C['bar']['definition']['bg']['p'].push(pTemp);
+ C['bar']['definition']['bg'].append(pTemp);
+ if(videoUrl && videoUrl.indexOf(arr[i][0])>-1){
+ pi=i;
+ }
+ pTemp.click(definitionClick);
+ }
+ C['bar']['definition'].show();
+ C['bar']['definition']['bgbox'].show();
+ var w=C['bar']['definition']['bg'].getWidth(),h=C['bar']['definition']['bg'].getHeight();
+ var bw=C['bar']['definition']['button'].getWidth();
+ C['bar']['definition']['bg'].css({'width':w+10+'px'});
+ w=C['bar']['definition']['bg'].getWidth();
+ if(getBarHeight()>C['bar'].getHeight()){
+ h+=(getBarHeight()-C['bar'].getHeight());
+ }
+ C['bar']['definition']['bgbox'].attr('style','');
+ C['bar']['definition']['bgbox'].css({
+ 'width':w+'px',
+ 'height':(h+2)+'px',
+ 'left':-(w-bw)*0.5+'px'
+ });
+ C['bar']['definition']['button'].mouseover(function(){
+ w=C['bar']['definition']['bg'].getWidth();
+ bw=C['bar']['definition']['button'].getWidth();
+ C['bar']['definition']['bgbox'].css({
+ 'left':-(w-bw)*0.5+'px'
+ });
+ });
+ }
+ if(pi>-1){
+ C['bar']['definition']['bg'].find('button').each(function(index,ele){
+ var i=parseInt(ele.attr('data-i'));
+ if(pi==i){
+ ele.addClass('ck-list-p-focus');
+ }
+ else{
+ ele.removeClass('ck-list-p-focus');
+ }
+ });
+ }
+ },
+ /*
+ * definitionClick
+ * 功能:选择清晰度
+ */
+ definitionClick=function(e){
+ C['bar']['definition']['bgbox'].hide();
+ setTimeout(function(){
+ C['bar']['definition']['bgbox'].removeCss('display');
+ },300);
+ changeDefinition(parseInt($(this).attr('data-i')));
+ },
+ /*
+ * changeDefinition
+ * 功能:检查清晰度
+ */
+ changeDefinition=function(num){
+ C['bar']['definition']['bg'].find('button').each(function(index,ele){
+ var i=parseInt(ele.attr('data-i'));
+ if(num==i){
+ if(!isUndefined(video.textTracks) && video.textTracks.length>0){
+ for(var y=video.find('track').length-1;y>-1;y--){
+ video.find('track').eq(y).remove();
+ }
+ }
+ seekTime=player.time();
+ video.attr('autoplay','autoplay');
+ changeVideo(ele.attr('data-video'));
+ message(language['switchTo']+ele.htm());
+ C['bar']['definition']['button'].htm(ele.htm());
+ ele.addClass('ck-list-p-focus');
+ eventTarget('definition',{id:i,video:ele.attr('data-video'),title:ele.attr('data-title')});
+ }
+ else{
+ ele.removeClass('ck-list-p-focus');
+ }
+ });
+ },
+ /*
+ * deletePrompt
+ * 功能:删除关键点
+ */
+ deletePrompt=function(){
+ var i=0;
+ if(!isUndefined(C['prompt']) && valType(C['prompt'])=='array'){
+ for(i=C['prompt'].length;i>-1;i--){
+ if(!isUndefined(C['prompt'][i])){
+ C['prompt'][i].remove();
+ }
+ }
+ C['prompt']=null;
+ }
+ C['prompt']=[];
+ },
+ /*
+ * changePrompt
+ * 功能:构建关键点
+ */
+ changePrompt=function(){
+ deletePrompt();
+ for(var i=0;i100) left=100;
+ ele.css({'left':left+'%'});
+ ele.mouseover(function(){
+ if(this.attr('data-words')){
+ showPromptWords(this);
+ }
+ });
+ ele.mouseout(function(){
+ if(this.attr('data-words')){
+ showPromptWords();
+ }
+ });
+ C['prompt'].push(ele);
+ }
+ }
+ },
+ /*
+ * showPromptWords
+ * 功能:显示关键点提示
+ */
+ showPromptWords=function(ele){
+ if(isUndefined(C['promptWords'])){
+ C['promptWords']=createlDiv('ck-prompt-words');
+ CM.append(C['promptWords']);
+ C['promptWords']['content']=createlDiv('ck-prompt-content');
+ C['promptWords'].append(C['promptWords']['content']);
+ }
+ if(isUndefined(ele)){
+ C['promptWords']['content'].htm('');
+ C['promptWords'].hide();
+ return;
+ }
+ C['promptWords']['content'].htm(ele.attr('data-words'));
+ C['promptWords'].show();
+ var pW=C['promptWords'].getWidth(),pH=C['promptWords'].getHeight();
+ var bg=C['bar']['pbox']['bg'];
+ var time=parseFloat(ele.attr('data-time'));
+ var top=CK.getHeight()-getBarHeight();
+ var left=ele.offset()['left']-CK.offset()['left']+ele.getWidth()*.5-pW*.5;
+ if(!isUndefined(C['preview'])){
+ top=CK.getHeight()-parseFloat((getBarHeight()+C['preview']['smallHight']+parseInt(C['preview'].css('margin-bottom'))));
+ }
+ else{
+ top=CK.getHeight()-parseFloat((getBarHeight()+C['tip']['minHeight']+parseInt(C['tip'].css('margin-bottom'))));
+ top-=(getBarHeight()-C['bar'].getHeight());
+ }
+ top-=parseFloat(C['promptWords'].css('margin-bottom'));
+ top-=pH;
+ left-=parseFloat(C['promptWords'].css('margin-right'));
+ if(left<0)left=0;
+ if(left>CK.getWidth()-pW)left=CK.getWidth()-pW;
+ C['promptWords'].css({
+ 'top':top+'px',
+ 'left':left+'px'
+ });
+ },
+ /*
+ * changePreview
+ * 功能:加载或重置预览图片
+ */
+ changePreview=function(preview){
+ if(!isUndefined(C['preview'])){
+ C['preview'].remove();
+ C['preview']=null;
+ }
+ if(!isUndefined(preview)){
+ C['preview']=createlDiv('ck-preview');
+ CM.append(C['preview']);
+ if(isUndefined(vars['preview']['type'])){
+ vars['preview']['type']=0;
+ }
+ if(vars['preview']['type']==1){
+ C['preview']['bg']=createlDiv('ck-preview-bg');
+ C['preview'].append(C['preview']['bg']);
+ }
+ var files=[];
+ var loadImg=function(bigW,bigH,smallW,smallH){
+ if(vars['preview']['type']==1){
+ C['preview']['bg']['img']=[];
+ for(var i=0;i1){
+ if(valType(vars['preview']['thumbnail'][0])=='number'){
+ thumbnail[0]=vars['preview']['thumbnail'][0];
+ }
+ if(valType(vars['preview']['thumbnail'][1])=='number'){
+ thumbnail[1]=vars['preview']['thumbnail'][1];
+ }
+ vars['preview']['thumbnail']=thumbnail;
+ }
+ if(files[0]){
+ var img = createlImg(files[0],'ck-preview-load-img').addListener('load',function(){
+ loadImg(this.getWidth(),this.getHeight(),this.getWidth()/thumbnail[0],this.getHeight()/thumbnail[1]);
+ this.remove();
+ });
+ CM.append(img);
+ }
+ }
+ else{
+ C['preview'].removeChild();
+ C['preview']=null;
+ }
+ }
+ else{
+ C['preview'].removeChild();
+ C['preview']=null;
+ }
+ }
+ },
+ /*
+ * showPreview
+ * 功能:显示预览图
+ */
+ showPreview=function(time){
+ if(hidePreviewSetTime){
+ clearTimeout(hidePreviewSetTime);
+ hidePreviewSetTime=null;
+ }
+ if(time<0){
+ if(!isUndefined(C['preview'])){
+ hidePreviewSetTime=setTimeout(function(){
+ C['preview'].hide();
+ hidePreviewSetTime=null;
+ },200);
+ return;
+ }
+ }
+ if(!isUndefined(C['preview']) && !isUndefined(vars['preview']['thumbnail']) && duration>0){
+ if(isUndefined(vars['preview']['type'])){
+ vars['preview']['type']=0;
+ }
+ var scale=2,thumbnail=vars['preview']['thumbnail'];
+ if(!isUndefined(vars['preview']['scale'])){
+ scale=vars['preview']['scale'];
+ }
+ var divI=0,imgI=0;
+ var left=0,frameLeft=0;
+ var pW=0;
+ var smallW=C['preview']['smallWidth'],smallH=C['preview']['smallHight'];
+ var bgXw=time*C['bar']['pbox']['bg'].getWidth()/duration+(C['bar']['pbox']['bg'].offset()['left']-CK.offset()['left']);
+ if(C['preview'].css('display')=='none'){
+ C['preview'].show();
+ }
+ C['preview'].css({
+ 'height':smallH+'px',
+ });
+ if(vars['preview']['type']==1){
+ divI=parseInt(time/(scale*thumbnail[0]));
+ imgI=parseInt(time/scale);
+ var minI=divI-5,maxI=divI+5;
+ if(minI<0) minI=0;
+ if(maxI>C['preview']['bg']['img'].length-1){
+ maxI=C['preview']['bg']['img'].length-1;
+ }
+ for(var i=minI;iC['preview'].getWidth()-C['preview']['frame'].getWidth()){
+ var xz=frameLeft-(C['preview'].getWidth()-C['preview']['frame'].getWidth());
+ frameLeft=C['preview'].getWidth()-C['preview']['frame'].getWidth();
+ left-=xz;
+ }
+ C['preview']['bg'].css({'left':left+'px'});
+ C['preview']['frame'].css({'left':frameLeft+'px'});
+ }
+ else{
+ var temp=(time/scale)/(thumbnail[0]*thumbnail[1]);
+ imgI=parseInt(temp);//计算显示的图片编号
+ var smallI=parseInt((temp-imgI)*100);
+ var rows=parseInt(smallI/thumbnail[0]);
+ var column=smallI%thumbnail[0];
+ var files=vars['preview']['file'];
+ left=bgXw-smallW*.5;
+ if(left<0){
+ left=0;
+ }
+ if(left>CK.getWidth()-smallW){
+ left=CK.getWidth()-smallW;
+ }
+ C['preview'].css({
+ 'width':C['preview']['smallWidth']+'px',
+ 'background':'url('+files[imgI]+') no-repeat',
+ 'background-position':'-'+column*smallW+'px -'+rows*smallH+'px',
+ 'left':left+'px'
+ });
+ }
+ }
+ },
+ /*
+ * showError
+ * 功能:显示错误信息
+ */
+ showError=function(){
+ C['loading'].hide();
+ if(vars['controls'] || !vars['errorShow']){
+ return;
+ }
+ if(isUndefined(C['error'])){
+ C['error']=createlDiv('ck-error');
+ CM.append(C['error']);
+ }
+ var msg=CT.error['message'];
+ if(!msg) msg=language['error']['noMessage'];
+ var html=msg+'(code:'+CT.error['code']+')';
+ C['error'].htm(html);
+ C['error'].show();
+ },
+ /*
+ * showWindowsError
+ * 功能:显示错误信息
+ */
+ showWindowsError=function(error){
+ var ele=createlDiv('moeplayer-error',error);
+ $('body').append(ele);
+ },
+ /*
+ * showNextEpisode
+ * 功能:鼠标经过下一集按钮的动作
+ */
+ showNextEpisode=function(){
+ if(isUndefined(vars['next'])) return;
+ if(valType(vars['next'])=='object'){
+ if('content' in vars['next']){
+ C['next']=player.layer(vars['next']);
+ return;
+ }
+ if('title' in vars['next']){
+ tip(C['bar']['nextEpisode'],vars['next']['title']);
+ return;
+ }
+ }
+ tip(C['bar']['nextEpisode'],language['next']);
+ },
+ /*
+ * nextClick
+ * 功能:点击下一集按钮的动作
+ */
+ nextClick=function(){
+ if(valType(vars['next'])=='object'){
+ if('click' in vars['next']){
+ if(valType(vars['next']['click'])=='function'){
+ vars['next']['click']();
+ }
+ else if(valType(vars['next']['click'])=='string'){
+ eval(vars['next']['click']+'()');
+ }
+ }
+ if('link' in vars['next']){
+ window.location.href=vars['next']['link'];
+ }
+ eventTarget('next');
+ }
+ },
+ /*
+ * showEnded
+ * 功能:播放结束后的显示内容
+ */
+ showEnded=function() {
+ if(!CT.loop && !isUndefined(vars['ended'])){
+ closePauseAd();
+ C['ended']=player.layer(vars['ended']);
+ if(C['ended']){
+ C['centerPlay'].hide();
+ }
+ return;
+ }
+ },
+ /*
+ * windowScroll
+ * 功能:监听页面滚动
+ */
+ windowScroll=function() {
+ if(!CT.smallWindows) return;
+ if(CT.webFull || CT.theatre || CT.full){
+ exitSmallWindows();
+ return;
+ }
+ var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
+ if(scrollTop>CT.offset()['top']+CT.getHeight()){
+ if(!CK.hasClass('moeplayer-smallwindow')){
+ CK.addClass('moeplayer-smallwindow');
+ eventTarget('smallWindows',true);
+ smallWindowsState=true;
+ if(vars['smallWindowsDrag']){
+ drag(true);
+ }
+ allBarHide();
+ checkVideoRotate();
+ }
+ }
+ else{
+ exitSmallWindows();
+ }
+ },
+ /*
+ * exitSmallWindows
+ * 退出小窗口模式
+ */
+ exitSmallWindows=function(){
+ if(CK.hasClass('moeplayer-smallwindow')){
+ CK.removeClass('moeplayer-smallwindow');
+ if(vars['smallWindowsDrag']){
+ drag();
+ }
+ eventTarget('smallWindows',false);
+ smallWindowsState=false;
+ allBarShow();
+ checkVideoRotate();
+ }
+ },
+ /*
+ * drag
+ * 功能,使节点可拖动
+ * state:是否开启可拖动,默认=false,关闭状态
+ */
+ drag=function(state) {
+ var doc=$(document);
+ var posX = 0,posY = 0,
+ posXRecord = 0,posYRecord = 0;
+ var open=false;
+ if(!isUndefined(state)){
+ open=state;
+ }
+ var mouseDown = function(e) {
+ e.preventDefault && e.preventDefault();
+ e = e || window.event;
+ var client = getClient(e);
+ posXRecord = client['x'];
+ posYRecord = client['y'];
+ doc.mousemove(docMouseMove);
+ doc.mouseup(docMouseUp);
+ CK.css({
+ 'cursor':'move'
+ });
+ };
+ var docMouseMove = function(e) {
+ e = e || window.event;
+ var client = getClient(e);
+ var eleOffset = CK.offset();
+ posY = client['y']-posYRecord;
+ posX = client['x']-posXRecord;
+ posXRecord = client['x'];
+ posYRecord = client['y'];
+ var left=eleOffset['left']+posX;
+ var top=eleOffset['top']+posY;
+ CK.css({
+ 'left':left+'px',
+ 'top':top+'px'
+ });
+ if(CK.css('position')!='fixed'){
+ CK.css({
+ 'position':'fixed'
+ });
+ }
+ isDrag=true;
+ };
+ var docMouseUp = function() {
+ doc.removeListener('mousemove', docMouseMove);
+ doc.removeListener('mouseup', docMouseUp);
+ CK.css({
+ 'cursor':'default'
+ });
+ };
+ if(open){
+ CK.mousedown(mouseDown);
+ }
+ else{
+ CK.unbind('mousedown');
+ }
+ },
+ /*
+ * checkVideoRotate
+ * 检查播放器尺寸
+ */
+ checkVideoRotate=function(){
+ var ckW=CK.getWidth()*nowZoom*0.01,ckH=CK.getHeight()*nowZoom*0.01;
+ var vW=CV.getWidth(),vH=CV.getHeight();
+ CV.css({
+ 'transform':'rotate('+nowRotate+'deg)',
+ '-ms-transform':'rotate('+nowRotate+'deg)',
+ '-moz-transform':'rotate('+nowRotate+'deg)',
+ '-webkit-transform':'rotate('+nowRotate+'deg)',
+ '-o-transform':'rotate('+nowRotate+'deg)',
+ 'width':nowZoom+'%',
+ 'height':nowZoom+'%'
+ });
+ if(nowRotate!=0 && nowRotate!=180){
+ if(vH>ckW && vW>ckH){
+ if(vH / ckW > vW / ckH) {
+ CV.css({
+ 'height':nowZoom+'%',
+ 'width':ckH+'px'
+ });
+ }
+ else {
+ CV.css({
+ 'width':nowZoom+'%',
+ 'height':ckW+'px'
+ });
+ }
+ return;
+ }
+ if(vHckH){
+ CV.css({
+ 'height':nowZoom+'%',
+ 'width':ckH+'px'
+ });
+ }
+ else{
+ if(vH / vW >= ckW / ckH) {
+ CV.css({
+ 'width':nowZoom+'%',
+ 'height':ckW+'px'
+ });
+ }
+ else {
+ CV.css({
+ 'height':nowZoom+'%',
+ 'width':ckH+'px'
+ });
+ }
+ }
+ return;
+ }
+ if(vH>=ckW && vW<=ckH){
+ CV.css({
+ 'width':nowZoom+'%',
+ 'height':ckW+'px'
+ });
+ return;
+ }
+ if(vW>=ckH && vHC['bar'].getHeight()){
+ top-=(getBarHeight()-C['bar'].getHeight());
+ }
+ if(w>ew){
+ left=offset['left']-ckOffset['left']-(w-ew)*.5;
+ }
+ else{
+ left=offset['left']-ckOffset['left']+(ew-w)*.5;
+ }
+ if(align=='left'){
+ left=offset['left']-ckOffset['left']-w;
+ top=offset['top']-ckOffset['top'];
+ }
+ if(!isUndefined(cl)){
+ left=cl['x']-ckOffset['left']-w*.5;
+ }
+ if(left<0){
+ left=0;
+ }
+ if(top<0){
+ top=0;
+ }
+ if(left>CM.getWidth()-w){
+ left=CM.getWidth()-w;
+ }
+ if(top>CM.getHeight()-h){
+ top=CM.getHeight()-h;
+ }
+ C['tip'].css({
+ 'left':left+'px',
+ 'top':top-parseInt(C['tip'].css('margin-bottom'))+'px'
+ });
+ },
+ /*
+ * progressDragX
+ * 功能:制作进度调节框事件
+ */
+ progressDragX=function(){
+ var bg=C['bar']['pbox']['bg'],
+ play=C['bar']['pbox']['play'],
+ slider=C['bar']['pbox']['slider'],
+ mouseLine=C['bar']['pbox']['mouseLine'];
+ slider.unbind();
+ bg.unbind();
+ var pos = 0,
+ posRecord = 0;
+ var doc=$(document);
+ var sliderDownTime=0;
+ var sliderMouseDown = function(e) {
+ e.preventDefault && e.preventDefault();
+ if(!vars['timeScheduleAdjust']){//禁止拖动
+ return;
+ }
+ e = e || window.event;
+ var eleOffset = slider.offset(),bgOffset=bg.offset(),client = getClient(e);
+ pSliderMouseDown=true;
+ posRecord = client['x'];
+ //供比较
+ var left = eleOffset['left']-bgOffset['left'];
+ sliderDownTime=left*duration/(bg.getWidth()-slider.getWidth());
+ slider.removeListener('mousedown', sliderMouseDown);
+ slider.removeListener('touchstart', sliderMouseDown);
+ doc.mousemove(docMouseMove);
+ doc.mouseup(docMouseUp);
+ slider.touchmove(docMouseMove);
+ slider.touchend(docMouseUp);
+ noScrolling(true);
+ };
+ var docMouseMove = function(e) {
+ e = e || window.event;
+ var eleOffset = slider.offset(),bgOffset=bg.offset(),client = getClient(e);
+ pSliderMouseDown=true;
+ pos = posRecord - client['x'];
+ posRecord = client['x'];
+ var left = eleOffset['left'] - pos-bgOffset['left'];
+ if(left<0){
+ left=0;
+ }
+ if(left>bg.getWidth()-slider.getWidth()){
+ left=bg.getWidth()-slider.getWidth();
+ }
+ C['bar']['pbox'].addClass('ck-bar-progress-slider-move');
+ //预览时间
+ var time='';
+ if(!vars['live']){
+ time=left*duration/(bg.getWidth()-slider.getWidth());
+ switch(vars['timeScheduleAdjust']){
+ case 2://只能前进(向右拖动
+ if(timesliderDownTime){
+ left=-1000;
+ message(language['timeScheduleAdjust']['prohibitForward']);
+ return;
+ }
+ break;
+ case 4://只能前进但能回到第一次拖动时的位置
+ if(timemaxSeeTime){
+ left=-1000;
+ player.seek(maxSeeTime);
+ message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
+ return;
+ }
+ break;
+ }
+ time=formatSeconds(time);
+ }
+ else{
+ time=formatLiveTime(left*getLiveTime()/(bg.getWidth()-slider.getWidth()));
+ }
+ tip(slider,time);
+ if(left>=0){
+ slider.css({
+ 'left': left + 'px'
+ });
+ play.css({
+ 'width': left+ slider.getWidth()*.5+ 'px'
+ });
+ }
+ else{
+ pSliderMouseDown=false;
+ }
+
+ };
+ var docMouseUp = function() {
+ noScrolling();
+ doc.removeListener('mousemove', docMouseMove);
+ doc.removeListener('mouseup', docMouseUp);
+ slider.removeListener('touchmove', docMouseMove);
+ slider.removeListener('touchend', docMouseUp);
+ slider.mousedown(sliderMouseDown);
+ slider.touchstart(sliderMouseDown);
+ if(!vars['live']){
+ var time=play.getWidth()*duration/(bg.getWidth()-slider.getWidth()*.5);
+ if(time>duration){
+ time=duration;
+ }
+ seekTime=0;
+ player.seek(time);
+ }
+ else{
+ var playbackTime=parseInt(vars['live']+play.getWidth()*getLiveTime()/(bg.getWidth()-slider.getWidth()*.5));
+ eventTarget('playback',{time:playbackTime,date:date('Y-m-d H:i:s',playbackTime)});
+ eventTarget('seek',{time:playbackTime,state:'seeking',date:date('Y-m-d H:i:s',playbackTime)});
+ }
+ C['bar']['pbox'].removeClass('ck-bar-progress-slider-move');
+ if(isMouseLeave){
+ tip();
+ }
+ };
+ var isMouseLeave=true;//默认鼠标离开了进度按钮上
+ var sliderMouseOver=function(){
+ var time='';
+ if(!vars['live']){
+ time=formatSeconds(parseInt(slider.css('left'))*duration/(bg.getWidth()-slider.getWidth()));
+ }
+ else{
+ time=language['live'];
+ }
+ isMouseLeave=false;
+ tip(slider,time);
+ };
+
+ var sliderMouseLeave=function(){
+ isMouseLeave=true;
+ };
+ slider.mousedown(sliderMouseDown);
+ slider.mouseover(sliderMouseOver);
+ slider.mouseleave(sliderMouseLeave);
+ slider.touchstart(sliderMouseDown);
+ var bgMouseDown=function(e){
+ e = e || window.event;
+ var client = getClient(e);
+ var bgOffset=bg.offset();
+ var w=client['x']-bgOffset['left'];
+ if(CT.full){
+ w+=CK.offset()['left'];
+ }
+ if(!vars['live']){
+ var time=duration*w/bg.getWidth();
+ switch(vars['timeScheduleAdjust']){
+ case 0://禁止拖动
+ message(language['timeScheduleAdjust']['prohibit']);
+ return;
+ break;
+ case 2://只能前进(向右拖动
+ if(timeoldTime){
+ message(language['timeScheduleAdjust']['prohibitForward']);
+ return;
+ }
+ break;
+ case 4://只能前进但能回到第一次拖动时的位置
+ if(timemaxSeeTime){
+ message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
+ return;
+ }
+ break;
+ }
+ seekTime=0;
+ player.seek(time);
+ }
+ else{
+ var playbackTime=parseInt(vars['live']+getLiveTime()*w/bg.getWidth());
+ eventTarget('playback',{time:playbackTime,date:date('Y-m-d H:i:s',playbackTime)});
+ eventTarget('seek',{time:playbackTime,state:'seeking',date:date('Y-m-d H:i:s',playbackTime)});
+ }
+ if(w>bg.getWidth()-slider.getWidth()*.5){
+ w=bg.getWidth()-slider.getWidth()*.5
+ }
+ if(wmaxTop){
+ sliderTop=maxTop;
+ }
+ slider.css({
+ 'top':sliderTop+'px'
+ });
+ var ppMarginTop=sliderTop-minTop+slider.getHeight()*0.5;
+ pp.css({
+ 'margin-top':ppMarginTop+'px'
+ });
+ var vol=(bg.getHeight()-ppMarginTop-slider.getHeight()*0.5)/(bg.getHeight()-slider.getHeight());
+ player.volume(vol);
+ };
+ var docMouseUp = function() {
+ noScrolling();
+ doc.removeListener('mousemove', docMouseMove);
+ doc.removeListener('mouseup', docMouseUp);
+ slider.removeListener('touchmove', docMouseMove);
+ slider.removeListener('touchend', docMouseUp);
+ slider.mousedown(sliderMouseDown);
+ slider.touchstart(sliderMouseDown);
+ C['bar']['vbox']['mouseDown']=false;
+ };
+ slider.mousedown(sliderMouseDown);
+ slider.touchstart(sliderMouseDown);
+ var bgMouseDown=function(e){
+ e = e || window.event;
+ var client = getClient(e);
+ var bgOffset=bg.offset();
+ var h=client['y']-bgOffset['top'];
+ var max=bg.getHeight();
+ var vol=1-h/max;
+ player.volume(vol);
+ };
+ bg.mousedown(bgMouseDown);
+ },
+ /*
+ * changeProgress
+ * 功能:根据时间调节播放进度
+ */
+ changeProgress=function(time){
+ if((valType(vars['live'])=='boolean' && vars['live'])){
+ return;
+ }
+ if(!pSliderMouseDown){
+ var bg=C['bar']['pbox']['bg'],slider=C['bar']['pbox']['slider'];
+ var playW=(time/duration)*100;
+
+ if(valType(vars['live'])=='number'){
+ playW='100';
+ }
+ C['bar']['pbox']['play'].css({'width':playW+'%'});
+ var sliderW=(slider.getWidth()/bg.getWidth())*100;
+ var sliderLeft=playW-sliderW*.5;
+ if(sliderLeft<0){
+ sliderLeft=0;
+ }
+ if(sliderLeft>100-sliderW){
+ sliderLeft=100-sliderW;
+ }
+ C['bar']['pbox']['slider'].css({'left':sliderLeft+'%'});
+ checkProgressSlider();
+ }
+ },
+ /*
+ * checkProgressSlider
+ * 功能:检查设置播放进度条位置
+ */
+ checkProgressSlider=function(){
+ var bg=C['bar']['pbox']['bg'],slider=C['bar']['pbox']['slider'];
+ var st=0;
+ if(C['bar']['pbox'].css('transition-duration')){
+ st=parseFloat(C['bar']['pbox'].css('transition-duration'))*1000+20;
+ }
+ var checkThis=function(){
+ var sliderLeft=parseInt(C['bar']['pbox']['slider'].css('left'));
+ if(sliderLeft<0){
+ sliderLeft=0;
+ C['bar']['pbox']['slider'].css({'left':sliderLeft+'px'});
+ }
+ if(sliderLeft>bg.getWidth()-slider.getWidth()){
+ sliderLeft=bg.getWidth()-slider.getWidth();
+ C['bar']['pbox']['slider'].css({'left':sliderLeft+'px'});
+ }
+ };
+ setTimeout(checkThis,st);
+ },
+ /*
+ * changeTopTime
+ * 功能:修改顶部右侧时间
+ */
+ changeTopTime=function(){
+ C['topBar']['timeEle'].htm(date('H:i:s'));
+ setTimeout(changeTopTime,1000);
+ },
+ /*
+ * changeVolumeSlider
+ * 功能:根据音量改变滑块位置
+ */
+ changeVolumeSlider=function(vol){
+ if(!isUndefined(C['bar']['vbox'])){
+ var box=C['bar']['vbox']['volume']['box'],
+ bg=C['bar']['vbox']['volume']['bg'],
+ pp=C['bar']['vbox']['volume']['pp'],
+ slider=C['bar']['vbox']['volume']['slider'];
+ C['bar']['vbox']['volume']['txt'].htm(parseInt(vol*100));
+ var bgH=bg.getHeight();
+ if(bgH){
+ var ppMarginTop=bgH-vol*bgH;
+ pp.css({
+ 'margin-top':ppMarginTop+'px'
+ });
+ var sliderTop=bg.offset()['top']-box.offset()['top']+ppMarginTop-slider.getHeight()*0.5;
+ slider.css({
+ 'top':sliderTop+'px'
+ });
+ }
+ }
+ },
+ /*
+ * changeLoad
+ * 功能:获取视频已加载部分并修改加载进度栏
+ */
+ changeLoad=function(){
+ if(video){
+ var len = video.buffered.length;
+ if(len>0){
+ var bufferEnd = video.buffered.end(len-1);
+ if(loadTime= 1000) {
+ last += offset;
+ appendFps(fps);
+ fps = 0;
+ }
+ requestAnimationFrame(step);
+ };
+ var appendFps = function(fps) {
+ if(fps!=CT.fps){
+ CT.fps=fps;
+ replaceInformation('fps',fps);
+ eventTarget('fps',fps);
+ }
+
+ };
+ if(isUndefined(CT.fps)){
+ CT.fps=0;
+ }
+ step();
+ },
+ /*
+ * getElement
+ * 功能:获取一个外部节点
+ */
+ getElement=function(content){
+ var ele=$(content);
+ if(isUndefined(ele)) return;
+ if(valType(ele)=='htmlarray'){
+ ele=ele[0];
+ }
+ if(isUndefined(ele.captureParentNode)){
+ ele.captureParentNode = ele.parentNode;
+ ele.prevElement=ele.prev();
+ ele.nextElement=ele.next();
+ }
+ return ele;
+ },
+ /*
+ * $
+ * 功能:根据ID或className或节点节点名称获取对象
+ */
+ $=function(obj, eL) {
+ var parent = null;
+ if (document) {
+ parent = document;
+ }
+ if (!isUndefined(eL)) {
+ parent = eL;
+ }
+ var res = [];
+ if (obj) {
+ if (valType(obj) == 'htmlobject' || valType(obj)=='object') {
+ res = obj;
+ if (!isUndefined(res.moeplayer)) {
+ return res;
+ }
+ }
+ else if (valType(obj) == 'string' && obj!='') {
+ switch (obj.substr(0, 1)) {
+ case '.':
+ obj = obj.substr(1, obj.length);
+ if (parent.getElementsByClassName) {
+ res = parent.getElementsByClassName(obj);
+ if (!res.length) {
+ return null;
+ }
+ }
+ else if (!parent && document.getElementsByClassName) {
+ res = document.getElementsByClassName(obj);
+ if (!res.length) {
+ return null;
+ }
+ }
+ else {
+ var reg = new RegExp(' ' + obj + ' ', 'i');
+ var ele = null;
+ if (parent.getElementsByTagName) {
+ ele = parent.getElementsByTagName('*');
+ } else {
+ ele = document.getElementsByTagName('*');
+ }
+ for (var i = 0; i < ele.length; i++) {
+ if (reg.test(' ' + ele[i].className + ' ')) {
+ res.push(ele[i]);
+ }
+ }
+ }
+ if (res) {
+ if (res.length === 0) {
+ res = null;
+ }
+ }
+ break;
+ case '#':
+ obj = obj.substr(1, obj.length);
+ if (parent.getElementById) {
+ res = parent.getElementById(obj);
+ } else {
+ res=document.getElementById(obj);
+ }
+ break;
+ default:
+ var reg = new RegExp(' ' + obj + ' ', 'i');
+ if (parent.getElementsByTagName) {
+ res = parent.getElementsByTagName(obj);
+ } else {
+ res = document.getElementsByTagName(obj);
+ }
+ if (res) {
+ if (obj == 'body' || obj == 'document' || obj == 'html') {
+ res = res[0];
+ } else if (res.length === 0) {
+ res = null;
+ }
+ } else {
+ res = null;
+ }
+ break;
+ }
+ }
+ else {
+ res = obj;
+ }
+ }
+ else {
+ res = document;
+ }
+
+ if (res) {
+ if (valType(res) == 'htmlobject' || valType(res) == 'object' || valType(res) == 'document') {
+ res.moeplayer = 'Thanks for using';
+ /*
+ * find
+ * 功能:在当前节点中查找指定节点
+ */
+ res.find = function(obj) {
+ return $(obj, this);
+ };
+ /*
+ * attr
+ * 功能:修改或获取节点的属性值
+ * @key不能为空,指属性名称,$value不为空则设置属性值,为空则获取属性值
+ */
+ res.attr = function(key, value) {
+ if (isUndefined(value)) {
+ return this.getAttribute(key);
+ }
+ else {
+ this.setAttribute(key, value);
+ return this;
+ }
+ };
+ /*
+ * removeAtt
+ * 功能:删除节点的属性值
+ * @key不能为空,指属性名称
+ */
+ res.removeAttr = function(key) {
+ this.removeAttribute(key);
+ return this;
+ };
+ /*
+ * css
+ * 功能:修改或获取节点的样式样式
+ * @key不能为空,指属性名称,$value不为空则设置属性值,为空则获取属性值
+ */
+ res.css = function(key, value) {
+ // 拆解字符串并将第二单词首字母大写
+ var keyNew = function(str) {
+ // 当属性名有横杠时
+ if (str.indexOf('-') != -1) {
+ var arr = str.split('-');
+ var a = arr[0];
+ var b = '',
+ c = '';
+ if (arr.length > 1) {
+ b = arr[1].substr(0, 1).toLocaleUpperCase() + arr[1].substr(1, arr[1].length - 1);
+ }
+ if (arr.length > 2) {
+ b = arr[2].substr(0, 1).toLocaleUpperCase() + arr[2].substr(1, arr[2].length - 1);
+ }
+ return a + b + c;
+ }
+ // 没有横杠就不进行字符串拆解
+ return str;
+ };
+ if (isUndefined(value)){
+ if (!isUndefined(key) && valType(key) == 'string') {
+ if (this.currentStyle) {
+ return this.currentStyle[key];
+ } else {
+ return document.defaultView.getComputedStyle(this, null)[key];
+ }
+ }
+ if (isUndefined(key)) {
+ if (this.currentStyle) {
+ return this.currentStyle;
+ } else {
+ return document.defaultView.getComputedStyle(this, null);
+ }
+ }
+ }
+ // 当传进来的参数key不是一个对象,给节点添加css样式
+ if (valType(key) != 'object') {
+ var newKey = keyNew(key);
+ if (this.length > 1) {
+ // 如果this有多个值,那给每个节点都添加样式
+ for (var i = 0; i < this.length; i++) {
+ this[i].style[newKey] = value;
+ }
+ } else {
+ this.style[newKey] = value;
+ }
+ } else {
+ //如果第一个值是一个对象,遍历这个对象,并将属性名传进函数进行拆解
+ for (var item in key) {
+ var objKey = keyNew(item);
+ if (valType(this) == 'htmlarray') {
+ for (var i = 0; i < this.length; i++) {
+ this[i].style[objKey] = key[item];
+ }
+ } else {
+ this.style[objKey] = key[item];
+ }
+ }
+ }
+ return this;
+ };
+ res.hasClass = function(cName) {
+ if (isUndefined(cName)) return false;
+ var reg = new RegExp('(\\s|^)' + cName + '(\\s|$)');
+ if (this.className && this.className.match(reg)) {
+ return true;
+ }
+ return false;
+ };
+ res.addClass = function(cName) {
+ if (!this.hasClass(cName)) {
+ if (this.className && this.className.substr(this.className.length - 1, 1) != ' ') {
+ this.className += ' ';
+ }
+ this.className += cName;
+ };
+ return this;
+ };
+ res.removeClass = function(cName) {
+ if (this.hasClass(cName)) {
+ this.className = this.className.replace(new RegExp('(\\s|^)' + cName + '(\\s|$)'), ' ');
+ if (this.className.substr(this.className.length - 1, 1) == ' ') {
+ this.className = this.className.substr(0, this.className.length - 1);
+ }
+ if (!this.className) {
+ this.removeAttribute('class');
+ }
+ };
+ return this;
+ };
+ res.searchClass = function(cName) {
+ var arr = this.className.split(' ');
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i].substr(0, cName.length) == cName) {
+ return arr[i];
+ }
+ }
+ return this;
+ };
+ res.removeCss=function(cName){
+ var cs=this.attr('style');
+ if(cs){
+ var arr=cs.split(';');
+ var obj={};
+ for(var i=0;i= m + 1) {
+ return this[m];
+ }
+ return null;
+ }
+ return null;
+ };
+ for (var i = 0; i < res.length; i++) {
+ if ($) {
+ try {
+ res[i] = $(res[i]);
+ } catch (event) {}
+ }
+ }
+ }
+
+ }
+ return res;
+ },
+ /*
+ * createlDiv
+ * 功能:新建一个DIV节点
+ */
+ createlDiv=function(className,html) {
+ var ele = document.createElement('div');
+ var eleObject = $(ele);
+ if (className) {
+ eleObject.addClass(className);
+ }
+ if(html){
+ eleObject.htm(html);
+ }
+ return eleObject;
+ },
+ /*
+ * createlVideo
+ * 功能:新建一个video节点
+ */
+ createlVideo=function() {
+ var ele = document.createElement('video');
+ var eleObject = $(ele);
+ return eleObject;
+ },
+ /*
+ * createlButton
+ * 功能新建一个button节点
+ */
+ createlButton=function(className,html) {
+ var ele = document.createElement('button');
+ var eleObject = $(ele);
+ eleObject.attr('type','button');
+ if (className) {
+ eleObject.addClass(className);
+ }
+ if(html){
+ eleObject.htm(html);
+ }
+ return eleObject;
+ },
+ /*
+ * createlA
+ * 功能新建一个a节点
+ */
+ createlA=function(html,href,className) {
+ var ele = document.createElement('a');
+ var eleObject = $(ele);
+ if(html){
+ eleObject.htm(html);
+ }
+ if(!isUndefined(href) && href){
+ eleObject.attr('href',href);
+ eleObject.attr('target','_blank');
+ }
+ if (className) {
+ eleObject.addClass(className);
+ }
+ return eleObject;
+ },
+ /*
+ * createlJsLink
+ * 功能新建一个a节点
+ */
+ createlJsLink=function(html,js) {
+ var ele = document.createElement('a');
+ var eleObject = $(ele);
+ if(html){
+ eleObject.htm(html);
+ }
+ if(!isUndefined(js) && js){
+ eleObject.attr('href','javascript:'+js+'()');
+ }
+ else{
+ eleObject.attr('href','javascript:;');
+ }
+ return eleObject;
+ },
+ /*
+ * createlImg
+ * 功能新建一个img节点
+ */
+ createlImg=function(file,className) {
+ var ele = document.createElement('img');
+ var eleObject = $(ele);
+ if (className) {
+ ele.className = className;
+ }
+ if(file){
+ ele.src=file;
+ }
+ return eleObject;
+ },
+ /*
+ * getClient
+ * 功能:获取clientX和clientY
+ */
+ getClient=function(event) {
+ var eve = event || window.event;
+ if (isUndefined(eve)) {
+ eve = {
+ clientX: 0,
+ clientY: 0
+ };
+ }
+ var x=eve.clientX + (document.documentElement.scrollLeft || $('body').scrollLeft),
+ y=eve.clientY + (document.documentElement.scrollTop || $('body').scrollTop);
+ if(isUndefined(x.toString()) || x.toString()=='NaN'){
+ x=eve.touches[0].clientX
+ }
+ if(isUndefined(y.toString()) || y.toString()=='NaN'){
+ y=eve.touches[0].clientY
+ }
+ if(x.toString()=='NaN'){
+ x=0;
+ }
+ if(y.toString()=='NaN'){
+ y=0;
+ }
+ return {
+ x: x,
+ y: y
+ }
+ },
+ /*
+ * getLiveTime
+ * 功能:获取直播回放时间
+ */
+ getLiveTime=function(){
+ var notTime=Date.now();
+ var varsTime=vars['live'];
+ if(varsTime.toString().length<13){
+ varsTime=varsTime*1000;
+ }
+ return notTime-varsTime;
+ },
+ /*
+ * formatLiveTime
+ * 功能:将直播的时间戳格式化成标准时间
+ */
+ formatLiveTime=function(time){
+ var varsTime=vars['live'];
+ if(varsTime.toString().length<13){
+ varsTime=varsTime*1000;
+ }
+ varsTime+=time;
+ return language['lookBack']+date('H:i:s',varsTime);
+ },
+ /*
+ * loadJs
+ * 功能:加载js文件并在加载完成后执行callback函数
+ * @file:js文件地址
+ * @callback:加载完成后执行的函数
+ */
+ loadJs=function(file, callback) {
+ var fn =function() {};
+ if(!isUndefined(callback)){
+ fn=callback;
+ }
+ if(checkJs(file)){
+ fn();
+ return;
+ }
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+ var isReady = false;
+ var timer = null;
+ var doReady = function() {
+ if(timer){
+ clearInterval(timer);
+ }
+ if(isReady) return;
+ isReady = true;
+ if(valType(fn) == 'function') {
+ fn();
+ }
+ };
+ var bodyLoad = function() {
+ timer = setInterval(function() {
+ try {
+ if(!isUndefined(script.readyState) && script.readyState == 'complete') {
+ doReady();
+ }
+ } catch(event) {};
+ }, 10);
+ };
+ var w3c = function() {
+ if(valType(fn) == 'function') {
+ fn();
+ }
+ removeListener(script, 'load', w3c);
+ removeListener(script, 'error', w3cError);
+ };
+ var w3cError = function() {
+ if(valType(fn) == 'function') {
+ fn();
+ }
+ removeListener(script, 'load', w3c);
+ removeListener(script, 'error', w3cError);
+ };
+ try {
+ addListener(script, 'load', w3c);
+ addListener(script, 'error', w3cError);
+ } catch(event) {
+ bodyLoad();
+ }
+ script.src = file;
+ $('head').eq(0).append(script);
+ },
+
+ /*
+ * doubleClickEvent
+ * 功能:注册对象双击功能
+ * @ele:注册对象,可以是页面中的任意节点,不支持数组形式
+ */
+ doubleClickEvent=function(ele){
+ var setTime=null;//注册延时函数
+ var clickTime=0;//记录点击时间
+ ele=$(ele);
+ ele.click(function(){
+ if(!setTime){
+ setTime=setTimeout(function(){
+ try{
+ ele.dispatchEvent(new Event('sigClick'));//注册单击,针对视频播放器使用
+ }
+ catch(event){
+ var e = document.createEvent('HTMLEvents');
+ e.initEvent('sigClick', false, true);
+ ele.dispatchEvent(e);
+ }
+ clickTime=0;
+ setTime=null;
+ },260);
+ }
+ if(!clickTime){
+ clickTime=new Date().getTime();
+ }
+ else{
+ if(new Date().getTime()-clickTime<230){//认为是双击
+ try{
+ ele.dispatchEvent(new Event('dobClick'));//注册双击
+ }
+ catch(event){
+ var e = document.createEvent('HTMLEvents');
+ e.initEvent('dobClick', false, true);
+ ele.dispatchEvent(e);
+ }
+ clearTimeout(setTime);
+ clickTime=0;
+ setTime=null;
+ }
+ }
+ });
+ },
+ /*
+ * noScrolling
+ * 功能,禁止页面滚动操作
+ */
+ noScrolling=function(b){
+ if(isUndefined(b)) b=false;
+ var bodyScroll=function (event){
+ event.preventDefault();
+ };
+ if(b){ //禁止滚动
+ $('body').addListener('touchmove', bodyScroll, {passive: false });
+ }
+ else{ //开启滚动
+ $('body').removeListener('touchmove',bodyScroll, {passive: false});
+ }
+ };
+ return into(videoObj);
+ }
+
+export default moeplayerEmbed;
diff --git a/src/defaults.js b/src/defaults.js
new file mode 100644
index 0000000..d0b9abc
--- /dev/null
+++ b/src/defaults.js
@@ -0,0 +1,62 @@
+ /*
+ * videoObjectDefault
+ * 功能:静态变量,默认播放配置,当外部传递过来的配置有未包含在varsDefault里的,则使用varsDefault里的配置
+ */
+ var videoObjectDefault= {
+ container: '',//视频容器的ID
+ volume: 0.8,//默认音量,范围0-1
+ poster: '',//封面图片地址
+ autoplay: false,//是否自动播放
+ loop: false,//是否需要循环播放
+ live: false,//是否是直播
+ rotate:0,//视频旋转角度
+ zoom:0,//默认缩放比例
+ ad:null,//广告
+ backLive:false,//显示返回直播按钮
+ seek: 0,//默认需要跳转的秒数
+ next: null,//下一集按钮动作
+ loaded: '',//加载播放器后调用的函数
+ plug: '',//使用插件
+ duration:0,//视频总时间
+ preview: null,//预览图片对象
+ prompt: null,//提示点功能
+ crossOrigin:'',//跨域请求字符
+ video: null,//视频地址
+ type:'',//视频类型
+ playbackrate: 1,//默认倍速
+ ended:null,//结束显示的内容
+ webFull:false,//页面全屏按钮事件
+ theatre:null,//剧场模式
+ controls:false,//是否显示自带控制栏
+ rightBar:null,//是否开启右边控制栏
+ smallWindows:null,//是否启用小窗口模式
+ smallWindowsDrag:true,//当处于小窗口模式时是否可拖动播放器
+ screenshot:false,//截图功能是否开启
+ timeScheduleAdjust:1,//是否可调节播放进度,0不启用,1是启用,2是只能前进(向右拖动),3是只能后退,4是只能前进但能回到第一次拖动时的位置,5是看过的地方可以随意拖动
+ logo:'',//logo
+ menu:null,//右键菜单
+ information:{//关于
+ 'Load:':'{loadTime} second',
+ 'Duration:':'{duration} second',
+ 'Size:':'{videoWidth}x{videoHeight}',
+ 'Volume:':'{volume}%',
+ 'Fps:':'{fps}fps',
+ 'Sudio decoded:':'{audioDecodedByteCount} Byte',
+ 'Video decoded:':'{videoDecodedByteCount} Byte'
+ },
+ track:null,//字幕
+ title:'',//视频标题
+ language:'',//语言包文件
+ barHideTime:1500,//控制栏隐藏时间
+ playbackrateOpen:true,//是否开启控制栏倍速选项
+ playbackrateList:[0.75,1,1.25,1.5,2,4],//倍速配置值
+ cookie:null,//开启cookie功能
+ domain:null,//指定cookie保存的域
+ cookiePath:'/',//指定cookie保存路径
+ documentFocusPause:false,//窗口失去焦点后暂停播放
+ mouseWheelVolume:2,//是否启用鼠标滚轮调节音量功能,0=不启用,1=启用,2=全屏时才启用
+ keyVolume:2,//是否启用键盘控制音量调节,0=不启用,1=启用,2=全屏时才启用
+ errorShow:true//是否显示错误信息
+ };
+
+export { videoObjectDefault };
diff --git a/src/index.js b/src/index.js
new file mode 100644
index 0000000..922a355
--- /dev/null
+++ b/src/index.js
@@ -0,0 +1,9 @@
+/*
+ * 软件名称:MoePlayer
+ * 版本:X3
+ * 版权:MoePlayer 项目(fork 自 ckplayer, www.ckplayer.com)
+ * 开源协议:MIT
+ */
+import moeplayerEmbed from './core/moeplayerEmbed.js';
+
+export default moeplayerEmbed;
diff --git a/src/language.js b/src/language.js
new file mode 100644
index 0000000..81b868c
--- /dev/null
+++ b/src/language.js
@@ -0,0 +1,69 @@
+ /*
+ * language
+ * 功能:静态变量,包含播放器用到的默认语言包
+ * 引入其它语言js后该变量将被替换成新引入的语言包
+ */
+ var language={
+ play:'%E6%92%AD%E6%94%BE',
+ pause:'%E6%9A%82%E5%81%9C',
+ refresh:'%E9%87%8D%E6%92%AD',
+ full:'%E5%85%A8%E5%B1%8F',
+ exitFull:'%E9%80%80%E5%87%BA%E5%85%A8%E5%B1%8F',
+ webFull:'%E9%A1%B5%E9%9D%A2%E5%85%A8%E5%B1%8F',
+ exitWebFull:'%E9%80%80%E5%87%BA%E9%A1%B5%E9%9D%A2%E5%85%A8%E5%B1%8F',
+ theatre:'%E5%89%A7%E5%9C%BA%E6%A8%A1%E5%BC%8F',
+ exitTheatre:'%E9%80%80%E5%87%BA%E5%89%A7%E5%9C%BA%E6%A8%A1%E5%BC%8F',
+ volume:'%E9%9F%B3%E9%87%8F%EF%BC%9A',
+ muted:'%E9%9D%99%E9%9F%B3',
+ exitmuted:'%E6%81%A2%E5%A4%8D%E9%9F%B3%E9%87%8F',
+ seek:'seek%EF%BC%9A',
+ waiting:'%E7%BC%93%E5%86%B2',
+ live:'%E7%9B%B4%E6%92%AD%E4%B8%AD',
+ backLive:'%E8%BF%94%E5%9B%9E%E7%9B%B4%E6%92%AD',
+ lookBack:'%E5%9B%9E%E7%9C%8B%EF%BC%9A',
+ next:'%E4%B8%8B%E4%B8%80%E9%9B%86',
+ screenshot:'%E8%A7%86%E9%A2%91%E6%88%AA%E5%9B%BE',
+ smallwindows:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E6%92%AD%E6%94%BE%E5%8A%9F%E8%83%BD',
+ playbackrate:'%E5%80%8D%E9%80%9F',
+ playbackrateSuffix:'%E5%80%8D',
+ track:'%E5%AD%97%E5%B9%95',
+ noTrack:'%E6%97%A0%E5%AD%97%E5%B9%95',
+ definition:'%E6%B8%85%E6%99%B0%E5%BA%A6',
+ switchTo:'%E5%88%87%E6%8D%A2%E6%88%90%EF%BC%9A',
+ closeTime:'%7Bseconds%7D%E7%A7%92%E5%90%8E%E5%8F%AF%E5%85%B3%E9%97%AD%E5%B9%BF%E5%91%8A',
+ closeAd:'%E5%85%B3%E9%97%AD%E5%B9%BF%E5%91%8A',
+ second:'%E7%A7%92',
+ details:'%E6%9F%A5%E7%9C%8B%E8%AF%A6%E6%83%85',
+ copy:'%E5%A4%8D%E5%88%B6',
+ copySucceeded:'%E5%A4%8D%E5%88%B6%E6%88%90%E5%8A%9F%EF%BC%8C%E5%8F%AF%E8%B4%B4%E7%B2%98%EF%BC%81',
+ smallwindowsOpen:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%BC%80%E5%90%AF',
+ smallwindowsClose:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD',
+ screenshotStart:'%E6%88%AA%E5%9B%BE%E4%B8%AD%EF%BC%8C%E8%AF%B7%E7%A8%8D%E5%80%99...',
+ screenshotClose:'%E6%88%AA%E5%9B%BE%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD',
+ loopOpen:'%E5%BE%AA%E7%8E%AF%E6%92%AD%E6%94%BE',
+ loopClose:'%E5%B7%B2%E5%85%B3%E9%97%AD%E5%BE%AA%E7%8E%AF%E6%92%AD%E6%94%BE',
+ close:'%E5%85%B3%E9%97%AD',
+ down:'%E4%B8%8B%E8%BD%BD',
+ p50:'50%25',
+ p75:'75%25',
+ p100:'100%25',
+ timeScheduleAdjust:{
+ prohibit:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%8B%96%E5%8A%A8',
+ prohibitBackOff:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E9%87%8D%E5%A4%8D%E8%A7%82%E7%9C%8B',
+ prohibitForward:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E5%BF%AB%E8%BF%9B',
+ prohibitLookBack:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%92%AD%E6%94%BE%E9%83%A8%E5%88%86%E5%86%85%E5%AE%B9',
+ prohibitForwardNotViewed:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%92%AD%E6%94%BE%E6%9C%AA%E8%A7%82%E7%9C%8B%E7%9A%84%E9%83%A8%E5%88%86'
+ },
+ error:{
+ noMessage:'%E6%9C%AA%E7%9F%A5%E9%94%99%E8%AF%AF',
+ supportVideoError:'%E8%AF%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E7%89%88%E6%9C%AC%E5%A4%AA%E4%BD%8E%EF%BC%8C%E5%BB%BA%E8%AE%AE%E6%9B%B4%E6%8D%A2%E6%88%90%E5%85%B6%E5%AE%83%E6%B5%8F%E8%A7%88%E5%99%A8',
+ videoTypeError:'%E8%AF%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%8D%E6%94%AF%E6%8C%81%E6%92%AD%E6%94%BE%E8%AF%A5%E8%A7%86%E9%A2%91%EF%BC%8C%E5%BB%BA%E8%AE%AE%E6%9B%B4%E6%8D%A2%E6%88%90%E5%85%B6%E5%AE%83%E6%B5%8F%E8%A7%88%E5%99%A8',
+ loadingFailed:'%E5%8A%A0%E8%BD%BD%E5%A4%B1%E8%B4%A5',
+ emptied:'%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%E5%8A%A0%E8%BD%BD%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF',
+ screenshot:'%E8%A7%86%E9%A2%91%E6%88%AA%E5%9B%BE%E5%A4%B1%E8%B4%A5',
+ ajax:'Ajax%E6%95%B0%E6%8D%AE%E8%AF%B7%E6%B1%82%E9%94%99%E8%AF%AF',
+ noVideoContainer:'%E6%9C%AA%E6%89%BE%E5%88%B0%E6%94%BE%E7%BD%AE%E8%A7%86%E9%A2%91%E7%9A%84%E5%AE%B9%E5%99%A8'
+ }
+ };
+
+export { language };
diff --git a/src/utils/cookie.js b/src/utils/cookie.js
new file mode 100644
index 0000000..8dea399
--- /dev/null
+++ b/src/utils/cookie.js
@@ -0,0 +1,64 @@
+import { isUndefined } from './type.js';
+
+ /*
+ * cookie
+ * 功能,操作cookie
+ */
+ function cookie(name,value,domain,path){
+ if(isUndefined(domain)){
+ domain='';
+ }
+ if(isUndefined(path)){
+ path='/';
+ }
+ var ckStr=';domain='+domain+';path='+path;
+ if(location.protocol=='https'){
+ ckStr+=';SameSite=None;Secure=true';
+ }
+ var set=function(name,value){
+ var time = 360*24*60*60*1000;
+ var exp = new Date();
+ exp.setTime(exp.getTime() + time);
+ try{
+ document.cookie = name + '='+ escape (value) + ';expires=' + exp.toGMTString()+ckStr;
+ }
+ catch(event){console.error(event)}
+ },
+ get=function(name){
+ var arr,reg=new RegExp('(^| )'+name+'=([^;]*)(;|$)');
+ if(arr=document.cookie.match(reg)){
+ return unescape(arr[2]);
+ }
+ else{
+ return null;
+ }
+ },
+ del=function(name){
+ var exp = new Date();
+ exp.setTime(exp.getTime() - 1);
+ var cval=get(name);
+ if(cval!=null){
+ document.cookie= name + '='+cval+';expires='+exp.toGMTString()+ckStr;
+ }
+ };
+ if(!isUndefined(name) && !isUndefined(value)){
+ if(value=='delete'){
+ del(name);
+ return null;
+ }
+ else{
+ set(name,value);
+ return get(name);
+ }
+
+ }
+ else if(!isUndefined(name) && isUndefined(value)){
+ return get(name);
+ }
+ else if(!isUndefined(name)){
+
+ }
+ }
+
+
+export { cookie };
diff --git a/src/utils/dom.js b/src/utils/dom.js
new file mode 100644
index 0000000..14d794e
--- /dev/null
+++ b/src/utils/dom.js
@@ -0,0 +1,220 @@
+import { valType, isUndefined } from './type.js';
+
+ /*
+ * documentReady
+ * 功能:判断页面加载完成
+ * @fn:页面加载完成后执行的函数
+ */
+ function documentReady(fn) {
+ var isReady = false;
+ var timer = null;
+ var doReady = function() {
+ if(timer) clearInterval(timer);
+ if(isReady) return;
+ isReady = true;
+ if(valType(fn) == 'function') {
+ fn();
+ }
+ };
+ var bodyLoad = function() {
+ timer = setInterval(function() {
+ try {
+ if(!isUndefined(document.readyState) && document.readyState == 'complete') {
+ doReady();
+ }
+ } catch(event) {};
+ }, 10);
+ };
+ var w3c = function() {
+
+ if(valType(fn) == 'function') {
+ fn();
+ }
+ removeListener(window, 'load', w3c);
+ };
+ if(!isUndefined(document.body)){
+ if(valType(fn) == 'function') {
+ fn();
+ }
+ }
+ else{
+ try {
+ addListener(window, 'load', w3c);
+ } catch(event) {
+ bodyLoad();
+ }
+ }
+
+ }
+
+ /*
+ * checkJs
+ * 功能:判断js是否已加载
+ * @file:js文件路径
+ */
+ function checkJs(file) {
+ var scriptList = document.scripts;
+ for (var i = 0; i < scriptList.length; i++) {
+ if(scriptList[i].src==file){
+ return scriptList[i];
+ }
+ }
+ return false;
+ }
+
+ /*
+ * getMaxZIndex
+ * 功能:获取当前页面最大深度
+ */
+ function getMaxZIndex() {
+ var arr = document.all || document.querySelectorAll('*');
+ var maxZ = -1;
+ for (var i = 0; i < arr.length; i++) {
+ var temp = null;
+ try {
+ temp = window.getComputedStyle(arr[i], null).zIndex;
+ } catch (event) {
+ if (arr[i].style) {
+ temp = arr[i].style.zIndex;
+ }
+ }
+ if (temp != 'auto' && parseInt(temp) > maxZ) {
+ maxZ = parseInt(temp);
+ }
+ }
+ return maxZ;
+ }
+
+ /*
+ * getWindowSize
+ * 功能:获取window的宽和高
+ */
+ function getWindowSize() {
+ return {
+ width: window.innerWidth,
+ height: window.innerHeight
+ };
+ }
+
+ /*
+ * prev
+ * 功能:获取指定节点前一个同胞节点
+ * @ele:要获取的节点
+ */
+ function prev(ele) {
+ var e = ele.previousSibling;
+ if (e == null) { //测试同胞节点是否存在,否则返回空
+ return null;
+ }
+ if (e.nodeType == 3) { //如果同胞节点为文本节点
+ var t = prev(e);
+ if (t && t.nodeType == 1) {
+ return t;
+ }
+ } else {
+ if (e.nodeType == 1) { //确认节点为节点节点才返回
+ return e;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ /*
+ * next
+ * 功能:获取指定节点下一个同胞节点
+ * @ele:要获取的节点
+ */
+ function next(ele) {
+ var e = ele.nextSibling;
+ if (e == null) { //测试同胞节点是否存在,否则返回空
+ return null;
+ }
+ if (e.nodeType == 3) { //如果同胞节点为文本节点
+ var t = next(e);
+ if (t && t.nodeType == 1) {
+ return t;
+ }
+ } else {
+ if (e.nodeType == 1) { //确认节点为节点才返回
+ return e;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ /*
+ * addListener
+ * 功能:事件监听
+ * @ele:监听对象,@e:事件名称,@f:返回事件函数
+ */
+ function addListener(ele, e, f, t) {
+ if (isUndefined(t)) {
+ t = false;
+ }
+ if (ele.addEventListener) {
+ try {
+ ele.addEventListener(e, f, t);
+ } catch (event) {}
+ } else if (ele.attachEvent) {
+ try {
+ ele.attachEvent('on' + e, f);
+ } catch (event) {}
+ } else {
+ ele['on' + e] = f;
+ }
+ if(isUndefined(ele.listenerList)){
+ ele.listenerList=[];
+ }
+ ele.listenerList.push([e,f]);
+ return ele;
+ };
+
+ /*
+ * removeListener
+ * 功能:删除事件监听
+ * @ele:监听对象,@e:事件名称,@f:返回事件函数
+ */
+ function removeListener(ele, e, f, t) {
+ if (isUndefined(t)) {
+ t = false;
+ }
+ if (ele.removeEventListener) {
+ try {
+ ele.removeEventListener(e, f, t);
+ } catch (e) {}
+ } else if (ele.detachEvent) {
+ try {
+ ele.detachEvent('on' + e, f);
+ } catch (e) {}
+ } else {
+ ele['on' + e] = null;
+ }
+ if(!isUndefined(ele.listenerList)){
+ var temp=[];
+ for(var i=0;i> 0
+ },
+
+ // Week
+ W: function() {
+ var a = f.z(),
+ b = 364 + f.L() - a;
+ var nd2, nd = (new Date(jsdate.getFullYear() + '/1/1').getDay() || 7) - 1;
+ if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b) {
+ return 1;
+ } else {
+ if(a <= 2 && nd >= 4 && a >= (6 - nd)) {
+ nd2 = new Date(jsdate.getFullYear() - 1 + '/12/31');
+ return date('W', Math.round(nd2.getTime() / 1000));
+ } else {
+ return(1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
+ }
+ }
+ },
+
+ // Month
+ F: function() {
+ return txt_months[f.n()]
+ },
+ m: function() {
+ return pad(f.n(), 2)
+ },
+ M: function() {
+ return f.F().substr(0, 3)
+ },
+ n: function() {
+ return jsdate.getMonth() + 1
+ },
+ t: function() {
+ var n;
+ if((n = jsdate.getMonth() + 1) == 2) {
+ return 28 + f.L();
+ } else {
+ if(n & 1 && n < 8 || !(n & 1) && n > 7) {
+ return 31;
+ } else {
+ return 30;
+ }
+ }
+ },
+
+ // Year
+ L: function() {
+ var y = f.Y();
+ return(!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0
+ },
+ //o not supported yet
+ Y: function() {
+ return jsdate.getFullYear()
+ },
+ y: function() {
+ return(jsdate.getFullYear() + '').slice(2)
+ },
+
+ // Time
+ a: function() {
+ return jsdate.getHours() > 11 ? 'pm' : 'am'
+ },
+ A: function() {
+ return f.a().toUpperCase()
+ },
+ B: function() {
+ // peter paul koch:
+ var off = (jsdate.getTimezoneOffset() + 60) * 60;
+ var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;
+ var beat = Math.floor(theSeconds / 86.4);
+ if(beat > 1000) beat -= 1000;
+ if(beat < 0) beat += 1000;
+ if((String(beat)).length == 1) beat = '00' + beat;
+ if((String(beat)).length == 2) beat = '0' + beat;
+ return beat;
+ },
+ g: function() {
+ return jsdate.getHours() % 12 || 12
+ },
+ G: function() {
+ return jsdate.getHours()
+ },
+ h: function() {
+ return pad(f.g(), 2)
+ },
+ H: function() {
+ return pad(jsdate.getHours(), 2)
+ },
+ i: function() {
+ return pad(jsdate.getMinutes(), 2)
+ },
+ s: function() {
+ return pad(jsdate.getSeconds(), 2)
+ },
+ //u not supported yet
+
+ // Timezone
+ //e not supported yet
+ //I not supported yet
+ O: function() {
+ var t = pad(Math.abs(jsdate.getTimezoneOffset() / 60 * 100), 4);
+ if(jsdate.getTimezoneOffset() > 0) t = '-' + t;
+ else t = '+' + t;
+ return t;
+ },
+ P: function() {
+ var O = f.O();
+ return(O.substr(0, 3) + ':' + O.substr(3, 2))
+ },
+ //T not supported yet
+ //Z not supported yet
+
+ // Full Date/Time
+ c: function() {
+ return f.Y() + '-' + f.m() + '-' + f.d() + 'T' + f.h() + ':' + f.i() + ':' + f.s() + f.P()
+ },
+ //r not supported yet
+ U: function() {
+ return Math.round(jsdate.getTime() / 1000)
+ }
+ };
+
+ return format.replace(/([a-zA-Z])/g,function(t, s) {
+ var ret='';
+ if(t != s) {
+ // escaped
+ ret = s;
+ } else if(f[s]) {
+ // a date function exists
+ ret = f[s]();
+ } else {
+ // nothing special
+ ret = s;
+ }
+ return ret;
+ });
+ }
+
+ /*
+ * arrayToString
+ * 功能,二维数组传化成字符串
+ */
+ function arrayToString(arr) {
+ var str='';
+ if(!isUndefined(arr)){
+ for(var i=0;i0){
+ str+=',';
+ }
+ for(var y=0;y0){
+ str+=';';
+ }
+ if(valType(temp[y])=='number'){
+ str+=parseInt(temp[y]*100);
+ }
+ else{
+ str+=temp[y];
+ }
+
+ }
+ }
+ }
+ return str;
+ }
+
+ /*
+ * stringToArray
+ * 功能,字符串转化成二维数组
+ */
+ function stringToArray(str) {
+ var newArr=[];
+ if(!isUndefined(str)){
+ var arr=str.split(',');
+ for(var i=0;i-1){
+ return 'iphone';
+ }
+ }
+
+
+export { ajax, dataURLtoBlob, getApp };
diff --git a/src/utils/path.js b/src/utils/path.js
new file mode 100644
index 0000000..8a31002
--- /dev/null
+++ b/src/utils/path.js
@@ -0,0 +1,26 @@
+import { isUndefined } from './type.js';
+
+ /*
+ * getPath
+ * 功能:获取该js文件所在路径
+ */
+ function getPath(siz) {
+ var scriptList = document.scripts,
+ thisPath = scriptList[scriptList.length - 1].src;
+ for (var i = 0; i < scriptList.length; i++) {
+ var scriptName = scriptList[i].getAttribute('name') || scriptList[i].getAttribute('data-name');
+ var src = scriptList[i].src.slice(scriptList[i].src.lastIndexOf('/') + 1, scriptList[i].src.lastIndexOf('.'));
+ if ((scriptName && (scriptName == 'moeplayer' || scriptName == 'moeplayer.min')) || (scriptList[i].src && (src == 'moeplayer' || src == 'moeplayer.min'))) {
+ thisPath = scriptList[i].src;
+ break;
+ }
+ }
+ var path=thisPath.substring(0, thisPath.lastIndexOf('/js/') + 1);
+ if(!isUndefined(siz)){
+ path+=siz+'/';
+ }
+ return path;
+ }
+
+
+export { getPath };
diff --git a/src/utils/type.js b/src/utils/type.js
new file mode 100644
index 0000000..2931dad
--- /dev/null
+++ b/src/utils/type.js
@@ -0,0 +1,99 @@
+ /*
+ * standardization
+ * 功能:将对象Object标准化,将n对象替换进o对象
+ * @o:标准化对象,@n:外部传递对象
+ */
+ function standardization(o, n) { //n替换进o
+ var h = {};
+ var k;
+ for (k in o) {
+ h[k] = o[k];
+ }
+ for (k in n) {
+ if(k in h){
+ h[k] = n[k];
+ }
+ }
+ return h;
+ }
+
+ /*
+ * mergeObj
+ * 功能:将新对象合并到原对象中,需要确保原对像里有对应的值并且类型一样
+ * @o:原对象,@n:新对象
+ */
+ function mergeObj(o,n){
+ var h = {};
+ var k;
+ for (k in o) {
+ h[k] = o[k];
+ }
+ for (k in n) {
+ if(k in h){
+ switch(valType(h[k])){
+ case 'object':
+ if(valType(n[k])=='object'){
+ h[k] = mergeObj(h[k],n[k]);
+ }
+ break;
+ default:
+ if(valType(h[k])==valType(n[k])){
+ h[k] = n[k];
+ }
+ break;
+ }
+ }
+ }
+ return h;
+ }
+
+ /*
+ * valType
+ * 功能:判断变量类型
+ */
+ function valType(val) {
+ if(typeof val==='undefined') return 'undefined';
+ var str=Object.prototype.toString.call(val).split(' ')[1].replace(']','').toLowerCase();
+ if(str.substr(0,4)=='html' && (str.substr(-7)=='element' || str.substr(-8)=='document' || str=='window')){
+ str='htmlobject';
+ }
+ if(str=='htmlcollection' || str=='nodelist'){
+ str='htmlarray';
+ }
+ return str;
+ }
+
+ /*
+ * isUndefined
+ * 功能:判断变量是否存在或值是否为undefined
+ */
+ function isUndefined(val) {
+ try {
+ return valType(val)==='undefined' || val === undefined || val === null || (valType(val)==='number' && isNaN(val));
+ } catch (event) {
+ return true;
+ }
+ return false;
+ }
+
+ /*
+ * decodeURIString
+ * 功能,解码中文
+ */
+ function decodeURIString(obj){
+ for(var k in obj){
+ if(valType(obj[k])=='string' && obj[k]){
+ try{
+ obj[k]=decodeURI(obj[k]);
+ }
+ catch(event){}
+ }
+ if(valType(obj[k])=='object'){
+ obj[k]=decodeURIString(obj[k]);
+ }
+ }
+ return obj;
+ }
+
+
+export { standardization, mergeObj, valType, isUndefined, decodeURIString };