Guy Bates grabbed a brace as Glenavon came out on top in a match which saw both sides end the game with 10 men.
James Costello headed the Swifts in front from a Ryan Harpur corner on 21 minutes and Niall Henderson was sent-off on 29 for an elbow on Matt Hazley.
Bates saw his penalty go in off the bar on 33 and Mark Farren tapped in at the back post from a Gary Hamilton cross.
Emmett Friars was sent-off on 67 for a foul on Bates and the striker rounded Johnny Curran to score on 86 minutes.
Costello's opener put the Swifts in the driving seat early on, and that straight red card for Henderson gave Glenavon a steeper mountain to climb.
Bates scored from the spot after goalkeeper Curran had brought down Farren inside the box, and the forward then missed another good chance before the break.
Farren put the Lurgan Blues in front on 66 but Friars' dismissal saw both sides reduced to 10 men.
Glenavon move above Dungannon into ninth place in the Premiership table.