Vargas (5-2) allowed one run and seven hits in six innings, walked three and struck out seven. He is 2-0 with a 1.60 ERA in six road starts this season.
Vargas allowed a leadoff triple to Jose Reyes in the first, but Reyes had to hold at third on Melky Cabrera's fly ball to right. Jose Bautista followed with a walk, but Vargas got out of it by getting Edwin Encarnacion and Brett Lawrie to fly out.
''I feel something like that hopefully sets the tone for the game and fires us up,'' Vargas said. ''We were able to get a run the next inning and keep it moving from there.''
Vargas kept on turning the Blue Jays away whenever they put men on base. Toronto finished 0 for 10 with runners in scoring position and stranded 14 runners.
''Vargas keeps you off balance,'' Blue Jays manager John Gibbons said. ''If you're sitting on a pitch, you don't get it. We had some shots but he was better.''
Cain went 3 for 4 and matched a career high with four RBIs, and Gordon reached base three times as the Royals handed Toronto its second consecutive loss following a season-best nine-game winning streak.
''This is more of the offense that we envisioned coming out of spring training,'' Royals manager Ned Yost said. ''We're not going to be a club that's going to lead the league in home runs but we've got home run power that we haven't used.''
The home runs were the 23rd and 24th of the season for the Royals, whose total is the lowest in the majors.
Cain got the Royals on the board with an RBI single off left-hander J.A. Happ in the second, and Gordon followed Butler's leadoff single by homering on a 3-2 pitch in the fourth.
Bautista replied with a two-out homer in the fifth, but the Royals restored their three-run lead in the sixth. Gordon drew a one-out walk and was almost caught stealing but ended up at second after first baseman Encarnacion dropped Happ's pickoff throw. The mistake proved costly when Cain drove in Gordon with a two-out single.
Kansas City chased Happ and capped the scoring in the eighth on Cain's two-out homer.
Happ (4-2) lost for the first time in four starts, allowing a season-worst six runs in 7 2-3 innings. He walked two and struck out six.
''They put some good swings on me,'' Happ said. ''They were aggressive and they definitely made me pay for my mistakes.''
For the second straight game, Bautista threw out a runner at first from right field. After getting Billy Butler on Thursday, Bautista slid to corral Infante's shallow fly and gunned a throw to first in the seventh after Infante didn't initially run out of the box.
''I don't know if you'll see a better play in baseball today than that play right there,'' Yost said. ''Omar hit the ball and lost it, he thought it was foul. For Bautista to come, smother the ball, one, and then still see that he had a play at first base, I don't think I've ever seen a play like that. Tremendous play.''
NOTES: 3B Danny Valencia returned to Kansas City's lineup after missing the past five games with a sore left hand. ... Toronto selected RHP Bobby Korecky from Triple-A Buffalo before the game and optioned LHP Rob Rasmussen to Triple-A. Korecky was designated for assignment following the game and RHP Marcus Stroman was recalled from Buffalo to start Saturday, with RHP Drew Hutchison pushed back to Tuesday for extra rest. ... The Royals intend to recall RHP Aaron Brooks from Triple-A Omaha to start against the Blue Jays on Saturday. Brooks will pitch in place of RHP Yordano Ventura, who left his last start with a sore elbow. ... Ventura played catch Friday and will throw a light bullpen Saturday.