Elusien

SHOTCUT-Logo-Flip WebVfx Overlay HTML Filter

Jan 21st, 2018
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 36.90 KB | None | 0 0
  1. <html lang="en">
  2. <!-- See the result at: vimeo.com/251985026 -->
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Shotcut Blink</title>
  6. <style>
  7.     html, body {margin:0; padding:0; width: 100%; height: 100%;}
  8.     #flip-container, #flipper, #front, #back {width: 75%; height: 100%; margin: auto;}
  9.     #flip-container { position: relative; }
  10.     #flipper {position: relative;}
  11.     #front, #back {
  12.         position:         absolute;
  13.         top:              0px;
  14.         left:             0px;
  15.         width:            100%;
  16.         height:           100%;
  17.         text-align:       center;
  18.         vertical-align:   middle;
  19.         color:            #bbb;
  20.         background-color: transparent;
  21.         font:             77px Liberation Sans, Arial, sans-serif;
  22.         text-shadow:      -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
  23.     }
  24. /* Rainbow-coloured letters */ 
  25.     #l1 {color: violet;}
  26.     #l2 {color: indigo;}
  27.     #l3 {color: blue;}
  28.     #l4 {color: green;}
  29.     #l5 {color: yellow;}
  30.     #l6 {color: orange;}
  31.     #l7 {color: red;}
  32. </style>
  33.  
  34. <script>
  35.     function Easing_Funs(){
  36.     /*
  37.         Easing Equations v1.3, Oct. 29, 2002, Open source under the BSD License.
  38.         Copyright © 2001-2002 Robert Penner. All rights reserved.
  39.  
  40.         These tweening functions provide different flavors of math-based motion under a consistent API.
  41.      
  42.         Math.easingType(t,b,c,d)
  43.             t: current time,
  44.             b: beginning value  (i.e  value at time_start),
  45.             c: change in value  (end_value - b), can be negative
  46.             d: duration         (i.e. time_end - time_start)
  47.  
  48.         Type of easing  HTML data-easing value      Description
  49.         --------------  ----------------------      -----------
  50.             Linear      "Linear" or "" (null)       linear tweening - no easing is performed
  51.             Quadratic   "InQuad"                    t^2         acceleration from zero velocity
  52.                         "OutQuad"                   t^2         deceleration  to  zero velocity
  53.                         "InOutQuad"                 t^2         acceleration until halfway, then deceleration
  54.             Cubic       "InCubic"                   t^3         acceleration from zero velocity
  55.                         "OutCubic"                  t^3         deceleration  to  zero velocity
  56.                         "InOutCubic"                t^3         acceleration until halfway, then deceleration
  57.             Quartic     "InQuartic"                 t^4         acceleration from zero velocity
  58.                         "OutQuartic"                t^4         deceleration  to  zero velocity
  59.                         "InOutQuartic"              t^4         acceleration until halfway, then deceleration
  60.             Quintic     "InQuintic"                 t^5         acceleration from zero velocity
  61.                         "OutQuintic"                t^5         deceleration  to  zero velocity
  62.                         "InOutQuintic"              t^5         acceleration until halfway, then deceleration
  63.             Sinusoidal  "InSine"                    sinusoidal  acceleration from zero velocity
  64.                         "OutSine"                   sinusoidal  deceleration  to  zero velocity
  65.                         "InOutSine"                 sinusoidal  acceleration until halfway, then deceleration
  66.             Exponential "InExpo"                    exponential acceleration from zero velocity
  67.                         "OutExpo"                   exponential deceleration  to  zero velocity
  68.                         "InOutExpo"                 exponential acceleration until halfway, then deceleration
  69.             Circular    "InCirc"                    circular    acceleration from zero velocity
  70.                         "OutCirc"                   circular    deceleration  to  zero velocity
  71.                         InOutCirc"                  circular    acceleration until halfway, then deceleration
  72.          
  73.       Changes:
  74.           1.3 - tweaked the exponential easing functions to make endpoints exact
  75.           1.2 - inline optimizations (changing t and multiplying in one step)--thanks to Tatsuo Kato for the idea
  76.  
  77.       Discussed in Chapter 7 of Robert Penner's Programming Macromedia Flash MX (including graphs of the easing equations)
  78.       http://www.robertpenner.com/profmx
  79.       http://www.amazon.com/exec/obidos/ASIN/0072223561/robertpennerc-20
  80.     */
  81.  
  82. this.linearTween    = function (t, b, c, d) {return c*t/d + b;};
  83. this.easeInQuad     = function (t, b, c, d) {return c*(t/=d)*t + b;};
  84. this.easeOutQuad    = function (t, b, c, d) {return -c *(t/=d)*(t-2) + b;};
  85. this.easeInOutQuad  = function (t, b, c, d) {return ((t/=d/2) < 1) ? c/2*t*t + b : -c/2*((--t)*(t-2) - 1) + b;};
  86. this.easeInCubic    = function (t, b, c, d) {return c*(t/=d)*t*t + b;};
  87. this.easeOutCubic   = function (t, b, c, d) {return c*((t=t/d-1)*t*t + 1) + b;};
  88. this.easeInOutCubic = function (t, b, c, d) {return ((t/=d/2) < 1) ? c/2*t*t*t + b : c/2*((t-=2)*t*t + 2) + b;};
  89. this.easeInQuart    = function (t, b, c, d) {return c*(t/=d)*t*t*t + b;};
  90. this.easeOutQuart   = function (t, b, c, d) {return -c * ((t=t/d-1)*t*t*t - 1) + b;};
  91. this.easeInOutQuart = function (t, b, c, d) {return ((t/=d/2) < 1) ? c/2*t*t*t*t + b : -c/2*((t-=2)*t*t*t - 2) + b;};
  92. this.easeInQuint    = function (t, b, c, d) {return c*(t/=d)*t*t*t*t + b;};
  93. this.easeOutQuint   = function (t, b, c, d) {return c*((t=t/d-1)*t*t*t*t + 1) + b;};
  94. this.easeInOutQuint = function (t, b, c, d) {return ((t/=d/2) < 1) ? c/2*t*t*t*t*t + b :  c/2*((t-=2)*t*t*t*t + 2) + b;};
  95. this.easeInSine     = function (t, b, c, d) {return -c * Math.cos(t/d * (Math.PI/2)) + c + b;};
  96. this.easeOutSine    = function (t, b, c, d) {return c * Math.sin(t/d * (Math.PI/2)) + b;};
  97. this.easeInOutSine  = function (t, b, c, d) {return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;};
  98. this.easeInExpo     = function (t, b, c, d) {return (t===0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;};
  99. this.easeOutExpo    = function (t, b, c, d) {return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;};
  100. this.easeInOutExpo  = function (t, b, c, d) {return (t===0) ? b : ((t==d) ? b+c : (((t/=d/2) < 1) ? c/2 * Math.pow(2, 10 * (t - 1)) + b : c/2*(-Math.pow(2, -10 * --t) + 2) + b));};
  101. this.easeInCirc     = function (t, b, c, d) {return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;};
  102. this.easeOutCirc    = function (t, b, c, d) {return c * Math.sqrt(1 - (t=t/d-1)*t) + b;};
  103. this.easeInOutCirc  = function (t, b, c, d) {return ((t/=d/2) < 1) ? -c/2 * (Math.sqrt(1 - t*t) - 1) + b : c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;};
  104.  
  105.     };      // #################### END OF EASING FUNCTIONS ####################
  106.    
  107.     function warning(mesg) {
  108. /*
  109.         ==============================================================================================================
  110.         Description
  111.         -----------
  112.         This function is used to display a warning message on the SHOTCUT screen or Browser window.
  113.  
  114.         Parameters          Description
  115.         ----------          -----------
  116.         mesg                The message to display e.g. "First_period must be between o.o and 1.0"
  117. */
  118.         var warn_div = document.getElementById("warning");
  119.         if (! warn_div){
  120.             warn_div = document.createElement("div");
  121.             warn_div.setAttribute("id", "warning");
  122.             var node = document.createTextNode("");
  123.             warn_div.appendChild(node);
  124.             document.getElementsByTagName("body")[0].appendChild(warn_div);
  125.             warn_div.style.position        = "absolute";
  126.             warn_div.style.top             = "0px";
  127.             warn_div.style.left            = "0px";
  128.             warn_div.style.backgroundColor = "#a00";
  129.             warn_div.style.color           = "#eee";
  130.             warn_div.style.fontSize        = "32px";
  131.         }
  132.         warn_div.innerHTML += 'Warning: ' + mesg + '<br>';
  133.     }       // #################### END OF warning ####################
  134.    
  135.     function Producer(flipper_style, front_style, back_style, easing_type, first_period) {
  136.  
  137. /*
  138.         ==============================================================================================================
  139.         Description
  140.         -----------
  141.         This function (or object) is called to save its parameters as its properties. These are required by the
  142.         render function in order to animate the objects on the screen by manipulating certain of their CSS properties.
  143.  
  144.         Parameters          Description
  145.         ----------          -----------
  146.         flipper_style       The CSS style object of the "#flipper" DIV
  147.         front_style         The CSS style object of the "#front" table
  148.         back_style          The CSS style object of the "#back" table
  149.         easing_type         The easing, or type of motion, used to movr the front and back (e.g. "InOutExpo")
  150.         first_period        A number >=0 and <1 that is the normalised time for the front to disappear
  151.         ==============================================================================================================
  152. */
  153.  
  154.         this.flipper_style = flipper_style;  // Add flipper style object  as a property of the Producer class
  155.         this.front_style   = front_style;
  156.         this.back_style    = back_style;
  157.         this.easing_type   = easing_type;
  158.         this.first_period  = first_period;
  159.     }       // #################### END OF warning ####################
  160.    
  161.    Producer.prototype.render = function(time) {
  162. /*
  163.         ==============================================================================================================
  164.         Description
  165.         -----------
  166.         This function is called once for each frame to manipulate the various objects' CSS properties by 1 increment.
  167.         By using "prototype" it is stored in the Producer object as a method called "render".
  168.         This is the main function, since it is where the animated frames are produced.
  169.         Parameters          Description
  170.         ----------          -----------
  171.         time                The current normalised (between 0.0 and 1.0) time. This is incremented on each call by an
  172.                             amount equal to 1/(duration*framerate), where duration = the length of the clip in seconds
  173.                             and framerate is the number of frames per second.                          
  174.         ==============================================================================================================
  175. */
  176.         var scale_value;
  177.         if (time < this.first_period){
  178.             this.back_style.visibility  = "hidden";
  179.             scale_value = window["easy"][this.easing_type](time, 1.0, -1.0, this.first_period);    
  180.             this.flipper_style.webkitTransform = 'scale(' + scale_value + "," + scale_value + ")";
  181.             this.front_style.visibility = "visible";
  182.         } else {   
  183.             this.front_style.visibility = "hidden";
  184.             scale_value = window["easy"][this.easing_type](time - this.first_period, 0.0, 1.0, 1.0 - this.first_period);
  185.             this.flipper_style.webkitTransform = 'scale(' + scale_value + "," + scale_value + ")";
  186.             this.back_style.visibility  = "visible";
  187.             this.front_style.visibility = "hidden";
  188.         }
  189.     };      // #################### END OF render ####################
  190.    
  191.    function start_process(p_front, p_back, p_flipper) {
  192. /*
  193.         ==============================================================================================================
  194.         Description
  195.         -----------
  196.         This function is called first, when all the HTML, CSS and javascript has been loaded by the browser or SHOTCUT.
  197.         It's main function is to check that the parameters have been supplied correctly and it then creates a Producer
  198.         object by calling the Producer constructor detailed above.
  199.  
  200.         Parameters          Description
  201.         ----------          -----------
  202.         p_font              The id of the table displayed at the front on the SHOTCUT screen, or Browser window. In the
  203.                             HTML below this is the string "front".
  204.         p_back              The id of the table displayed at the back on the SHOTCUT screen, or Browser window. In the
  205.                             HTML below this is the string "back".
  206.         p_flipper           The id of the DIV that contains the front and back tables. In the   HTML below this is the
  207.                             string "flipper". There is a "data-easing" attribute on this DIV in the HTML. It is there
  208.                             to enable the type of easing and the value of the first_period to be specified in the HTML.
  209.                             It's format is:
  210.                                             easing:first_period e.g. "InOutQuint" (it is case-insensitive)
  211.                             see the "easings" object below for valid values.
  212.         ==============================================================================================================
  213. */
  214.         var easings = {'linearTween'    : 'linear',
  215.                        'easeInQuad'     : 'inquad',     'easeOutQuad'    : 'outquad',   'easeInOutQuad'  : 'inoutquad',
  216.                        'easeIncubic'    : 'incubic',    'easeOutCubic'   : 'outcubic',  'easeInOutCubic' : 'inoutcubic',
  217.                        'easeInQuart'    : 'inquart',    'easeOutQuart'   : 'outquart',  'easeInOutQuart' : 'inoutquart',
  218.                        'easeInQuint'    : 'inquint',    'easeOutQuint'   : 'outquint',  'easeInOutQuint' : 'inoutquint',
  219.                        'easeInSine'     : 'insine',     'easeOutSine'    : 'outsine',   'easeInOutSine'  : 'inoutsine',
  220.                        'easeInExpo'     : 'inexpo',     'easeOutExpo'    : 'outexpo',   'easeInOutExpo'  : 'inoutexpo',
  221.                        'easeInCirc'     : 'incirc',     'easeOutCirc'    : 'outcirc',   'easeInOutCirc'  : 'inoutcirc'
  222.         };
  223.        
  224.         easy = new Easing_Funs();
  225.        
  226.         var front   = document.getElementById(p_front);
  227.         var back    = document.getElementById(p_back);
  228.        var flipper = document.getElementById(p_flipper);
  229.        
  230.         if (front   === null)   {warning('START_PROCESS: Parameter 1:' + p_front   + ' does not exist in the HTML.');}
  231.         if (back    === null)   {warning('START_PROCESS: Parameter 2:' + p_back    + ' does not exist in the HTML.');}
  232.         if (flipper === null)   {warning('START_PROCESS: Parameter 3:' + p_flipper + ' does not exist in the HTML.');}
  233.         if ((front  === null) || (back === null) || (flipper === null)) {
  234.             window.alert("Bad parameter(s) passed to function.\nstart_process(" + p_front + ", " + p_back + ", " + p_flipper + ")");
  235.             return false;
  236.         }
  237.        
  238.         var easing  = flipper.getAttribute("data-easing");
  239.         if (easing.length === 0) {easing = 'linear:0.5';}
  240.         var eterms  = easing.toLowerCase().split(':');
  241.         if (eterms.length === 1){
  242.             if (!isNaN(eterms[0])){
  243.                 eterms[1] = eterms[0];
  244.                 eterms[0] = "linear";
  245.             }else{
  246.                 eterms[1] = 0.5;
  247.             }      
  248.         }
  249.         if ((eterms[1] <= 0) || (eterms[1] > 1.0)) {
  250.             warning('START_PROCESS: First_period must be >= 0 and < 1, NOT ' + eterms[1] + '. Using 0.5 instead.');
  251.             eterms[1] = 0.5;
  252.         }
  253.        
  254.         var easing_type = '';
  255.         var found   = false;
  256.         for (var e in easings){
  257.             found = (easings[e] == eterms[0]);
  258.             if (found){
  259.                 easing_type = e;
  260.                 break;
  261.             }
  262.         }
  263.         if (! found ){
  264.             warning('START_PROCESS: No such easing as: ' + eterms[0] + '. Using "linear" instead.');
  265.             easing_type = 'linearTween';
  266.         }
  267.        
  268.         var first_period = +eterms[1];
  269.         if (first_period === 0) {first_period = 0.5;}
  270.        var producer = new Producer(flipper.style, front.style, back.style, easing_type, first_period);
  271.        
  272. /*  The following code checks to see if we are running as an Overlay HTML filter in SHOTCUT, or simply running in a browser window.
  273.     If we are in SHOTCUT this code is skipped, as we use the SHOTCUT webvfx object.
  274.     If we are in a Browser, we create our own webvfx object and use javascript's setTimeout function to call the render function
  275.     for each frame to manipulate the objects' CSS properties to produce the animation.
  276.    
  277.     It is much, much easier to develop and debug a SHOTCUT Overlay HTML Filter in a browser than in SHOTCUT itself. You have access
  278.     to all of the browser's development tools, like inspecting HTML elements, as well as being able to send debug information to
  279.     the javascript console and check it for error messages. Once you have done the development there you simple call this HTML file
  280.     as a WebVfx-enabled Overlay HTML filter in SHOTCUT without having to make any changes to it at all.
  281. */
  282.  
  283.         if (typeof webvfx == "undefined") {
  284.             frame_rate  = 30;
  285.             delay       = 1000/30;
  286.             duration    = 10;
  287.             niters      = duration*frame_rate;
  288.  
  289.             webvfx = {
  290.                         readyRender : function(torf){  
  291.                             var timeout_loop = function(iter, niters, delay){
  292.                                 setTimeout(function(){
  293.                                     var time = iter / niters;
  294.                                     webvfx.renderRequested.prod.render(time);
  295.                                     if (iter < (niters - 1))  timeout_loop(iter+1, niters, delay);
  296.                                 }, delay);
  297.                             }
  298.                             timeout_loop(0, niters, delay);        
  299.                         },
  300.                         renderRequested : {
  301.                             connect : function(prod, render_fun){
  302.                                 this.prod = prod;
  303.                             }
  304.                         }
  305.             };
  306.         }       // ..................... END OF if (typeof webvfx == "undefined") ....................
  307.        
  308.        webvfx.renderRequested.connect(producer, Producer.prototype.render);
  309.        webvfx.readyRender(true);  // This starts the rendering process.
  310.     }       // #################### END OF start_process ####################
  311.  
  312. //  ###############################################################################################
  313.     window.addEventListener("load", function(){start_process("front", "back", "flipper");}, false);
  314. //  ###############################################################################################
  315. </script>
  316. </head>
  317. <body>
  318.    
  319. <!--
  320.     =================================================================================
  321.                               A SHOTCUT Overlay HTML Filter
  322.                               -----------------------------
  323.     This HTML, together with the javascript and CSS, will put the word "SHOTCUT" in
  324.     the colours of the rainbow on the centre of the screen.
  325.     It will then shrink this, as if moving it to infinity on the z-axis.
  326.     It will then expand the Shotcut logo, as if moving it from infinity on the z-axis.
  327.     The motion (easing) is sinusoidal - see the javascript for different easing types.
  328.    
  329.     If you get a blank screen in SHOTCUT it is probably because you mis-typed the id
  330.     of the DIV or one (or both) of the TABLEs. Try feeding the whole filter into a
  331.     browser (e.g. Chrome) and, although the animation will not run, the screen or the
  332.     javascript console may help to track down the problem.
  333.    
  334.                     See the resulting video at: vimeo.com/251985026
  335.     =================================================================================
  336. -->
  337.  
  338. <div id="flip-container">
  339.     <div id="flipper" data-easing="OutSine:0.5">
  340.         <table id="front"> <!-- put the word e.g. "SHOTCUT" in the table cell in the  "front" DIV -->
  341.             <tr><td>
  342.                 <span id="l1">S</span><span id="l2">H</span><span id="l3">O</span><span id="l4">T</span><span id="l5">C</span><span id="l6">U</span><span id="l7">T</span>
  343.             </td></tr>
  344.         </table>
  345.         <table id="back"> <!--put the img (e.g. base64 encoded Shotcut logo) in the table cell in the "back" DIV -->
  346.             <tr><td><img alt="shotcut logo"
  347.                 src="data:image/png;base64,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">
  348.             </td></tr>
  349.         </table>
  350.     </div>
  351. </div>
  352. </body>
  353. </html>
Add Comment
Please, Sign In to add comment