Johnny Giavotella and Carlos Perez each drove in a run for the Angels, who have won two of their last three. Garrett Richards (8-5) allowed two runs on seven hits with a walk and six strikeouts in 7 2/3 innings.
Mike Zunino hit a solo home run and scored twice for the Mariners, who have lost four of their last six games. J.A. Happ (3-5) dropped his fourth straight start after getting touched for four runs on five hits with a pair of walks over seven innings.
Seattle also saw second baseman Robinson Cano leave the game after getting hit in the head with an errant throw while the Angels were conducting their warmup tosses prior to Seattle's turn at the plate in the seventh. The team later said did not have a concussion and is day-to-day with a contusion.
The Angels grabbed the lead in the first as Daniel Robertson singled to lead off and Calhoun followed with his seventh home run of the season.
Seattle didn't get much going offensively until the sixth inning when the team made it a one-run game. With one out, back-to-back singles from Zunino and Logan Morrison left runners on the corners before a wild pitch by Richards allowed Zunino to score and make it a 2-1 contest.
The Angels, though, padded their advantage in the seventh on an RBI single from Giavotella and a run-scoring groundout by Perez for a 4-1 advantage.
Zunino led off the eighth with his eighth homer of the season to make it a two-run game.
Huston Street pitched around a two-on jam in the ninth to pick up his 21st save of the season.