Jason Blake opened the scoring 56 seconds in, Brandon McMillan doubled the lead 3:26 into the second period, and Ryan scored his first goal 46 seconds later as Anaheim won for the fourth time in five games.
Ducks captain Ryan Getzlaf had an assist in his first game back after missing six weeks because of nasal sinus fractures. He helped Anaheim move four points ahead of ninth-place Los Angeles in the Western Conference playoff race.
Daniel Sedin, Alex Burrows, with his 100th NHL goal, and Ryan Kesler, scored for the Canucks, who lost in regulation for the first time in 10 games. It was Vancouver's third regulation defeat in 30 games over two-plus months.
It was also the first regulation loss at home since Dec. 5 for the Canucks, who remained nine points ahead of Detroit atop the West.
The defeat was particularly costly for the Canucks, who lost defenseman Dan Hamhuis 6:29 into the third period after his head bounced hard off the end glass following a shoulder hit by Getzlaf.
Hamhuis lay flat on the ice for several minutes before being helped to the dressing room. Fellow Canucks defenseman Keith Ballard sprained his knee on Monday.
It was a battle of backups, with rookie Cory Schneider making 20 saves in his second start in three weeks ahead of Roberto Luongo. McElhinney played a third straight as Jonas Hiller recovers from lightheadedness and fatigue.
Schneider made a couple of good stops off Teemu Selanne in the first 15 seconds, but Selanne slipped the puck to Blake behind the defense before that first shift ended. He fought off a check before firing a shot past Schneider's blocker.
McElhinney took an empty net away from Mikael Samuelsson with his left pad 4:30 in, stuffed Cody Hodgson in tight and got his right leg on Henrik Sedin's redirection in the first seven minutes.
Schneider robbed Corey Perry on a power play one-timer, and turned Ryan away twice late in the period. But McMillan got behind Henrik Sedin's backcheck to redirect Dan Sexton's pass out of the corner 3:26 into the second. Anaheim's top line combined to make it 3-0 on the next shift.
Perry sent Getzlaf in on a 2-on-1 and he made a spinning blind backhand pass in the slot that stranded Schneider and left Ryan with an unguarded net.
Anaheim only managed one shot the rest of the period and Vancouver carried the play after Sedin's power-play goal 7:22 into the period. But Sedin hit the side of an empty net on a glorious rebound chance with 6:23 left. McElhinney made a handful of great saves, including two on Mason Raymond in the final minute.
Burrows finished Henrik Sedin's pass from behind the net 5:42 into the third period to make it 3-2. But Ryan restored the lead 27 seconds later on Anaheim's second shot since its third goal.
Notes: Anaheim was 10-4 without Getzlaf after he took a puck in the face during a game on Dec. 28 game. ... Canucks LW Aaron Volpatti replaced smaller Jeff Tambellini for added grit and toughness on the fourth line. Rookie D Chris Tanev took the place of Ballard, who will be out 3-to-4 weeks.