Rotate image 360° every .75 seconds on Loop JS - javascript
I need to get a JS script to get this center arrow image (loading.svg) to rotate 360 degrees every .75 seconds on a continuous loop. Here is the button I'm talking about.
http://royalidea.com/happyname/pending.html
It would been to be a class so that several of these icons could be rotating simultaneously - several loading items at time...
Any help would be much appreciated!
Here is CSS answer:
JSFIDDLE
.loading_arrow {
width: 32px;
margin-top: 13px;
margin-left: 42%;
-webkit-animation: rotation .75s infinite linear;
-moz-animation: rotation .75s infinite linear;
-o-animation: rotation .75s infinite linear;
animation: rotation .75s infinite linear;
}
body {
background-color:#000;
}
#-webkit-keyframes rotation {
from {
-webkit-transform: rotate(0deg);
}
to {
-webkit-transform: rotate(359deg);
}
}
#-moz-keyframes rotation {
from {
-moz-transform: rotate(0deg);
}
to {
-moz-transform: rotate(359deg);
}
}
#-o-keyframes rotation {
from {
-o-transform: rotate(0deg);
}
to {
-o-transform: rotate(359deg);
}
}
#keyframes rotation {
from {
transform: rotate(0deg);
}
to {
transform: rotate(359deg);
}
}
Here's a CSS solution which will spin 360deg every 0.75s with a 0.75s delay. If you want the delay to be longer or shorter, just play with the 50% portion of 50%, 100% and adjust the animation time accordingly.
img.loading_arrow {
-webkit-animation: spin_delay 1.5s linear infinite;
animation: spin_delay 1.5s linear infinite;
}
#-webkit-keyframes spin_delay {
0% {
-webkit-transform-origin: center;
transform-origin: center;
-webkit-transform: rotate3d(0, 0, 1, 0deg);
transform: rotate3d(0, 0, 1, 0deg);
}
50%, 100% {
-webkit-transform: rotate3d(0, 0, 1, 360deg);
transform: rotate3d(0, 0, 1, 360deg);
}
}
#keyframes spin_delay {
0% {
-webkit-transform-origin: center;
-ms-transform-origin: center;
transform-origin: center;
-webkit-transform: rotate3d(0, 0, 1, 0deg);
-ms-transform: rotate3d(0, 0, 1, 0deg);
transform: rotate3d(0, 0, 1, 0deg);
}
50%, 100% {
-webkit-transform: rotate3d(0, 0, 1, 360deg);
-ms-transform: rotate3d(0, 0, 1, 360deg);
transform: rotate3d(0, 0, 1, 360deg);
}
}
JS Fiddle: http://jsfiddle.net/3na66ug3/
HTML:
<!DOCTYPE html>
<html style="-webkit-overflow-scrolling: touch;">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Rotate HTML elements by mouse in JavaScript - Propeller.js</title>
<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi">
<link rel="stylesheet" href="example/css/turbine.css">
</head>
<body>
<img id="turbine" src="example/img/turbine.png" onmousedown="showLibraryInfo()" ontouchstart="showLibraryInfo()">
<div class="arrow">
<img src="example/img/arrow.png">
<p>
Drag or swipe propeller
</p>
</div>
<script src="src/propeller.js"></script>
<script>
new Propeller(document.getElementById('turbine'), {inertia: 0.99});
function showLibraryInfo() {
if (window.libInfoShown !== true) {
var windStuff = document.getElementsByClassName('wind');
var libStuff = document.getElementsByClassName('propeller');
for (var i = 0; i < windStuff.length; i++) {
var obj = windStuff[i];
obj.style.display = 'none';
}
for (var i = 0; i < libStuff.length; i++) {
var obj = libStuff[i];
obj.style.display = 'inline-block';
}
window.libInfoShown = true;
}
}
</script>
</body>
</html>
CSS:
body, html {
background-color: #2d2d2d;
width: 100%;
height: 100%;
font-size:0.8em;
font-family: "Helvetica Neue", "Helvetica", "Arial";
color: #ffffff;
}
#turbine {
width: 70%;
height: auto;
position: absolute;
left: 5%;
z-index: 99;
}
.turbine {
width: 100%;
height: auto;
}
.arrow {
position: relative;
top: 5%;
left: 5%;
width: 70%;
}
Demo: http://pixelscommander.com/polygon/propeller/example/jquerygrid.html#.VAX2ASiaWJI
Source: http://www.techrecite.com/rotate-image-photo-or-object-around-its-axis-using-javascript-animation/
I would suggest using an animated gif as well, however, you can do it with JS like this:
$(function() {
var loading = $('.loading_arrow'),
degree = 0,
timer;
function rotate() {
loading.css({ transform: 'rotate(' + degree + 'deg)'});
timer = setTimeout(function() {
++degree;
rotate();
},5); //lower this to increase speed
}
rotate();
});
JSFiddle
You can do this with CSS animations:
#-webkit-keyframes loader {
from {-webkit-transform: rotate(0);}
to {-webkit-transform: rotate(-360deg);}
}
#keyframes loader {
from {transform: rotate(0);}
to {transform: rotate(-360deg);}
}
img {
width: 32px;
height: 32px;
-webkit-animation: loader 1s infinite linear;
animation: loader 1s infinite linear;
}
jsFiddle Demo.
Here's a pure CSS solution with a jsFiddle demo here: http://jsfiddle.net/cay3j79t/2/
HTML
<div class="container">
<img class="loading" src="http://royalidea.com/happyname/img/loading.svg">
</div>
CSS
.container {
background-color: blue;
}
.loading {
-webkit-animation: cycle 0.75s infinite linear;
animation: cycle 0.75s infinite linear;
}
#-webkit-keyframes cycle {
from {
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
#keyframes cycle {
from {
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
Related
CSS Animation not working as expected, only after saving my file
I have a CSS animation for a group of spans that make out a word. I am having trouble getting them to work properly. It seems on page load or refresh, they don't work. They only work after I manually save my project file. Here is the CSS: .word { margin: 2rem; } .word span { cursor: pointer; display: inline-block; font-size: 4vw; user-select: none; line-height: 0.8; animation-iteration-count: 1; } .word span:nth-child(1).active { animation: balance 1.5s ease-out; transform-origin: bottom left; } #keyframes balance { 0%, 100% { transform: rotate(100deg); } 30%, 60% { transform: rotate(-45deg); } } .word span:nth-child(2).active { animation: shrinkjump 1s ease-in-out; transform-origin: bottom center; } #keyframes shrinkjump { 10%, 35% { transform: scale(2, 0.2) translate(0, 0); } 45%, 50% { transform: scale(1) translate(0, -150px); } 80% { transform: scale(1) translate(0, 0); } } .word span:nth-child(3).active { animation: falling 2s ease-out; transform-origin: bottom center; } #keyframes falling { 12% { transform: rotateX(240deg); } 24% { transform: rotateX(150deg); } 36% { transform: rotateX(200deg); } 48% { transform: rotateX(175deg); } 60%, 85% { transform: rotateX(180deg); } 100% { transform: rotateX(0deg); } } .word span:nth-child(4).active { animation: rotate 1s ease-out; } #keyframes rotate { 20%, 80% { transform: rotateY(180deg); } 100% { transform: rotateY(360deg); } } .word span:nth-child(5).active { animation: shrinkjump 1s ease-in-out; transform-origin: bottom center; } .word span:nth-child(6).active { animation: falling 2s ease-out; transform-origin: bottom center; } .word span:nth-child(7).active { animation: toplong 1.5s linear; } .word span:nth-child(8).active { animation: balance 1.5s ease-out; transform-origin: top left; } #keyframes toplong { 10%, 40% { transform: translateY(-48vh) scaleY(1); } 90% { transform: translateY(-48vh) scaleY(4); } } And here is the JavaScript to change the className: const spans = document.querySelectorAll(".word span"); spans.forEach((span, idx) => { span.addEventListener("click", (e) => { e.target.classList.add("active"); }); span.addEventListener("animationend", (e) => { e.target.classList.remove("active"); }); }); Does anyone have any idea why the css is behaving this way? I have experimented with a timeout and with the JavaScript to udpate the className. Thanks!
How can I remove the pace loading page from the website HTML page?
How can I remove the pace loading page from the website HTML page? css pace file: .pace { -webkit-pointer-events: none; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; -webkit-perspective: 12rem; -moz-perspective: 12rem; -ms-perspective: 12rem; -o-perspective: 12rem; perspective: 12rem; z-index: 2000; position: fixed; height: 6rem; width: 6rem; margin: auto; top: 0; left: 0; right: 0; bottom: 0; } .pace .pace-activity { display: block; position: fixed; z-index: 2000; top: 35px; right: 35px; width: 20px; height: 20px; border: solid 2px transparent; border-top-color: #0aa699; border-left-color: #0aa699; border-radius: 20px; -webkit-animation: pace-spinner 400ms linear infinite; -moz-animation: pace-spinner 400ms linear infinite; -ms-animation: pace-spinner 400ms linear infinite; -o-animation: pace-spinner 400ms linear infinite; animation: pace-spinner 400ms linear infinite; } .pace.pace-inactive .pace-activity { display: none; } #-webkit-keyframes pace-spinner { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } #-moz-keyframes pace-spinner { 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); } 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); } } #-o-keyframes pace-spinner { 0% { -o-transform: rotate(0deg); transform: rotate(0deg); } 100% { -o-transform: rotate(360deg); transform: rotate(360deg); } } #-ms-keyframes pace-spinner { 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); } 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); } } #keyframes pace-spinner { 0% { transform: rotate(0deg); transform: rotate(0deg); } 100% { transform: rotate(360deg); transform: rotate(360deg); } } pace js file : /*! pace 0.4.15 */ (function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O=[].slice,P={}.hasOwnProperty,Q=function(a,b){function c(){this.constructor=a}for(var d in b)P.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},R=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};s={catchupTime:500,initialRate:.03,minTime:500,ghostTime:250,maxProgressPerFrame:10,easeFactor:1.25,startOnPageLoad:!0,restartOnPushState:!0,restartOnRequestAfter:500,target:"body",elements:{checkInterval:100,selectors:["body"]},eventLag:{minSamples:10,sampleCount:3,lagThreshold:3},ajax:{trackMethods:["GET"],trackWebSockets:!1}},z=function(){var a;return null!=(a="undefined"!=typeof performance&&null!==performance?"function"==typeof performance.now?performance.now():void 0:void 0)?a:+new Date},B=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,r=window.cancelAnimationFrame||window.mozCancelAnimationFrame,null==B&&(B=function(a){return setTimeout(a,50)},r=function(a){return clearTimeout(a)}),D=function(a){var b,c;return b=z(),c=function(){var d;return d=z()-b,b=z(),a(d,function(){return B(c)})},c()},C=function(){var a,b,c;return c=arguments[0],b=arguments[1],a=3<=arguments.length?O.call(arguments,2):[],"function"==typeof c[b]?c[b].apply(c,a):c[b]},t=function(){var a,b,c,d,e,f,g;for(b=arguments[0],d=2<=arguments.length?O.call(arguments,1):[],f=0,g=d.length;g>f;f++)if(c=d[f])for(a in c)P.call(c,a)&&(e=c[a],null!=b[a]&&"object"==typeof b[a]&&null!=e&&"object"==typeof e?t(b[a],e):b[a]=e);return b},o=function(a){var b,c,d,e,f;for(c=b=0,e=0,f=a.length;f>e;e++)d=a[e],c+=Math.abs(d),b++;return c/b},v=function(a,b){var c,d,e;if(null==a&&(a="options"),null==b&&(b=!0),e=document.querySelector("[data-pace-"+a+"]")){if(c=e.getAttribute("data-pace-"+a),!b)return c;try{return JSON.parse(c)}catch(f){return d=f,"undefined"!=typeof console&&null!==console?console.error("Error parsing inline pace options",d):void 0}}},null==window.Pace&&(window.Pace={}),A=Pace.options=t(s,window.paceOptions,v()),h=function(a){function b(){return M=b.__super__.constructor.apply(this,arguments)}return Q(b,a),b}(Error),b=function(){function a(){this.progress=0}return a.prototype.getElement=function(){var a;if(null==this.el){if(a=document.querySelector(A.target),!a)throw new h;this.el=document.createElement("div"),this.el.className="pace pace-active",document.body.className=document.body.className.replace("pace-done",""),document.body.className+=" pace-running",this.el.innerHTML='<div class="pace-progress">\n <div class="pace-progress-inner"></div>\n</div>\n<div class="pace-activity"></div>',null!=a.firstChild?a.insertBefore(this.el,a.firstChild):a.appendChild(this.el)}return this.el},a.prototype.finish=function(){var a;return a=this.getElement(),a.className=a.className.replace("pace-active",""),a.className+=" pace-inactive",document.body.className=document.body.className.replace("pace-running",""),document.body.className+=" pace-done"},a.prototype.update=function(a){return this.progress=a,this.render()},a.prototype.destroy=function(){try{this.getElement().parentNode.removeChild(this.getElement())}catch(a){h=a}return this.el=void 0},a.prototype.render=function(){var a,b;return null==document.querySelector(A.target)?!1:(a=this.getElement(),a.children[0].style.width=""+this.progress+"%",(!this.lastRenderedProgress||0|(this.lastRenderedProgress|0!==this.progress))&&(a.children[0].setAttribute("data-progress-text",""+(0|this.progress)+"%"),this.progress>=100?b="99":(b=this.progress<10?"0":"",b+=0|this.progress),a.children[0].setAttribute("data-progress",""+b)),this.lastRenderedProgress=this.progress)},a.prototype.done=function(){return this.progress>=100},a}(),g=function(){function a(){this.bindings={}}return a.prototype.trigger=function(a,b){var c,d,e,f,g;if(null!=this.bindings[a]){for(f=this.bindings[a],g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.call(this,b));return g}},a.prototype.on=function(a,b){var c;return null==(c=this.bindings)[a]&&(c[a]=[]),this.bindings[a].push(b)},a}(),J=window.XMLHttpRequest,I=window.XDomainRequest,H=window.WebSocket,u=function(a,b){var c,d,e,f;f=[];for(d in b.prototype)try{e=b.prototype[d],null==a[d]&&"function"!=typeof e?f.push(a[d]=e):f.push(void 0)}catch(g){c=g}return f},i=function(a){function b(){var a,c=this;b.__super__.constructor.apply(this,arguments),a=function(a){var b;return b=a.open,a.open=function(d,e){var f;return f=(null!=d?d:"GET").toUpperCase(),R.call(A.ajax.trackMethods,f)>=0&&c.trigger("request",{type:d,url:e,request:a}),b.apply(a,arguments)}},window.XMLHttpRequest=function(b){var c;return c=new J(b),a(c),c},u(window.XMLHttpRequest,J),null!=I&&(window.XDomainRequest=function(){var b;return b=new I,a(b),b},u(window.XDomainRequest,I)),null!=H&&A.ajax.trackWebSockets&&(window.WebSocket=function(a,b){var d;return d=new H(a,b),c.trigger("request",{type:"socket",url:a,protocols:b,request:d}),d},u(window.WebSocket,H))}return Q(b,a),b}(g),K=null,w=function(){return null==K&&(K=new i),K},A.restartOnRequestAfter!==!1&&w().on("request",function(b){var c,d,e;return e=b.type,d=b.request,Pace.running?void 0:(c=arguments,setTimeout(function(){var b,f,g,h,i,j,k;if(f="socket"===e?d.readyState<2:0<(i=d.readyState)&&4>i){for(Pace.restart(),j=Pace.sources,k=[],g=0,h=j.length;h>g;g++){if(b=j[g],b instanceof a){b.watch.apply(b,c);break}k.push(void 0)}return k}},A.restartOnRequestAfter))}),a=function(){function a(){var a=this;this.elements=[],w().on("request",function(){return a.watch.apply(a,arguments)})}return a.prototype.watch=function(a){var b,c,d;return d=a.type,b=a.request,c="socket"===d?new l(b):new m(b),this.elements.push(c)},a}(),m=function(){function a(a){var b,c,d,e,f,g,h=this;if(this.progress=0,null!=window.ProgressEvent)for(c=null,a.addEventListener("progress",function(a){return h.progress=a.lengthComputable?100*a.loaded/a.total:h.progress+(100-h.progress)/2}),g=["load","abort","timeout","error"],d=0,e=g.length;e>d;d++)b=g[d],a.addEventListener(b,function(){return h.progress=100});else f=a.onreadystatechange,a.onreadystatechange=function(){var b;return 0===(b=a.readyState)||4===b?h.progress=100:3===a.readyState&&(h.progress=50),"function"==typeof f?f.apply(null,arguments):void 0}}return a}(),l=function(){function a(a){var b,c,d,e,f=this;for(this.progress=0,e=["error","open"],c=0,d=e.length;d>c;c++)b=e[c],a.addEventListener(b,function(){return f.progress=100})}return a}(),d=function(){function a(a){var b,c,d,f;for(null==a&&(a={}),this.elements=[],null==a.selectors&&(a.selectors=[]),f=a.selectors,c=0,d=f.length;d>c;c++)b=f[c],this.elements.push(new e(b))}return a}(),e=function(){function a(a){this.selector=a,this.progress=0,this.check()}return a.prototype.check=function(){var a=this;return document.querySelector(this.selector)?this.done():setTimeout(function(){return a.check()},A.elements.checkInterval)},a.prototype.done=function(){return this.progress=100},a}(),c=function(){function a(){var a,b,c=this;this.progress=null!=(b=this.states[document.readyState])?b:100,a=document.onreadystatechange,document.onreadystatechange=function(){return null!=c.states[document.readyState]&&(c.progress=c.states[document.readyState]),"function"==typeof a?a.apply(null,arguments):void 0}}return a.prototype.states={loading:0,interactive:50,complete:100},a}(),f=function(){function a(){var a,b,c,d,e,f=this;this.progress=0,a=0,e=[],d=0,c=z(),b=setInterval(function(){var g;return g=z()-c-50,c=z(),e.push(g),e.length>A.eventLag.sampleCount&&e.shift(),a=o(e),++d>=A.eventLag.minSamples&&a<A.eventLag.lagThreshold?(f.progress=100,clearInterval(b)):f.progress=100*(3/(a+3))},50)}return a}(),k=function(){function a(a){this.source=a,this.last=this.sinceLastUpdate=0,this.rate=A.initialRate,this.catchup=0,this.progress=this.lastProgress=0,null!=this.source&&(this.progress=C(this.source,"progress"))}return a.prototype.tick=function(a,b){var c;return null==b&&(b=C(this.source,"progress")),b>=100&&(this.done=!0),b===this.last?this.sinceLastUpdate+=a:(this.sinceLastUpdate&&(this.rate=(b-this.last)/this.sinceLastUpdate),this.catchup=(b-this.progress)/A.catchupTime,this.sinceLastUpdate=0,this.last=b),b>this.progress&&(this.progress+=this.catchup*a),c=1-Math.pow(this.progress/100,A.easeFactor),this.progress+=c*this.rate*a,this.progress=Math.min(this.lastProgress+A.maxProgressPerFrame,this.progress),this.progress=Math.max(0,this.progress),this.progress=Math.min(100,this.progress),this.lastProgress=this.progress,this.progress},a}(),F=null,E=null,p=null,G=null,n=null,q=null,Pace.running=!1,x=function(){return A.restartOnPushState?Pace.restart():void 0},null!=window.history.pushState&&(L=window.history.pushState,window.history.pushState=function(){return x(),L.apply(window.history,arguments)}),null!=window.history.replaceState&&(N=window.history.replaceState,window.history.replaceState=function(){return x(),N.apply(window.history,arguments)}),j={ajax:a,elements:d,document:c,eventLag:f},(y=function(){var a,c,d,e,f,g,h,i,l;for(Pace.sources=F=[],h=["ajax","elements","document","eventLag"],d=0,f=h.length;f>d;d++)c=h[d],A[c]!==!1&&F.push(new j[c](A[c]));for(l=null!=(i=A.extraSources)?i:[],e=0,g=l.length;g>e;e++)a=l[e],F.push(new a(A));return Pace.bar=p=new b,E=[],G=new k})(),Pace.stop=function(){return Pace.running=!1,p.destroy(),q=!0,null!=n&&("function"==typeof r&&r(n),n=null),y()},Pace.restart=function(){return Pace.stop(),Pace.start()},Pace.go=function(){return Pace.running=!0,p.render(),q=!1,n=D(function(a,b){var c,d,e,f,g,h,i,j,l,m,n,o,r,s,t,u,v,w;for(j=100-p.progress,d=r=0,e=!0,h=s=0,u=F.length;u>s;h=++s)for(n=F[h],m=null!=E[h]?E[h]:E[h]=[],g=null!=(w=n.elements)?w:[n],i=t=0,v=g.length;v>t;i=++t)f=g[i],l=null!=m[i]?m[i]:m[i]=new k(f),e&=l.done,l.done||(d++,r+=l.tick(a));return c=r/d,p.update(G.tick(a,c)),o=z(),p.done()||e||q?(p.update(100),setTimeout(function(){return p.finish(),Pace.running=!1},Math.max(A.ghostTime,Math.min(A.minTime,z()-o)))):b()})},Pace.start=function(a){t(A,a),Pace.running=!0;try{p.render()}catch(b){h=b}return document.querySelector(".pace")?Pace.go():setTimeout(Pace.start,50)},"function"==typeof define&&define.amd?define(function(){return Pace}):"object"==typeof exports?module.exports=Pace:A.startOnPageLoad&&Pace.start()}).call(this); these two css and js files are put as a link in my php file, when removing them, a blank page is coming, everything in the html is disappeared. I don't know how can I get rid of that pace loading feature.
Make Coin Flip Animation Two Sided
I would like this animation taken from animate.css to show a coin with 2 different side and not the same one. I pasted the relevant parts of my code to this Fiddle: jsFiddle Link HTML Code: <div id="coin-flip"> <button id="btnFlip">Flip the Coin</button></br></br></br> <div id="coin-flip-cont"> <div id="coin"></div> </div></br></br></br> <h2 id="result"></h2> </div> Javascript, jQuery Code: $(function() { var coin = { sideOne: "./img/image1.png", sideTwo: "./img/image2.png" } $("#btnFlip").click(function() { $("#coin").html(`<img class="animated flip"src="${coin[result]}" width="200" length="200"/>`); }); }); CSS is from Animate.css, You can view it in the Fiddle. Basically the result I want is the coin to flip showing both different sides and landing on the one that is set by the rest of my code. EDIT: Just adding this as an example of what I would like to achieve http://codepen.io/html5andblog/pen/ea62c27ddb5c7b022ab1e889e2f1b8d2 I feel that this can be done in a much simpler way and with the css that I already have.
First of all, change this line of your HTML code : <button id="btnFlip">Flip the Coin</button> To : <button id="btnFlip" onclick="coin_flip()">Flip the Coin</button> And then change your javascript to this code : function coin_flip{ var coin_1 = "/images/image_1.png" var coin_2 = "/images/image_2.png" // the 8 below is the number of flips in your animation for (var i = 0 ; i<8 ; i++){ if (document.getElementById("coin").src == coin_1){ document.getElementById("coin").src == coin_2 } if (document.getElementById("coin").src == coin_2){ document.getElementById("coin").src == coin_1 } } // below chooses a random side var rand = Math.floor((Math.random() * 2) + 1); document.getElementById("coin").src == "coin_" + rand } This javascript code flips the coin 8 times before choosing a random side to land on.
you can use animationend event to detect when the CSS animation ended. Then you execute code to change the image source. JQuery $('#coin').on('webkitAnimationEnd oanimationend msAnimationEnd animationend', function(e) { $("#coin").removeClass('animateCoin'); setTimeout(function() { var srcImg = $($('#coin img')[0]).attr('src'); if (srcImg === coin.heads) $($('#coin img')[0]).attr('src',coin.tails); else $($('#coin img')[0]).attr('src',coin.heads); $("#coin").addClass('animateCoin'); },50); }); CSS : .animateCoin { animation: flip 1s; }
Here is the complete code you can flip coin 2 sided solution run snippet. To watch correct result see in full page view otherwise you can see on codepen. You can have link of codepen too click here jQuery(document).ready(function($){ var spinArray = ['animation900','animation1080','animation1260','animation1440','animation1620','animation1800','animation1980','animation2160']; function getSpin() { var spin = spinArray[Math.floor(Math.random()*spinArray.length)]; return spin; } $('#flip').on('click', function(){ $('#coin').removeClass(); setTimeout(function(){ $('#coin').addClass(getSpin()); }, 100); }); }); html, body { margin: 0; width: 100%; height: 100%; background-color: #333; } #coin-flip-cont { width: 200px; height: 200px; position: absolute; top: calc(50% - 100px); left: calc(50% - 100px); } #coin { position: relative; width: 200px; transform-style: preserve-3d; } #coin .front, #coin .back { position: absolute; width: 200px; height: 200px; } #coin .front { transform: translateZ(1px); border-radius: 50%; background-color: #3498db; border: solid 5px gray; } #coin .back { transform: translateZ(-1px) rotateY(180deg); border-radius: 50%; background-color: #2ecc71; border: solid 5px gray; } #coin.animation900 { -webkit-animation: rotate900 3s linear forwards; animation: rotate900 3s linear forwards; } #coin.animation1080 { -webkit-animation: rotate1080 3s linear forwards; animation: rotate1080 3s linear forwards; } #coin.animation1260 { -webkit-animation: rotate1260 3s linear forwards; animation: rotate1260 3s linear forwards; } #coin.animation1440 { -webkit-animation: rotate1440 3s linear forwards; animation: rotate1440 3s linear forwards; } #coin.animation1620 { -webkit-animation: rotate1620 3s linear forwards; animation: rotate1620 3s linear forwards; } #coin.animation1800 { -webkit-animation: rotate1800 3s linear forwards; animation: rotate1800 3s linear forwards; } #coin.animation1980 { -webkit-animation: rotate1980 3s linear forwards; animation: rotate1980 3s linear forwards; } #coin.animation2160 { -webkit-animation: rotate2160 3s linear forwards; animation: rotate2160 3s linear forwards; } #-webkit-keyframes rotate900 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(900deg); -moz-transform: rotateY(900deg); transform: rotateY(900deg); } } #keyframes rotate900 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(900deg); -moz-transform: rotateY(900deg); transform: rotateY(900deg); } } #-webkit-keyframes rotate1080 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1080deg); -moz-transform: rotateY(1080deg); transform: rotateY(1080deg); } } #keyframes rotate1080 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1080deg); -moz-transform: rotateY(1080deg); transform: rotateY(1080deg); } } #-webkit-keyframes rotate1260 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1260deg); -moz-transform: rotateY(1260deg); transform: rotateY(1260deg); } } #keyframes rotate1260 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1260deg); -moz-transform: rotateY(1260deg); transform: rotateY(1260deg); } } #-webkit-keyframes rotate1440 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1440deg); -moz-transform: rotateY(1440deg); transform: rotateY(1440deg); } } #keyframes rotate1440 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1440deg); -moz-transform: rotateY(1440deg); transform: rotateY(1440deg); } } #-webkit-keyframes rotate1620 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1620deg); -moz-transform: rotateY(1620deg); transform: rotateY(1620deg); } } #keyframes rotate1620 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1620deg); -moz-transform: rotateY(1620deg); transform: rotateY(1620deg); } } #-webkit-keyframes rotate1800 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1800deg); -moz-transform: rotateY(1800deg); transform: rotateY(1800deg); } } #keyframes rotate1800 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1800deg); -moz-transform: rotateY(1800deg); transform: rotateY(1800deg); } } #-webkit-keyframes rotate1980 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1980deg); -moz-transform: rotateY(1980deg); transform: rotateY(1980deg); } } #keyframes rotate1980 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(1980deg); -moz-transform: rotateY(1980deg); transform: rotateY(1980deg); } } #-webkit-keyframes rotate2160 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(2160deg); -moz-transform: rotateY(2160deg); transform: rotateY(2160deg); } } #keyframes rotate2160 { from { -webkit-transform: rotateY(0); -moz-transform: rotateY(0); transform: rotateY(0); } to { -webkit-transform: rotateY(2160deg); -moz-transform: rotateY(2160deg); transform: rotateY(2160deg); } } .button { background-color: #4CAF50; /* Green */ border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin-top: 125px; position: inherit; } .front-text{ font-weight: 700 !important; margin-top: 45%; } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <center> <div> <div id="coin-flip-cont"> <div id="coin"> <div class="front"><p class="front-text">Head</p></div> <div class="back"><p class="front-text">Tail</p></div> </div> </div> <button type="button" id="flip" class="button"> Flip Coin</button> </div> </center>
CSS How can I make a particle leave a trail that fades away?
I got the particle to move around which is what I wanted, but I want to add a little trail that will fade a way and I am not sure how to go about doing that Is it possible to do with only css? or do I have to involve jquery in this? Here is a demo: LINK #object{ position: absolute; bottom:-2em; left:0; right:0; margin:0 auto; width: 10px; height: 10px; background: red; -webkit-animation: myOrbit 6s linear infinite; -moz-animation: myOrbit 6s linear infinite; -o-animation: myOrbit 6s linear infinite; animation: myOrbit 6s linear infinite; } #-webkit-keyframes myOrbit { 0% { -webkit-transform: rotate(0deg) translateX(5px) translateY(400px) rotate(0deg) scale(1); } 25% { -webkit-transform: rotate(90deg) translateX(5px) translateY(400px) rotate(-90deg) scale(.60); } 50% { -webkit-transform: rotate(180deg) translateX(5px) translateY(400px) rotate(-180deg) scale(.30); } 75% { -webkit-transform: rotate(270deg) translateX(5px) translateY(400px) rotate(-270deg) scale(.60); } 100% { -webkit-transform: rotate(360deg) translateX(5px) translateY(400px) rotate(-360deg) scale(1); } } #-moz-keyframes myOrbit { 0% { -moz-transform: rotate(0deg) translateX(5px) translateY(400px) rotate(0deg) scale(1); } 25% { -moz-transform: rotate(90deg) translateX(5px) translateY(400px) rotate(-90deg) scale(.60); } 50% { -moz-transform: rotate(180deg) translateX(5px) translateY(400px) rotate(-180deg) scale(.30); } 75% { -moz-transform: rotate(270deg) translateX(5px) translateY(400px) rotate(-270deg) scale(.60); } 100% { -moz-transform: rotate(360deg) translateX(5px) translateY(400px) rotate(-360deg) scale(1); } } #-o-keyframes myOrbit { 0% { -o-transform: rotate(0deg) translateX(5px) translateY(400px) rotate(0deg) scale(1); } 25% { -o-transform: rotate(90deg) translateX(5px) translateY(400px) rotate(-90deg) scale(.60); } 50% { -o-transform: rotate(180deg) translateX(5px) translateY(400px) rotate(-180deg) scale(.30); } 75% { -o-transform: rotate(270deg) translateX(5px) translateY(400px) rotate(-270deg) scale(.60); } 100% { -o-transform: rotate(360deg) translateX(5px) translateY(400px) rotate(-360deg) scale(1); } } #keyframes myOrbit { 0% { transform: rotate(0deg) translateX(5px) translateY(400px) rotate(0deg) scale(1); } 25% { transform: rotate(90deg) translateX(5px) translateY(400px) rotate(-90deg) scale(.60); } 50% { transform: rotate(180deg) translateX(5px) translateY(400px) rotate(-180deg) scale(.30); } 75% { transform: rotate(270deg) translateX(5px) translateY(400px) rotate(-270deg) scale(.60); } 100% { transform: rotate(360deg) translateX(5px) translateY(400px) rotate(-360deg) scale(1); }}
I was doing something similar which is how I found this question. I took what I came up with and adapted it to your answer. Not sure it will work for what you're doing but it's still fun. http://jsfiddle.net/y40kwyhr/2/ var obj = document.getElementById("object"); class Particle { constructor(parent) { this.div = document.createElement("div"); this.div.classList.add("particle"); this.div.classList.add("twinkle"); this.div.id = "particle-" + Date.now(); parent.appendChild(this.div); setTimeout(() => { // remove particle if(this.driftIntervalId) clearInterval(this.driftIntervalId); this.div.remove(); }, 400); } drift(speed = 1) { var rad = Math.PI * Math.random(); this.driftIntervalId = setInterval(() => { var left = +this.div.style.left.replace("px",''); var top = +this.div.style.top.replace("px",''); left += Math.sin(rad) * speed; top += Math.cos(rad) * speed; this.div.style.left = left + "px"; this.div.style.top = top + "px"; }, 10); } } var particleFactory = function(meteor) { var rect = meteor.getBoundingClientRect(); var particle = new Particle(meteor.parentElement); particle.div.style.left = rect.left + "px"; particle.div.style.top = rect.top + "px"; particle.drift(0.4); setTimeout(() => { particleFactory(meteor); }, 100); }; particleFactory(obj);
Something like this? Changed keyframe animation so it orbits correctly Added new animation for the 'trail' to fadeout over time. Is this what you meant? #object{ position: absolute; top: 200px; left:0; right:0; margin:0 auto; width: 10px; height: 10px; background: red; -webkit-animation: myOrbit 6s linear infinite; -moz-animation: myOrbit 6s linear infinite; -o-animation: myOrbit 6s linear infinite; animation: myOrbit 6s linear infinite; } #object:after{ content: ""; position: absolute; top: 0; left:0; right:0; margin: 0 auto; width: 100px; height: 10px; opacity: .1; background-color: red; -webkit-animation: myOrbit-fadeout 6s linear infinite; -moz-animation: myOrbit-fadeout 6s linear infinite; -o-animation: myOrbit-fadeout 6s linear infinite; animation: myOrbit-fadeout 6s linear infinite; } #-webkit-keyframes myOrbit { 0% { -webkit-transform: rotate(0deg) translateY(200px); } 25% { -webkit-transform: rotate(90deg) translateY(200px); } 50% { -webkit-transform: rotate(180deg) translateY(200px); } 75% { -webkit-transform: rotate(270deg) translateY(200px); } 100% { -webkit-transform: rotate(360deg) translateY(200px); } } #-moz-keyframes myOrbit { 0% { -moz-transform: rotate(0deg) translateY(200px); } 25% { -moz-transform: rotate(90deg) translateY(200px); } 50% { -moz-transform: rotate(180deg) translateY(200px); } 75% { -moz-transform: rotate(270deg) translateY(200px); } 100% { -moz-transform: rotate(360deg) translateY(200px); } } #-o-keyframes myOrbit { 0% { -o-transform: rotate(0deg) translateY(200px); } 25% { -o-transform: rotate(90deg) translateY(200px); } 50% { -o-transform: rotate(180deg) translateY(200px); } 75% { -o-transform: rotate(270deg) translateY(200px); } 100% { -o-transform: rotate(360deg) translateY(200px); } } #keyframes myOrbit { 0% { transform: rotate(0deg) translateY(200px); } 25% { transform: rotate(90deg) translateY(200px); } 50% { transform: rotate(180deg) translateY(200px); } 75% { transform: rotate(270deg) translateY(200px); } 100% { transform: rotate(360deg) translateY(200px); } } #-webkit-keyframes myOrbit-fadeout { 0% { opacity: 1.0; } 25% { opacity: .75; } 50% { opacity: .5; } 75% { opacity: .25; } 100% { opacity: 0; } } #-moz-keyframes myOrbit-fadeout { 0% { opacity: 1.0; } 25% { opacity: .75; } 50% { opacity: .5; } 75% { opacity: .25; } 100% { opacity: 0; } } #-o-keyframes myOrbit-fadeout { 0% { opacity: 1.0; } 25% { opacity: .75; } 50% { opacity: .5; } 75% { opacity: .25; } 100% { opacity: 0; } } #keyframes myOrbit-fadeout { 0% { opacity: 1.0; } 25% { opacity: .75; } 50% { opacity: .5; } 75% { opacity: .25; } 100% { opacity: 0; } }
Animation not functioning as it is set
I am wanting text to come out of a bag and in a vertical manner and then do a 90 degree turn, so that the text is in a correct position right where I want it. Right now, my test goes in a huge circle on my page. It lands where I want it to, but it comes out of the page completely wrong. I created a fiddle, but it is really not doing any justice because it doesn't look mine at all. If there was any way to show what mine was doing I would. I want it to look like names are being taken from a bag. Just like they would be if you had 10 people in a room pulling names out of a bag. https://jsfiddle.net/n2o672q3/1/ I have these keyframes set to the fegree I want, so again, I'm not sure why mine do a 360. #-moz-keyframes spin { 0% { -moz-transform: rotate(110deg); } 100% { -moz-transform: rotate(0deg); } } #-webkit-keyframes spin { 0% { -webkit-transform: rotate(110deg); } 100% { -webkit-transform: rotate(0deg); } } #keyframes spin { 0% { -webkit-transform: rotate(110deg); transform:rotate(110deg); } Just image a bird flying up and doing a large circle in the air and that is what mine is doing. Any idea how I can fix this?
Have you considered the use of transform-origin property? Take a look at this. Is this what you are trying to achieve? CSS: .shuffle_results { position: relative; z-index: -1; font-size: 2em; -webkit-animation:spin 3s linear; -moz-animation:spin 3s linear; animation:spin 3s linear; -webkit-transform-origin: 0% 50%; -moz-transform-origin: 0% 50%; transform-origin: 0% 50%; } #-moz-keyframes spin { 0% { -moz-transform: translate(0px, 200px) rotate(140deg); } 100% { -moz-transform: translate(0px, 0px) rotate(0deg); } } #-webkit-keyframes spin { 0% { -webkit-transform: translate(0px, 200px) rotate(140deg); } 100% { -webkit-transform: translate(0px, 0px) rotate(0deg); } } #keyframes spin { 0% { -webkit-transform: translate(100px, 200px) rotate(140deg); transform: translate(100px, 200px) rotate(140deg); } 100% { -webkit-transform: translate(0px, 0px) rotate(0deg); transform: translate(0px, 0px) rotate(0deg); } } #paperBag { position: relative; bottom: 0px; left: 0px; margin-top: 40px; z-index: 1; }