🏠 Home 

GifPlayer

GifPlayer Control

สคริปต์นี้ไม่ควรถูกติดตั้งโดยตรง มันเป็นคลังสำหรับสคริปต์อื่น ๆ เพื่อบรรจุด้วยคำสั่งเมทา // @require https://update.greasyfork.org/scripts/438693/1009492/GifPlayer.js

 (function($) {
function GifPlayer(preview, options){
this.previewElement=preview;
this.spinnerElement=$("<div class = 'spinner'></div>");
this.options=options;
this.gifLoaded=false;
}
GifPlayer.prototype = {
activate: function(){
this.wrap();
this.addSpinner();
this.addControl();
this.addEvents();
},
wrap: function(){
this.wrapper = this.previewElement.wrap("<div class='gifplayer-wrapper'></div>").parent();
this.wrapper.css('width', this.previewElement.width());
this.wrapper.css('height', this.previewElement.height());
this.previewElement.addClass('gifplayer');
this.previewElement.css('cursor','pointer');
},
getGifSrc: function(){
var size = "-" + this.previewElement.width() + 'x' + this.previewElement.height();
var linkHref = 	this.previewElement.attr('src').replace(size, '').replace('.png','.gif');
return linkHref;
},
addControl: function(){
this.playElement = $("<ins class='play-gif'>" + this.options.label + "</ins>");
this.playElement.css('left', this.previewElement.width()/2 + this.playElement.width()/2);
this.wrapper.append(this.playElement);
},
addEvents: function(){
var gp=this;
gp.playElement.on( 'click', function(e){
$(this).hide();
gp.spinnerElement.show();
gp.loadGif();
e.preventDefault();
e.stopPropagation();
});
gp.previewElement.on( 'click', function(e){
if(gp.playElement.is(':visible')){
gp.playElement.hide();
gp.spinnerElement.show();
gp.loadGif();
}
e.preventDefault();
e.stopPropagation();
});
gp.spinnerElement.on('click', function(e){
e.preventDefault();
e.stopPropagation();
});
},
loadGif: function(){
if(!this.gifLoaded){
this.enableAbort();
}
var gifSrc=this.getGifSrc();
var gifWidth=this.previewElement.width();
var gifHeight=this.previewElement.height();
this.gifElement=$("<img src='" + gifSrc + "' width='"+ gifWidth + "' height=' "+ gifHeight +" '/>");
var gp=this;
this.gifElement.load( function(){
gp.gifLoaded=true;
gp.resetEvents();
$(this).css('cursor','pointer');
$(this).css('position','absolute');
$(this).css('top','0');
$(this).css('left','0');
gp.previewElement.hide();
gp.wrapper.append(gp.gifElement);
gp.spinnerElement.hide();
$(this).click( function(e){
$(this).remove();
gp.previewElement.show();
gp.playElement.show();
e.preventDefault();
e.stopPropagation();
});
});
},
enableAbort: function(){
var gp = this;
this.previewElement.click( function(e){
gp.abortLoading(e);
});
this.spinnerElement.click( function(e){
gp.abortLoading(e);
});
},
abortLoading: function(e){
this.spinnerElement.hide();
this.playElement.show();
e.preventDefault();
e.stopPropagation();
this.gifElement.off('load').on( 'load', function(ev){
ev.preventDefault();
ev.stopPropagation();
});
this.resetEvents();
},
resetEvents: function(){
this.previewElement.off('click');
this.playElement.off('click');
this.spinnerElement.off('click');
this.addEvents();
},
addSpinner: function(){
this.wrapper.append(this.spinnerElement);
this.spinnerElement.hide();
}
}
$.fn.gifplayer = function(options) {
this.each(function(){
options = $.extend({}, $.fn.gifplayer.defaults, options);
var gifplayer = new GifPlayer($(this), options);
gifplayer.activate();
});
}
$.fn.gifplayer.defaults = {
label: 'gif'
};
})(jQuery);