Share Posted September 16, 2014 I want to animate something (the position of the background image) of a div when the user hovers over (mouseovers) it. There will be several of these divs on a single page. It would be REALLY nice to be able to specify classes, not IDs, of DIVs, when constructing greensock timelines, but as that's impossible I've had a stab at it in this jsfiddle: http://jsfiddle.net/cheolsoo/mp3qes6n/ 1/ why doesn't the (global) value of i get set when the mouseover event fires? I initialized i to 611 but it doesn't change when I mouseover one of the other divs.2/ (much less critical as I can work around it) my fiddle works (sort of) because I stripped "vid_" away from the div ID and then added it back in the TimelineMax definition. I tried simply passing a variable (e.g. i where i='vid_611' rather than '611') instead of "vid_"+i, but then nothing worked at all. Why not? (Is that a greensock question or a Javascript question? I'm such a moron I'm not even sure.) thanks, eh Ryan Link to comment Share on other sites More sharing options...
Share Posted September 16, 2014 Hello jasper and welcome to the GreenSock Forum! Just run your timeline and animation in a for loop or jQuery each() method to apply each new timeline for your classes. And then store your timeline in the element. http://jsfiddle.net/mp3qes6n/10/ $(".list_thumb").each(function(i,el){ var $element = $(el), pan_thumb = new TimelineMax({paused:true,repeat:-1}); // store timeline in el el.tl = pan_thumb; pan_thumb .to($element, .4, { 'backgroundPosition':'0% 0%', ease:Power1.easeOut }) .to($element, .4, { 'backgroundPosition':'0% 0%', ease:Power1.easeOut }) .to($element, .8, { 'backgroundPosition':'100% 0%' }) .to($element, .8, { 'backgroundPosition':'0% 100%' }) .to($element, .8, { 'backgroundPosition':'100% 100%' }) .to($element, .4, { 'backgroundPosition':'50% 50%', ease:Power1.easeIn }); }); $('.list_thumb').mouseover(function(){ this.tl.play(); }); $('.list_thumb').mouseout(function(){ this.tl.reverse(); }); : More info on this technique can be found here: https://greensock.com/forums/topic/10447-best-practice-for-kllingundoing-timelines-of-objects-on-rolloverout/ See the Pen yLeIt?editors=011 by rhernando (@rhernando) on CodePen See the Pen vjGxH by rhernando (@rhernando) on CodePen See the Pen itmeB by jonathan (@jonathan) on CodePen Hope this helps! Link to comment Share on other sites More sharing options...
Author Share Posted September 16, 2014 Thank you sir, and thank you for the kind "welcome" to the forum! (My tenth post actually; not sure why this one doesn't show up on my list of posts.) I'll give it a whirl. Link to comment Share on other sites More sharing options...
Author Share Posted September 16, 2014 Another question if I might jonathan: What is the purpose of "i" passed to the function in the first line? It's in all of the codepens you provide, but not spelled out anywhere, or at http://api.jquery.com/each/ either for that matter. thanks, Ryan Link to comment Share on other sites More sharing options...
Share Posted September 16, 2014 basically the i just represents the index of each element that is iterated in the loop. I just gave it a name of 'i' to represent the index. Those are just arguments that each() has defined to get passed through the anonymous function, so you can name them whatever you want. $( "li" ).each(function( index, element ) { console.log( index ); console.log( element ); }); Taken from your above link to jQuery each() : The .each() method is designed to make DOM looping constructs concise and less error-prone. When called it iterates over the DOM elements that are part of the jQuery object. Each time the callback runs, it is passed the current loop iteration, beginning from 0. function function( Integer index, Element element ) http://api.jquery.com/each/ The above code could have also been done like this in a for loop: var element = document.getElementsByTagName("li"); for (var i = element.length - 1; i >= 0; i--){ console.log( i ); console.log( element ); } Hope that helps! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now