Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
loeasy68
GitHub Repository: loeasy68/loeasy68.github.io
Path: blob/main/website/Youtube/demo.js
2940 views
1
var player;
2
// Callback for when the YouTube iFrame player is ready
3
function onYouTubeIframeAPIReady() {
4
player = new YT.Player('player', {
5
// Set Player height and width
6
height: '390',
7
width: '640',
8
// Set the id of the video to be played
9
videoId: 'M7lc1UVf-VE',
10
// Setup event handelers
11
events: {
12
'onReady': onPlayerReady,
13
'onStateChange': onPlayerStateChange,
14
'onPlaybackQualityChange': onPlaybackQualityChange,
15
'onPlaybackRateChange': onPlaybackRateChange,
16
'onError': onError,
17
'onApiChange': onApiChange,
18
}
19
});
20
};
21
22
// Event Handlers
23
function onPlaybackQualityChange(){
24
// Update playback quality on page
25
update("quality");
26
};
27
function onPlaybackRateChange(){
28
// Update playback rate on page
29
update("rate");
30
};
31
function onError(error){
32
// Update errors on page
33
console.log("Error!");
34
};
35
function onApiChange(event){
36
// Update currently availbe APIs
37
console.log("API Change!");
38
};
39
function onPlayerReady(){
40
// Update page after player is ready
41
updateAll();
42
playVideo();
43
}
44
45
function onPlayerStateChange(event){
46
// Get current state
47
// Video has ended
48
switch (event.data) {
49
case YT.PlayerState.ENDED:
50
updateAll() // set status for state, ...
51
clearIntervals() // clear all intervals
52
break;
53
case YT.PlayerState.PLAYING:
54
updateAll() // set status for state, ...
55
setIntervals() // set intervals for ...
56
break;
57
case YT.PlayerState.PAUSED:
58
updateAll() // set status for state, ...
59
clearIntervals() // clear all intervals
60
break;
61
case YT.PlayerState.BUFFERING:
62
updateAll() // set status for state, ...
63
clearIntervals() // clear all intervals
64
break;
65
case YT.PlayerState.CUED:
66
updateAll() // set status for state, ...
67
clearIntervals() // clear all intervals
68
break;
69
default:
70
updateAll() // set status for state, ...
71
clearIntervals() // clear all intervals
72
break;
73
74
}
75
};
76
77
// Update HTML nodes on the page
78
// with most recent values from
79
// the YouTube iFrame API
80
function update(node){
81
switch (node){
82
// Update player reported changes
83
case "duration":
84
document.getElementById("duration").innerHTML = player.getDuration()+"s";
85
break;
86
case "url":
87
var url = player.getVideoUrl();
88
document.getElementById("url").innerHTML = "<a href=\""+url+"\" target=\"_blank\">"+url+"</a>";
89
break;
90
case "embedCode":
91
var embedCode = player.getVideoEmbedCode();
92
var index = Math.ceil(embedCode.length/3);
93
var fmtEmbedCode = [embedCode.slice(0, index), "\n", embedCode.slice(index, index*2),"\n", embedCode.slice(index*2)].join('');
94
document.getElementById("embedCode").innerText = fmtEmbedCode
95
break;
96
case "percentLoaded":
97
document.getElementById("percentLoaded").innerHTML = player.getVideoLoadedFraction()*100+"%"
98
break;
99
case "status":
100
var state = player.getPlayerState()
101
switch (state){
102
case YT.PlayerState.ENDED:
103
status="ENDED";
104
break;
105
case YT.PlayerState.PLAYING:
106
status="PLAYING";
107
break;
108
case YT.PlayerState.PAUSED:
109
status="PAUSED";
110
break;
111
case YT.PlayerState.BUFFERING:
112
status="BUFFERING";
113
break;
114
case YT.PlayerState.CUED:
115
status="CUED";
116
break;
117
default:
118
status="UNKNOWN";
119
break;
120
}
121
document.getElementById("status").innerHTML = status+" ("+state+")";
122
break;
123
case "currentTime":
124
document.getElementById("currentTime").innerHTML = player.getCurrentTime()+"s"
125
break;
126
case "volume":
127
document.getElementById("volume").innerHTML = player.getVolume()
128
break;
129
case "mute":
130
document.getElementById("mute").innerHTML = player.isMuted()
131
break;
132
case "quality":
133
var availableQualityLevels = player.getAvailableQualityLevels()
134
var selectbox = document.getElementById('qualityOption');
135
//clear existing options
136
var i;
137
for(i=selectbox.options.length-1;i>=0;i--){
138
selectbox.remove(i);
139
}
140
//write current available options
141
for (var i in availableQualityLevels){
142
var opt = document.createElement("OPTION");
143
opt.text = availableQualityLevels[i];
144
opt.value = availableQualityLevels[i];
145
selectbox.options.add(opt);
146
}
147
document.getElementById("quality").innerHTML = player.getPlaybackQuality()
148
break;
149
case "rate":
150
var availableRates = player.getAvailablePlaybackRates()
151
var selectbox = document.getElementById('rateOption');
152
//clear existing options
153
var i;
154
for(i=selectbox.options.length-1;i>=0;i--){
155
selectbox.remove(i);
156
}
157
//write current available options
158
for (var i in availableRates){
159
var opt = document.createElement("OPTION");
160
opt.text = availableRates[i];
161
opt.value = availableRates[i];
162
selectbox.options.add(opt);
163
}
164
document.getElementById("rate").innerHTML = player.getPlaybackRate()
165
break;
166
case "title":
167
document.getElementById("title").innerHTML = player.getVideoData()["title"]
168
break;
169
case "author":
170
document.getElementById("author").innerHTML = player.getVideoData()["author"]
171
break;
172
case "video_id":
173
document.getElementById("video_id").innerHTML = player.getVideoData()["video_id"]
174
break;
175
}
176
};
177
// Updates all HTML nodes
178
function updateAll(){
179
for (var node in nodeList){
180
update(nodeList[node]);
181
}
182
};
183
// Array to track all HTML nodes
184
var nodeList = [
185
"duration",
186
"url",
187
"embedCode",
188
"percentLoaded",
189
"status",
190
"currentTime",
191
"volume",
192
"mute",
193
"quality",
194
"rate",
195
"title",
196
"author",
197
"video_id",
198
];
199
200
// Functions to invoke user requested action through the iFrame API
201
function loadNewVideo(){
202
player.loadVideoById(document.getElementById("video_idOption").value);
203
};
204
function cueNewVideo(){
205
player.cueVideoById(document.getElementById("video_idOption").value);
206
};
207
function playVideo(){
208
player.playVideo();
209
};
210
function pauseVideo(){
211
player.pauseVideo();
212
};
213
function stopVideo(){
214
player.stopVideo();
215
};
216
function seekTo(){
217
player.seekTo(document.getElementById("currentTimeOption").value);
218
};
219
function setVolume(){
220
player.setVolume(document.getElementById("volumeOption").value);
221
};
222
function mute(){
223
player.mute();
224
};
225
function unmute(){
226
player.unMute();
227
};
228
function setQuality(){
229
player.setPlaybackQuality(document.getElementById("qualityOption").value);
230
};
231
function setRate(){
232
player.setPlaybackRate(document.getElementById("rateOption").value);
233
};
234
235
// Controls interval handlers to update page contens
236
// Array to track intervals
237
var activeIntervals = [];
238
function setIntervals(){
239
// Sets invertval funtions to actively update page content
240
activeIntervals[0] = setInterval(function(){update("percentLoaded")}, 500);
241
activeIntervals[1] = setInterval(function(){update("currentTime")}, 500);
242
activeIntervals[2] = setInterval(function(){update("mute")}, 500);
243
activeIntervals[3] = setInterval(function(){update("volume")}, 500);
244
};
245
function clearIntervals(){
246
// Clears existing intervals to actively update page content
247
for (var interval in activeIntervals){
248
clearInterval(interval);
249
}
250
};
251