Skip to content

Commit 4a92c1e

Browse files
author
liutao3
committed
v1.2.20 - Fixed playing issue after paused
1 parent 66148ca commit 4a92c1e

File tree

102 files changed

+13054
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+13054
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# playease.js 2.0
1+
# playease.js
22

33
> [[domain] http://studease.cn](http://studease.cn/playease.html)
44

cn/studease/api/playease.api.js

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
(function(playease) {
2+
var utils = playease.utils,
3+
events = playease.events;
4+
5+
var _insts = {},
6+
_eventMapping = {
7+
onError: events.ERROR,
8+
onReady: events.PLAYEASE_READY,
9+
onMetaData: events.PLAYEASE_METADATA,
10+
onBuffering: events.PLAYEASE_BUFFERING,
11+
onPlaying: events.PLAYEASE_PLAYING,
12+
onPaused: events.PLAYEASE_PAUSED,
13+
onReloading: events.PLAYEASE_RELOADING,
14+
onSeeking: events.PLAYEASE_SEEKING,
15+
onStopped: events.PLAYEASE_STOPPED,
16+
onReport: events.PLAYEASE_REPORT,
17+
onMute: events.PLAYEASE_MUTE,
18+
onVolume: events.PLAYEASE_VOLUME,
19+
onVideoOff: events.PLAYEASE_VIDEOOFF,
20+
onHD: events.PLAYEASE_HD,
21+
onBullet: events.PLAYEASE_BULLET,
22+
onFullpage: events.PLAYEASE_FULLPAGE,
23+
onFullscreen: events.PLAYEASE_FULLSCREEN,
24+
onResize: events.RESIZE
25+
};
26+
27+
playease.api = function(container) {
28+
var _this = utils.extend(this, new events.eventdispatcher('api')),
29+
_entity;
30+
31+
_this.container = container;
32+
_this.id = container.id;
33+
34+
function _init() {
35+
utils.foreach(_eventMapping, function(name, type) {
36+
_this[name] = function(callback) {
37+
_this.addEventListener(type, callback);
38+
};
39+
});
40+
}
41+
42+
_this.setup = function(options) {
43+
utils.emptyElement(_this.container);
44+
45+
playease.debug = !!options.debug;
46+
47+
_this.config = options;
48+
_this.config.id = _this.id;
49+
50+
_this.embedder = new playease.embed(_this);
51+
_this.embedder.addGlobalListener(_onEvent);
52+
_this.embedder.embed();
53+
54+
return _this;
55+
};
56+
57+
_this.setEntity = function(entity) {
58+
_entity = entity;
59+
60+
_this.onSWFLoaded = _entity.setup;
61+
_this.onSWFState = _entity.onSWFState;
62+
63+
_this.play = _entity.play;
64+
_this.pause = _entity.pause;
65+
_this.reload = _entity.reload;
66+
_this.seek = _entity.seek;
67+
_this.stop = _entity.stop;
68+
_this.report = _entity.report;
69+
_this.mute = _entity.mute;
70+
_this.volume = _entity.volume;
71+
_this.videoOff = _entity.videoOff;
72+
_this.hd = _entity.hd;
73+
_this.bullet = _entity.bullet;
74+
_this.fullpage = _entity.fullpage;
75+
_this.fullscreen = _entity.fullscreen;
76+
77+
_this.shoot = _entity.shoot;
78+
_this.resize = _entity.resize;
79+
};
80+
81+
function _onEvent(e) {
82+
_forward(e);
83+
}
84+
85+
function _forward(e) {
86+
_this.dispatchEvent(e.type, e);
87+
}
88+
89+
_init();
90+
};
91+
92+
playease.api.getInstance = function(identifier) {
93+
var _container;
94+
95+
if (identifier == null) {
96+
identifier = 0;
97+
} else if (identifier.nodeType) {
98+
_container = identifier;
99+
} else if (utils.typeOf(identifier) === 'string') {
100+
_container = document.getElementById(identifier);
101+
}
102+
103+
if (_container) {
104+
var inst = _insts[_container.id];
105+
if (!inst) {
106+
_insts[identifier] = inst = new playease.api(_container);
107+
}
108+
return inst;
109+
} else if (utils.typeOf(identifier) === 'number') {
110+
return _insts[identifier];
111+
}
112+
113+
return null;
114+
};
115+
116+
playease.api.displayError = function(message, config) {
117+
var displayLayer = document.getElementById(config.id + '-display');
118+
if (displayLayer && message !== undefined) {
119+
(displayLayer.lastChild || displayLayer).innerHTML = message;
120+
}
121+
};
122+
})(playease);
Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
(function(playease) {
2+
var utils = playease.utils,
3+
events = playease.events,
4+
core = playease.core,
5+
components = core.components,
6+
7+
alphas = {
8+
NONE: 1,
9+
LOW: 0.75,
10+
MID: 0.5,
11+
HIGH: 0.25
12+
},
13+
positions = {
14+
FULLSCREEN: 0,
15+
TOP: 1,
16+
BOTTOM: 2
17+
};
18+
19+
components.bulletCurtain = function(config) {
20+
var _this = utils.extend(this, new events.eventdispatcher('components.bulletCurtain')),
21+
_defaults = {
22+
width: 640,
23+
height: 360,
24+
enable: true,
25+
fontSize: 14,
26+
lineHeight: 20,
27+
interval: 30,
28+
duration: 10000,
29+
alpha: alphas.LOW,
30+
position: positions.FULLSCREEN,
31+
visible: true
32+
},
33+
_canvas,
34+
_context,
35+
_rows,
36+
_maxRow,
37+
_random,
38+
_marginTop,
39+
_beats,
40+
_timer;
41+
42+
function _init() {
43+
_this.config = utils.extend({}, _defaults, config);
44+
45+
_rows = [];
46+
_marginTop = _this.config.lineHeight - _this.config.fontSize;
47+
48+
_canvas = utils.createElement('canvas');
49+
50+
_this.resize(_this.config.width, _this.config.height);
51+
}
52+
53+
_this.bullet = function(text) {
54+
var _self = this,
55+
_doublechars;
56+
57+
function _init() {
58+
var metrics = _context.measureText(text);
59+
_doublechars = _getDoubleChars(text);
60+
61+
_self.text = text;
62+
_self.width = metrics.width + 10;
63+
_self.weight = text.length + _doublechars;
64+
_self.ticks = 0;
65+
}
66+
67+
function _getDoubleChars(text) {
68+
var arr = text.match(/([^x00-xff])/gi);
69+
return arr ? arr.length : 0;
70+
}
71+
72+
_init();
73+
};
74+
75+
_this.shoot = function(text) {
76+
if (!_context || _this.config.enable == false) {
77+
return;
78+
}
79+
80+
var bullet = new _this.bullet(text);
81+
var index = _getIndex(bullet);
82+
83+
var row = _rows[index];
84+
if (!row) {
85+
row = [];
86+
row.weight = 0;
87+
88+
_rows[index] = row;
89+
}
90+
91+
row.weight += bullet.weight;
92+
row.pushable = 0;
93+
row.push(bullet);
94+
95+
_startTimer();
96+
};
97+
98+
function _getIndex(bullet) {
99+
var index = _rows.length;
100+
var best = 0;
101+
var minweight = 0;
102+
103+
for (var i = Math.floor(Math.random() * _random); i < _maxRow; i++) {
104+
var row = _rows[i];
105+
if (utils.typeOf(row) != 'array' || row.length == 0 || row.pushable >= bullet.weight) {
106+
index = i;
107+
break;
108+
}
109+
110+
var last = row[row.length - 1];
111+
var ticks = _beats - last.ticks;
112+
var offsetX = _canvas.width - (_canvas.width + bullet.width) * ticks / _beats;
113+
if (row.pushable && offsetX >= 0) {
114+
index = i;
115+
break;
116+
}
117+
118+
if (!minweight || row.weight < minweight) {
119+
best = i;
120+
minweight = row.weight;
121+
}
122+
}
123+
124+
if (index >= _maxRow) {
125+
index = best;
126+
}
127+
128+
return index;
129+
}
130+
131+
function _update(e) {
132+
_context.clearRect(0, 0, _canvas.width, _canvas.height);
133+
134+
var hasContent = false;
135+
136+
for (var i = 0; i < _rows.length; i++) {
137+
var row = _rows[i];
138+
if (utils.typeOf(row) != 'array' || row.length == 0) {
139+
continue;
140+
}
141+
142+
var offsetY = _marginTop + i * _this.config.lineHeight;
143+
144+
for (var j = 0; j < row.length; j++) {
145+
var bullet = row[j];
146+
147+
if (bullet.ticks++ >= _beats) {
148+
row.splice(j--, 1);
149+
row.weight -= bullet.weight;
150+
continue;
151+
}
152+
153+
var offsetX = _canvas.width - (_canvas.width + bullet.width) * bullet.ticks / _beats;
154+
_context.fillText(bullet.text, offsetX, offsetY);
155+
156+
if (j == row.length - 1 && offsetX + bullet.width <= _canvas.width) {
157+
row.pushable = bullet.weight;
158+
}
159+
160+
hasContent = true;
161+
}
162+
}
163+
164+
if (hasContent == false) {
165+
_stopTimer();
166+
}
167+
}
168+
169+
function _startTimer() {
170+
if (!_timer) {
171+
_timer = new utils.timer(_this.config.interval);
172+
_timer.addEventListener(events.PLAYEASE_TIMER, _update);
173+
}
174+
175+
_timer.start();
176+
}
177+
178+
function _stopTimer() {
179+
if (_timer) {
180+
_timer.stop();
181+
}
182+
}
183+
184+
_this.setProperty = function(key, value) {
185+
_this.config[key] = value;
186+
187+
switch (key) {
188+
case 'enable':
189+
_this.dispatchEvent(events.PLAYEASE_BULLET, { bullet: value ? 'on' : 'off' });
190+
break;
191+
default:
192+
break;
193+
}
194+
};
195+
196+
_this.element = function() {
197+
return _canvas;
198+
};
199+
200+
_this.resize = function(width, height) {
201+
var rows = _canvas.height / (_this.config.fontSize * 1.4);
202+
_maxRow = Math.floor(rows);
203+
_random = rows / 2;
204+
205+
var n = 1;
206+
if (width > _this.config.width) {
207+
n = width / _this.config.width;
208+
n *= Math.pow(.8, n - 1);
209+
}
210+
_beats = _this.config.duration * n / _this.config.interval;
211+
212+
_canvas.width = width;
213+
_canvas.height = height;
214+
215+
try {
216+
_context = _canvas.getContext("2d");
217+
} catch (err) {
218+
return;
219+
}
220+
221+
_context.font = 'bold ' + _this.config.fontSize + 'px Microsoft YaHei,arial,sans-serif';
222+
_context.fillStyle = '#E6E6E6';
223+
_context.globalAlpha = _this.config.alpha;
224+
_context.textAlign = 'left';
225+
_context.textBaseline = 'top';
226+
};
227+
228+
_init();
229+
};
230+
231+
components.bulletCurtain.alphas = alphas;
232+
components.bulletCurtain.positions = positions;
233+
})(playease);

0 commit comments

Comments
 (0)