Calgary won for just the second time in 10 games, getting a 32-save effort from Miikka Kiprusoff.
Vancouver had a 1-0 lead heading into the final period. Cammalleri's two goals, along with one from Curtis Glencross, handed the Canucks a disappointing setback -- costing Vancouver a chance to move in front of the New York Rangers for the best record in the NHL.
The Canucks had won seven in a row.
New York has the tiebreak advantage over Vancouver and thus needs just one point out of its final game Saturday to claim the Presidents' Trophy.
Vancouver also has a two-point lead over St. Louis for the best mark in the Western Conference.
Cory Schneider stopped 25 shots for Vancouver.
Video of Victoria’s Secret models trying to 'twerk' hits Instagram
Megyn Kelly: Santa Claus and Jesus are both white men