🏠 Home 

GifPlayer

GifPlayer Control

Dette script bør ikke installeres direkte. Det er et bibliotek, som andre scripts kan inkludere med metadirektivet // @require https://update.greasyfork.org/scripts/438693/1009492/GifPlayer.js

  1. (function($) {
  2. function GifPlayer(preview, options){
  3. this.previewElement=preview;
  4. this.spinnerElement=$("<div class = 'spinner'></div>");
  5. this.options=options;
  6. this.gifLoaded=false;
  7. }
  8. GifPlayer.prototype = {
  9. activate: function(){
  10. this.wrap();
  11. this.addSpinner();
  12. this.addControl();
  13. this.addEvents();
  14. },
  15. wrap: function(){
  16. this.wrapper = this.previewElement.wrap("<div class='gifplayer-wrapper'></div>").parent();
  17. this.wrapper.css('width', this.previewElement.width());
  18. this.wrapper.css('height', this.previewElement.height());
  19. this.previewElement.addClass('gifplayer');
  20. this.previewElement.css('cursor','pointer');
  21. },
  22. getGifSrc: function(){
  23. var size = "-" + this.previewElement.width() + 'x' + this.previewElement.height();
  24. var linkHref = this.previewElement.attr('src').replace(size, '').replace('.png','.gif');
  25. return linkHref;
  26. },
  27. addControl: function(){
  28. this.playElement = $("<ins class='play-gif'>" + this.options.label + "</ins>");
  29. this.playElement.css('left', this.previewElement.width()/2 + this.playElement.width()/2);
  30. this.wrapper.append(this.playElement);
  31. },
  32. addEvents: function(){
  33. var gp=this;
  34. gp.playElement.on( 'click', function(e){
  35. $(this).hide();
  36. gp.spinnerElement.show();
  37. gp.loadGif();
  38. e.preventDefault();
  39. e.stopPropagation();
  40. });
  41. gp.previewElement.on( 'click', function(e){
  42. if(gp.playElement.is(':visible')){
  43. gp.playElement.hide();
  44. gp.spinnerElement.show();
  45. gp.loadGif();
  46. }
  47. e.preventDefault();
  48. e.stopPropagation();
  49. });
  50. gp.spinnerElement.on('click', function(e){
  51. e.preventDefault();
  52. e.stopPropagation();
  53. });
  54. },
  55. loadGif: function(){
  56. if(!this.gifLoaded){
  57. this.enableAbort();
  58. }
  59. var gifSrc=this.getGifSrc();
  60. var gifWidth=this.previewElement.width();
  61. var gifHeight=this.previewElement.height();
  62. this.gifElement=$("<img src='" + gifSrc + "' width='"+ gifWidth + "' height=' "+ gifHeight +" '/>");
  63. var gp=this;
  64. this.gifElement.load( function(){
  65. gp.gifLoaded=true;
  66. gp.resetEvents();
  67. $(this).css('cursor','pointer');
  68. $(this).css('position','absolute');
  69. $(this).css('top','0');
  70. $(this).css('left','0');
  71. gp.previewElement.hide();
  72. gp.wrapper.append(gp.gifElement);
  73. gp.spinnerElement.hide();
  74. $(this).click( function(e){
  75. $(this).remove();
  76. gp.previewElement.show();
  77. gp.playElement.show();
  78. e.preventDefault();
  79. e.stopPropagation();
  80. });
  81. });
  82. },
  83. enableAbort: function(){
  84. var gp = this;
  85. this.previewElement.click( function(e){
  86. gp.abortLoading(e);
  87. });
  88. this.spinnerElement.click( function(e){
  89. gp.abortLoading(e);
  90. });
  91. },
  92. abortLoading: function(e){
  93. this.spinnerElement.hide();
  94. this.playElement.show();
  95. e.preventDefault();
  96. e.stopPropagation();
  97. this.gifElement.off('load').on( 'load', function(ev){
  98. ev.preventDefault();
  99. ev.stopPropagation();
  100. });
  101. this.resetEvents();
  102. },
  103. resetEvents: function(){
  104. this.previewElement.off('click');
  105. this.playElement.off('click');
  106. this.spinnerElement.off('click');
  107. this.addEvents();
  108. },
  109. addSpinner: function(){
  110. this.wrapper.append(this.spinnerElement);
  111. this.spinnerElement.hide();
  112. }
  113. }
  114. $.fn.gifplayer = function(options) {
  115. this.each(function(){
  116. options = $.extend({}, $.fn.gifplayer.defaults, options);
  117. var gifplayer = new GifPlayer($(this), options);
  118. gifplayer.activate();
  119. });
  120. }
  121. $.fn.gifplayer.defaults = {
  122. label: 'gif'
  123. };
  124. })(jQuery);