├── LICENSE ├── README.md ├── rocket.css ├── rocket.js ├── rocket.min.css └── rocket.min.js /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Christian 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | :rocket: rocket 2 | ===== 3 | 4 | Rocket creates an animation when an item is moved to another element. 5 | Take a look: [DEMO PAGE](http://minimamente.com/example/rocket/) 6 | 7 | Include the CSS style: rocket.css or rocket.min.css 8 | and 9 | include the JS file: rocket.js or rocket.min.js 10 | 11 | Example: 12 | ```html 13 | 14 | 15 | ``` 16 | 17 | ##Usage 18 | 19 | Use this function on your javascript file: `rocketcss(rocket, target, theclass)` 20 | 21 | 1. Replace `rocket` with the class item that you want to move. 22 | 2. Replace `target` with the class item that you want to use as target. 23 | 3. Replace `theclass` with one of those available animations: rocketPulse, rocketPulseHole, rocketRotate, rocketRotateHole, rocketRotateGo, rocketGost, rocketFlip, rocketCircle 24 | 25 | ##Extra 26 | 27 | You can add a special class targetPulse to the target element in your custom script file action. 28 | 29 | ##Basic Example 30 | 31 | Simple example on click 32 | 33 | ```js 34 | $('.yourBtnClass').on('click', function() { 35 | rocketcss(this,'.yourTargetClass', 'rocketPulse'); 36 | $('.yourTargetClass').addClass('targetPulse'); 37 | }); 38 | ``` 39 | -------------------------------------------------------------------------------- /rocket.css: -------------------------------------------------------------------------------- 1 | /*Rocket*/ 2 | .mover { 3 | -webkit-animation-duration: 1.5s; 4 | animation-duration: 1.5s; 5 | -webkit-animation-fill-mode: both; 6 | animation-fill-mode: both; 7 | } 8 | 9 | /* rocketPulse */ 10 | @keyframes rocketPulse { 11 | 0% { 12 | -webkit-transform: scale3d(1,1,1); 13 | transform: scale3d(1,1,1); 14 | } 15 | 16 | 50% { 17 | -webkit-transform: scale3d(2,2,2); 18 | transform: scale3d(2,2,2); 19 | } 20 | 21 | 100% { 22 | -webkit-transform: scale3d(1,1,1); 23 | transform: scale3d(1,1,1); 24 | } 25 | } 26 | 27 | @-webkit-keyframes rocketPulse { 28 | 0% { 29 | -webkit-transform: scale3d(1,1,1); 30 | transform: scale3d(1,1,1); 31 | } 32 | 33 | 50% { 34 | -webkit-transform: scale3d(2,2,2); 35 | transform: scale3d(2,2,2); 36 | } 37 | 38 | 100% { 39 | -webkit-transform: scale3d(1,1,1); 40 | transform: scale3d(1,1,1); 41 | } 42 | } 43 | 44 | .rocketPulse { 45 | -webkit-animation-name: rocketPulse; 46 | animation-name: rocketPulse; 47 | } 48 | 49 | /* rocketPulseHole */ 50 | @keyframes rocketPulseHole { 51 | 0% { 52 | -webkit-transform: scale3d(1,1,1); 53 | transform: scale3d(1,1,1); 54 | } 55 | 56 | 70% { 57 | -webkit-transform: scale3d(1.5,1.5,1.5); 58 | transform: scale3d(1.5,1.5,1.5); 59 | } 60 | 61 | 100% { 62 | -webkit-transform: scale3d(0,0,0); 63 | transform: scale3d(0,0,0); 64 | } 65 | } 66 | 67 | @-webkit-keyframes rocketPulseHole { 68 | 0% { 69 | -webkit-transform: scale3d(1,1,1); 70 | transform: scale3d(1,1,1); 71 | } 72 | 73 | 70% { 74 | -webkit-transform: scale3d(1.5,1.5,1.5); 75 | transform: scale3d(1.5,1.5,1.5); 76 | } 77 | 78 | 100% { 79 | -webkit-transform: scale3d(0,0,0); 80 | transform: scale3d(0,0,0); 81 | } 82 | } 83 | 84 | .rocketPulseHole { 85 | -webkit-animation-name: rocketPulseHole; 86 | animation-name: rocketPulseHole; 87 | } 88 | 89 | /* rocketRotate */ 90 | @keyframes rocketRotate { 91 | 0% { 92 | -webkit-transform: scale3d(1,1,1); 93 | -webkit-transform: rotateZ(0deg); 94 | transform: scale3d(1,1,1); 95 | transform: rotateZ(0deg); 96 | } 97 | 98 | 100% { 99 | -webkit-transform: scale3d(1,1,1); 100 | -webkit-transform: rotateZ(720deg); 101 | transform: scale3d(1,1,1); 102 | transform: rotateZ(720deg); 103 | } 104 | } 105 | 106 | @-webkit-keyframes rocketRotate { 107 | 0% { 108 | -webkit-transform: scale3d(1,1,1); 109 | -webkit-transform: rotateZ(0deg); 110 | transform: scale3d(1,1,1); 111 | transform: rotateZ(0deg); 112 | } 113 | 114 | 100% { 115 | -webkit-transform: scale3d(1,1,1); 116 | -webkit-transform: rotateZ(720deg); 117 | transform: scale3d(1,1,1); 118 | transform: rotateZ(720deg); 119 | } 120 | } 121 | 122 | .rocketRotate { 123 | -webkit-animation-name: rocketRotate; 124 | animation-name: rocketRotate; 125 | } 126 | 127 | /* rocketRotateHole */ 128 | @keyframes rocketRotateHole { 129 | 0% { 130 | -webkit-transform: rotate(0deg) scale(1); 131 | transform: rotate(0deg) scale(1); 132 | } 133 | 134 | 100% { 135 | -webkit-transform: rotate(180deg) scale(0); 136 | transform: rotate(180deg) scale(0); 137 | } 138 | } 139 | 140 | @-webkit-keyframes rocketRotateHole { 141 | 0% { 142 | -webkit-transform: rotate(0deg) scale(1); 143 | transform: rotate(0deg) scale(1); 144 | } 145 | 146 | 100% { 147 | -webkit-transform: rotate(180deg) scale(0); 148 | transform: rotate(180deg) scale(0); 149 | } 150 | } 151 | 152 | .rocketRotateHole { 153 | -webkit-animation-name: rocketRotateHole; 154 | animation-name: rocketRotateHole; 155 | } 156 | 157 | /* rocketRotateGo */ 158 | @keyframes rocketRotateGo { 159 | 0% { 160 | -webkit-transform: rotate(720deg) scale(1); 161 | transform: rotate(720deg) scale(1); 162 | } 163 | 164 | 100% { 165 | -webkit-transform: rotate(0deg) scale(0); 166 | transform: rotate(0deg) scale(0); 167 | } 168 | } 169 | 170 | @-webkit-keyframes rocketRotateGo { 171 | 0% { 172 | -webkit-transform: rotate(720deg) scale(1); 173 | transform: rotate(720deg) scale(1); 174 | } 175 | 176 | 100% { 177 | -webkit-transform: rotate(0deg) scale(0); 178 | transform: rotate(0deg) scale(0); 179 | } 180 | } 181 | 182 | .rocketRotateGo { 183 | -webkit-animation-name: rocketRotateGo; 184 | animation-name: rocketRotateGo; 185 | } 186 | 187 | /* rocketGost */ 188 | @-webkit-keyframes rocketGost { 189 | 0% { 190 | opacity: 1; 191 | } 192 | 193 | 100% { 194 | -webkit-transform: rotate3d(0, 0, 1, -45deg); 195 | transform: rotate3d(0, 0, 1, -45deg); 196 | opacity: 0; 197 | } 198 | } 199 | 200 | @keyframes rocketGost { 201 | 0% { 202 | opacity: 1; 203 | } 204 | 205 | 100% { 206 | -webkit-transform: rotate3d(0, 0, 1, -45deg); 207 | transform: rotate3d(0, 0, 1, -45deg); 208 | opacity: 0; 209 | } 210 | } 211 | 212 | .rocketGost { 213 | -webkit-animation-name: rocketGost; 214 | animation-name: rocketGost; 215 | -webkit-animation-delay: .3s; 216 | animation-delay: .3s; 217 | } 218 | 219 | /* rocketFlip */ 220 | @-webkit-keyframes rocketFlip { 221 | 0% { 222 | opacity: 1; 223 | -webkit-transform: rotateY(360deg); 224 | transform: rotateY(360deg); 225 | } 226 | 227 | 100% { 228 | opacity: 0; 229 | -webkit-transform: rotateY(0deg); 230 | transform: rotateY(0deg); 231 | } 232 | } 233 | 234 | @keyframes rocketFlip { 235 | 0% { 236 | opacity: 1; 237 | -webkit-transform: rotateY(360deg); 238 | transform: rotateY(360deg); 239 | } 240 | 241 | 100% { 242 | opacity: 0; 243 | -webkit-transform: rotateY(0deg); 244 | transform: rotateY(0deg); 245 | } 246 | } 247 | 248 | .rocketFlip { 249 | -webkit-animation-name: rocketFlip; 250 | animation-name: rocketFlip; 251 | } 252 | 253 | /* rocketCircle */ 254 | @-webkit-keyframes rocketCircle { 255 | 0% { 256 | opacity: 1; 257 | -webkit-border-radius: 999px; 258 | border-radius: 999px; 259 | -webkit-transform: scale3d(1,1,1); 260 | transform: scale3d(1,1,1); 261 | } 262 | 263 | 100% { 264 | opacity: 0; 265 | -webkit-border-radius: 999px; 266 | border-radius: 999px; 267 | -webkit-transform: scale3d(0,0,0); 268 | transform: scale3d(0,0,0); 269 | } 270 | } 271 | 272 | @keyframes rocketCircle { 273 | 0% { 274 | opacity: 1; 275 | -webkit-border-radius: 999px; 276 | border-radius: 999px; 277 | -webkit-transform: scale3d(1,1,1); 278 | transform: scale3d(1,1,1); 279 | } 280 | 281 | 100% { 282 | opacity: 0; 283 | -webkit-border-radius: 999px; 284 | border-radius: 999px; 285 | -webkit-transform: scale3d(0,0,0); 286 | transform: scale3d(0,0,0); 287 | } 288 | } 289 | 290 | .rocketCircle { 291 | -webkit-animation-name: rocketCircle; 292 | animation-name: rocketCircle; 293 | } 294 | 295 | /* only for target: targetPulse */ 296 | @-webkit-keyframes targetPulse { 297 | 0%, 20%, 60% { 298 | -webkit-transform: scale3d(1, 1, 1); 299 | transform: scale3d(1, 1, 1); 300 | } 301 | 302 | 40%, 80% { 303 | -webkit-transform: scale3d(1.2, 1.2, 1.2); 304 | transform: scale3d(1.2, 1.2, 1.2); 305 | } 306 | 307 | 100% { 308 | -webkit-transform: scale3d(1, 1, 1); 309 | transform: scale3d(1, 1, 1); 310 | } 311 | } 312 | 313 | @keyframes targetPulse { 314 | 0%, 20%, 60% { 315 | -webkit-transform: scale3d(1, 1, 1); 316 | transform: scale3d(1, 1, 1); 317 | } 318 | 319 | 40%, 80% { 320 | -webkit-transform: scale3d(1.2, 1.2, 1.2); 321 | transform: scale3d(1.2, 1.2, 1.2); 322 | } 323 | 324 | 100% { 325 | -webkit-transform: scale3d(1, 1, 1); 326 | transform: scale3d(1, 1, 1); 327 | } 328 | } 329 | 330 | .targetPulse { 331 | -webkit-animation-duration: 1s; 332 | animation-duration: 1s; 333 | -webkit-animation-fill-mode: both; 334 | animation-fill-mode: both; 335 | -webkit-animation-name: targetPulse; 336 | animation-name: targetPulse; 337 | -webkit-animation-delay: 1.2s; 338 | animation-delay: 1.2s; 339 | } 340 | -------------------------------------------------------------------------------- /rocket.js: -------------------------------------------------------------------------------- 1 | function rocketcss(rocket, target, theclass) { 2 | 3 | var cloned = $(rocket).clone(); 4 | 5 | var offset_target = $(target).offset(); 6 | var offset_rocket = $(rocket).offset(); 7 | 8 | cloned.insertAfter(rocket); 9 | $(rocket).css({ "opacity": "0" }); 10 | cloned.css({ "position": "fixed", "z-index": "999999", "top": offset_rocket.top + "px", "left": offset_rocket.left + "px", "right": "auto", "bottom": "auto", "margin": "auto", "padding": "auto", "opacity": "1" }).animate({ 'top': offset_target.top + 'px', 'left': offset_target.left + 'px'}, 1500); 11 | cloned.addClass('mover ' + (theclass || 'rocketPulseHole') ); 12 | setTimeout(function () { 13 | cloned.fadeOut(300); 14 | }, 1500); 15 | return cloned; 16 | } 17 | -------------------------------------------------------------------------------- /rocket.min.css: -------------------------------------------------------------------------------- 1 | .mover{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-fill-mode:both;animation-fill-mode:both;}@keyframes rocketPulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}50%{-webkit-transform:scale3d(2,2,2);transform:scale3d(2,2,2);}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}}@-webkit-keyframes rocketPulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}50%{-webkit-transform:scale3d(2,2,2);transform:scale3d(2,2,2);}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}}.rocketPulse{-webkit-animation-name:rocketPulse;animation-name:rocketPulse;}@keyframes rocketPulseHole{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}70%{-webkit-transform:scale3d(1.5,1.5,1.5);transform:scale3d(1.5,1.5,1.5);}100%{-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);}}@-webkit-keyframes rocketPulseHole{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}70%{-webkit-transform:scale3d(1.5,1.5,1.5);transform:scale3d(1.5,1.5,1.5);}100%{-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);}}.rocketPulseHole{-webkit-animation-name:rocketPulseHole;animation-name:rocketPulseHole;}@keyframes rocketRotate{0%{-webkit-transform:scale3d(1,1,1);-webkit-transform:rotateZ(0deg);transform:scale3d(1,1,1);transform:rotateZ(0deg);}100%{-webkit-transform:scale3d(1,1,1);-webkit-transform:rotateZ(720deg);transform:scale3d(1,1,1);transform:rotateZ(720deg);}}@-webkit-keyframes rocketRotate{0%{-webkit-transform:scale3d(1,1,1);-webkit-transform:rotateZ(0deg);transform:scale3d(1,1,1);transform:rotateZ(0deg);}100%{-webkit-transform:scale3d(1,1,1);-webkit-transform:rotateZ(720deg);transform:scale3d(1,1,1);transform:rotateZ(720deg);}}.rocketRotate{-webkit-animation-name:rocketRotate;animation-name:rocketRotate;}@keyframes rocketRotateHole{0%{-webkit-transform:rotate(0deg) scale(1);transform:rotate(0deg) scale(1);}100%{-webkit-transform:rotate(180deg) scale(0);transform:rotate(180deg) scale(0);}}@-webkit-keyframes rocketRotateHole{0%{-webkit-transform:rotate(0deg) scale(1);transform:rotate(0deg) scale(1);}100%{-webkit-transform:rotate(180deg) scale(0);transform:rotate(180deg) scale(0);}}.rocketRotateHole{-webkit-animation-name:rocketRotateHole;animation-name:rocketRotateHole;}@keyframes rocketRotateGo{0%{-webkit-transform:rotate(720deg) scale(1);transform:rotate(720deg) scale(1);}100%{-webkit-transform:rotate(0deg) scale(0);transform:rotate(0deg) scale(0);}}@-webkit-keyframes rocketRotateGo{0%{-webkit-transform:rotate(720deg) scale(1);transform:rotate(720deg) scale(1);}100%{-webkit-transform:rotate(0deg) scale(0);transform:rotate(0deg) scale(0);}}.rocketRotateGo{-webkit-animation-name:rocketRotateGo;animation-name:rocketRotateGo;}@-webkit-keyframes rocketGost{0%{opacity:1;}100%{-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0;}}@keyframes rocketGost{0%{opacity:1;}100%{-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0;}}.rocketGost{-webkit-animation-name:rocketGost;animation-name:rocketGost;-webkit-animation-delay:.3s;animation-delay:.3s;}@-webkit-keyframes rocketFlip{0%{opacity:1;-webkit-transform:rotateY(360deg);transform:rotateY(360deg);}100%{opacity:0;-webkit-transform:rotateY(0deg);transform:rotateY(0deg);}}@keyframes rocketFlip{0%{opacity:1;-webkit-transform:rotateY(360deg);transform:rotateY(360deg);}100%{opacity:0;-webkit-transform:rotateY(0deg);transform:rotateY(0deg);}}.rocketFlip{-webkit-animation-name:rocketFlip;animation-name:rocketFlip;}@-webkit-keyframes rocketCircle{0%{opacity:1;-webkit-border-radius:999px;border-radius:999px;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}100%{opacity:0;-webkit-border-radius:999px;border-radius:999px;-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);}}@keyframes rocketCircle{0%{opacity:1;-webkit-border-radius:999px;border-radius:999px;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}100%{opacity:0;-webkit-border-radius:999px;border-radius:999px;-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);}}.rocketCircle{-webkit-animation-name:rocketCircle;animation-name:rocketCircle;}@-webkit-keyframes targetPulse{0%,20%,60%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}40%,80%{-webkit-transform:scale3d(1.2,1.2,1.2);transform:scale3d(1.2,1.2,1.2);}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}}@keyframes targetPulse{0%,20%,60%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}40%,80%{-webkit-transform:scale3d(1.2,1.2,1.2);transform:scale3d(1.2,1.2,1.2);}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);}}.targetPulse{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:targetPulse;animation-name:targetPulse;-webkit-animation-delay:1.2s;animation-delay:1.2s;} 2 | -------------------------------------------------------------------------------- /rocket.min.js: -------------------------------------------------------------------------------- 1 | function rocketcss(t,o,e){var a=$(t).clone(),i=$(o).offset(),s=$(t).offset();return a.insertAfter(t),$(t).css({opacity:"0"}),a.css({position:"fixed","z-index":"999999",top:s.top+"px",left:s.left+"px",right:"auto",bottom:"auto",margin:"auto",padding:"auto",opacity:"1"}).animate({top:i.top+"px",left:i.left+"px"},1500),a.addClass("mover "+(e||"rocketPulseHole")),setTimeout(function(){a.fadeOut(300)},1500),a} 2 | --------------------------------------------------------------------------------