Jump to content

Search In
  • More options...
Find results that contain...
Find results in...


  • Posts

  • Joined

  • Last visited

ddi-web-team's Achievements

  1. I realized that my issue was because of conflicting tweens. In the closing function, I was changing the opacity of the card being flipped before it had a chance to finish it's animation. I've updated the function like this. function closeHeadshot(){ document.removeEventListener('click', closeHeadshot); //Record current state const state = Flip.getState(expandedContainer); //Scale details down so that it's image fits exactly on top of the active headshot Flip.fit(expandedContainer, activeHeadshot.querySelector('img'), {scale: true, fitChild: expandedImage}); //Put the bio container back and then fade in the other headshots const tl = gsap.timeline(); tl.to(expandedBioContainer, {xPercent: 15, opacity: 0}) //.to(expandedContainer, {visibility: 'hidden'}) .to(headshots, {opacity:1, stagger: {amount: 0.7, from: headshots.indexOf(activeHeadshot), grid: 'auto'}}, 0); Flip.from(state, { scale: true, duration: .5, delay: 0.2, ease: "power2.inOut", absolute: true }).to(expandedContainer, {visibility: 'hidden'}) activeHeadshot = null; }
  2. Hello. I'm trying to make my own flip demo that is very similar to this example. https://codepen.io/GreenSock/pen/JjXqMZK The issue that I'm coming across is with the closeHeadshot() function. When closing, the expanded headshot starts to move back into the correct place, but near the end, it jumps back to place and doesn't animate nicely. I'm not sure what's causing this and why it doesn't close as smoothly as it opens.
  3. Hi Jack! 😁 Yes, you hit the nail on the head. I hadn't really considered how the z-index was causing this. Your solution is perfect. Thank you so much!
  4. Hi all I'm trying to create a 2x2 grid of divs. When a div is clicked it will fill up the entire container of divs and reveal some content. I have this working using the FLIP plugin, but I'm noticing a weird jump when downsizing every box with the last one being an exception. For some reason, the last one (the orange box) grows and shrinks as intended. I'm achieving this by using unset on the class that is being applied to the box that is full screen. .fullScreened{ position:absolute; top:0; bottom:0; right:0; left:0; z-index: 10; grid-column-start:unset !important; grid-column-end:unset !important; grid-row-start:unset !important; grid-row-end:unset !important; } Which feels kind of hacky but I'm not sure of another solution.
  5. That's a fair point @mattsrinc and I'll look over it for sure.
  6. Wow. That seems so obvious I almost feel embarrassed. Thank you @ZachSaucier Your help is very much appreciated.
  7. Hello All I'm trying to create a very large documentation page. Because I know this page can get very long, I'm using scrollTrigger to Animate a progress bar. That code is basically copy/pasta from the scrollTrigger examples. Thank you 😁 Tween an icon next to the nav item that tells the user what section they are in. This works perfectly fine with scrolling. And now I'm trying to use the ScrollToPlugin so that when the user clicks on a nav item, the window tweens to the correct position. It seems to work perfectly fine if you are at the top of the page, and click on any nav item. But if you're clicking on a nav section when you're scrolled, the plugin seems to 'jump' the window to the top of the page before tweening to the correct position. I tried googling this issue and did come across this where @OSUblake helpfully suggests removing smooth scrolling. I thought this would solve my issue as I did have that enabled. However, I'm still seeing the behavior after removing that. Any help would be greatly appreciated.
  8. Hello I'm working on a chart animation that uses a from tween to animate the bars from an opacity of 0 and a y coordinate of -50. Because this animation is further down the page, I'm using scrollTrigger so the user doesn't miss the animation. The issue that I'm seeing to run in to is how scrollTrigger works in relation to nested timelines. I have a master timeline called globalTL const globalTL = gsap.timeline(); I have multiple functions that each return a timeline. function animateIntro(){ let tl = gsap.timeline(); var staggersX = gsap.utils.wrap(['-200', '200']); tl.set('.section', {autoAlpha:1}) .from('#intro-logo', {opacity:0, y:-100}) .from('#intro-tagline', {opacity:0, y:100}, '<') .from('.yellow-card', {opacity:0, x:staggersX, stagger:.3}) .from('.keep-scrolling-container', {opacity:0, delay:.5}) .fromTo('.container-outter', {background:'#236192'},{background:'#eee', scrollTrigger:{ trigger: '.finding1', start: 'top center', end: 'center center', scrub: 1, //markers: true }}) return tl; } function animateFinding1(){ const bars = document.querySelectorAll('#chart-container > div'); console.log(bars) let tl = gsap.timeline({scrollTrigger:{ trigger:'#chart-container', start:'center center', markers:true }}); tl.from(bars, {opacity:0, duration:1, stagger:.25, y:-50}) return tl; //THIS CAUSES ME TO BREAK } Finally, I add these to the master timeline. globalTL.add(animateIntro()) .add(animateFinding1(), '<') The problem with this approach is that it causes my chart to animate inconsistently. Sometimes the animation doesn't completely finish. Sometimes it never even starts. When it does finish, it goes to the complete state immediately. There's no actual tweening of the values. The solution seems to be to remove the return statement from animateFinding1() function animateFinding1(){ const bars = document.querySelectorAll('#chart-container > div'); console.log(bars) let tl = gsap.timeline({scrollTrigger:{ trigger:'#chart-container', start:'center center', markers:true }}); tl.from(bars, {opacity:0, duration:1, stagger:.25, y:-50}) //return tl; //I'm commented out. Everything is fine now. } I don't really understand why this is the case. I've tried adding the scrollTrigger to the from tween rather than the timeline. My normal workflow is to create a master timeline, create functions that create and return timelines, and finally to nest those timelines in the master using those functions. Is there something I need to consider when using this workflow with scrollTrigger? Is there some obvious fluke I'm missing? Thank you for reading.
  9. Amazing. Thank you @ZachSaucier 😁 One quick question. You mention that transforms are more performant than height. Do you have a resource where I can learn more about why this is?
  10. Hi all! I've been experimenting with combining D3 and GSAP to animate some nice looking charts. I created a vertical bar chart that GSAP has no problem animating as D3 returns plain SVG. The issue is coming from how these rects are being 'drawn' in. It's from the top. I tried changing the transformOrigin but it doesn't seem to be affecting anything.
  11. You won't regret it. Yeah I kind of figured as much. Doing it in a small container was more about trying to wrap my head around the logic before going to canvas as I'm not super familiar with it. Thank you so much. This is awesome. I'm going to really dig into this because it's such a neat effect. Finally, oof, rookie mistake. I'm so used to using jquery that when I don't use it I make silly mistakes. Thanks for looking out!
  12. Hello all. First of all, I want to emphasize that this project is purely for practice purposes. I'm trying to get better at GSAP so any suggestions at all to improve my code or approach to this problem in any way are welcome. I was inspired by the level change screen of the video game, Just Shapes & Beats. If you're not sure what this is, check out this video. I made sure to time stamp it so it starts at the exact point it happens. I wanted to try to recreate this. To start, I programmatically generate 100 divs, attach event listeners to them, and use flex to space them out evenly. When a box is clicked, I use two arrays to separate the boxes that are above and below the target. Once I have those arrays, I loop through them and create a tween for each one that gets added to a timeline. Once that's done, I play the timeline. Here's the problem I'm running into. Because I'm creating tweens for every item in the array, I don't really know how to stagger them. I can't just use a class, because that would target all of them and they need to animate differently based off if they are above or below where the user clicked. I tried adding a delay to each tween, but the problem with that approach is when the animation for the blocks above the user click happens, the last block is delayed the greatest which is the opposite of what I want. That's my specific problem. But again, if you just have any general suggestions for a better way to approach this, I'd love to hear it. I'm still very much in the beginner stages of GSAP. Thank you. Edit --- Here is a debug link. It seems to show the animation better than the preview window inside codepen. https://cdpn.io/DDI-Web-Team/debug/06180d06502c57364e0a0f3ae563e79f
  13. - @akapowl Is there a preference here if we're ultra concerned about performance? I would assume that clearing a timeline and then adding in new tweens is more efficient than killing it completely.