Gabby Agbonlahor rediscovered his goal touch at the Liberty Stadium but it wasn't enough to prevent Villa slumping to a defeat on a miserable afternoon in South Wales.
The club's leading Premier League marksman hit a 22nd minute equaliser after Wilfried Bony had fired the Swans into a 10th-minute lead.
But the home side were back in front on 26 minutes when Jonjo Shelvey beat Brad Guzan with a 45-yard volley which dipped just under the bar.
It was a goal reminiscent of Stiliyan Petrov's amazing strike from the same distance at Derby six years ago.
This time, though, Villa were on the receiving end - and it got worse in the second half.
Pablo Hernandez extended Swansea's lead in the 73rd minute, and Bony claimed his second with a stoppage-time penalty.
There was a scare for the visitors even before the opening goal, Guzan spilling a deep cross from the right as he was challenged by Bony.
The Swans striker flicked out a leg at the ball as he fell but was unable to divert it towards goal, and Leandro Bacuna nodded safely back to the keeper.
Villa's first effort was a ninth-minute Bacuna free-kick which thudded into Swansea's defensive wall from 30 yards after Agbonlahor had been brought down by Angel Rangel.
But a minute later Villa fell behind, Shelvey threading a slide-rule pass through the middle for Bony to beat the advancing Guzan with a low right-foot shot.
Marc Albrighton tried to get Villa moving, first with a right-wing cross which was diverted back to keeper Michel Vorm before it could reach Agbonlahor, and then with a free-kick from the left which flashed just beyond the far post with Agbonlahor and Karim El Ahmadi unable to capitalise.
Then Agbonlahor fired well off target before Andi Weimann's centre was just too far ahead of Agbonlahor.
Villa were now on top, and after Albrighton's rising 25-yard drive had deflected for a corner, they were deservedly level in the 22nd minute.
El Ahmadi's pass set up Albrighton for a teasing cross from the right, and the quick-thinking Agbonlahor escaped his marker to side-foot neatly past Vorm from five yards.
Unfortunately the Welsh outfit were back in front four minutes later, Ron Vlaar's clearance being collected in the centre-circle by Shelvey, who spotted Guzan off his line and sent a 45-yard volley just under the bar as the keeper desperately tried to get back.
It was a stunning effort which seemed to deflate the visitors, and Guzan did well to clutch Bony's stinging low left-footer from the edge of the penalty area at the second attempt.
Vorm, to be fair, did equally well to parry Weimann's fierce drive on 39 minutes after Ashley Westwood had set up a shooting opportunity for the Austrian forward.
Fabian Delph was busy at both ends just after the interval.
The midfielder's powerful 25-yard effort as blocked in a crowded area, and then he performed an important defensive task by slicing Shelvey's dangerous free-kick behind for a corner.
Guzan came to the rescue twice in a matter of minutes, doing well to hold a menacing cross from Ben Davies before diving to tip away Shelvey's skidding low shot.
And he visitors were mightily relieved when one-time Villa man Wayne Routledge picked out Bony in a good position, only for the striker to shoot wide when it looked easier to hit the target.
But after sub Matt Lowton had cleared off the line from a delicate Hernandez chip across the face of goal, the midfielder extended the home side's advantage with a well-taken goal.
Controlling Shelvey's cross beyond the far post, Hernandez cut back on to his right foot to sent a blistering drive into the roof of the net.
To complete Villa's woes, Bony converted a stoppage-time penalty after Nathan Baker had fouled sub Marvin Emnes.
SWANSEA CITY: Vorm; Rangel (Taylor 77), Amat, Williams, Davies; Britton, Shelvey; De Guzman (Fulton 83), Hernandez, Routledge (Emnes 87); Bony. Unused subs: Tremmell, Dyer, Vazquez, Bartley.
VILLA: Guzan; Bacuna (Lowton HT), Vlaar, Baker, Bertrand; El Ahmadi, Westwood, Delph; Albrighton, Agbonlahor, Weimann (Robinson 67). Unused subs: Steer, Clark, Sylla, Tonev.