MX.Vimeo = MX.Object3D.extend({ init: function (ops) { this.type = "Vimeo" this.media = ops.media this.width = ops.media.width this.height = ops.media.height this.x = ops.x || 0 this.y = ops.y || 0 this.z = ops.z || 0 this.rotationX = ops.rotationX || 0 this.rotationY = ops.rotationY || 0 this.rotationZ = ops.rotationZ || 0 this.scale = ops.scale || 1 this.backface = ops.backface || false ops.className && this.el.classList.add(ops.className) this.backface && this.el.classList.add("backface-visible") this.el.classList.add("video") this.paused = true this.load() }, load: function (ops) { var uid = 'player-' + Uid () var preload = document.createElement("div") preload.id = uid preload.style.backgroundImage = "url(" + this.media.thumbnail + ")" preload.style.width = this.media.width + "px" preload.style.height = this.media.height + "px" preload.style.pointerEvents = "none" preload.className = "preload" this.el.appendChild(preload) this.player = $f(preload) this.player.addEvent('ready', $.proxy(this.ready, this)) }, ready: function(){ console.log("vimeo ready") // wait until ready before binding events. other events: play, pause this.player.addEvent('finish', $.proxy(this.finished, this)) // so annoying that this is async!! this.player.api('getDuration', $.proxy(function(n){ console.log("vimeo duration", n) this.player.duration = n }, this)) }, error: function(err){ console.log("vimeo error", err) }, play: function(){ this.paused = false this.player.api('play') }, pause: function(){ this.paused = true this.player.api('pause') }, seek: function(n){ this.player.api('seekTo', n) }, duration: function(){ return this.player.duration }, finished: function(){ } })