Brandon Sutter had two goals and an assist, Sam Gagner and Alex Biega scored, and Jacob Markstrom made 23 saves for Vancouver (28-40-9), which has won three of its past four games (3-0-1) after losing the previous seven (0-7-0).
"It's tough when you're not playing meaningful games, but at the same time for us they are meaningful in a way," Sutter said. "We didn't like the way we finished last season and the last couple weeks, and this has a completely different feel. It's something to get excited about."
Biega scored his first goal in 132 games, dating to his first NHL game, Feb. 16, 2015, on a point shot through traffic at 3:03 of the third period for a 2-1 lead.
"It's always nice, especially since I've been trying to work on my shot the past two years," Biega said. "I thought we played an awesome game for the most part."
Sutter made it 3-1 by converting his own breakaway rebound at 8:30, and scored his second goal into an empty net with 15.5 seconds left for a 4-1 lead.
"Not sure how I managed to put it off the side of the post, but I just stayed with it and tried to get it above the goal line, get it on net," Sutter said. "There's still some energy in the room here to play well."
Gagner gave the Canucks a 1-0 lead at 10:07 of the first period after a spinning, no-look shot by Daniel Sedin left him with an empty net on the rebound to Gibson's right.
Cogliano tied it 1-1 with 2:54 left in the second when Francois Beauchemin's high dump-in hit a stanchion and bounced into the slot with Markstrom caught behind the net.
"They played well but we didn't execute with the puck, it was just sloppy," Ducks defenseman Cam Fowler said. "It got better in the second period but then they got one in the third and we weren't able to regroup."