Felix Hernandez (5-0) surrendered just one run on six hits and one walk with eight strikeouts for his 130th career win, tying Randy Johnson for second all-time on the franchise's win list.
Seattle is now 8-0 with Hernandez on the mound against the Angels, dating back to Sept. 22, 2013.
Matt Shoemaker (2-2) gave up three runs on four hits and a walk and tied a career-high with 10 strikeouts over 7 1/3 innings.
The Mariners finally got to Shoemaker in the seventh. He allowed just one hit and two baserunners prior to making two costly mistakes.
Cruz led off the frame by clobbering a 1-2 changeup into the left-field seats for his league-leading 14th home run of the season and Morrison followed two batters later with a line-drive blast to right for a 2-0 lead.
In the home half, Joyce cut the deficit in half by crushing a 3-1 sinker to right center.
Smith got the run back and chased Shoemaker with a one-out solo shot in the eighth.
Fernando Rodney gave up a one-out homer to David Freese in the ninth and walked Joyce two batters later. Rodney earned his eighth save of the season after pinch runner Collin Cowgill was thrown out trying to steal second.
Seattle is 8-4 in their last 12 games at Angel Stadium ... Hernandez reached 1,995 strikeouts to pass Johan Santana for the most by a Venezuelan pitcher in Major League history ... Shoemaker recorded 10 strikeouts twice last season, the first in a 9-3 win over Cleveland on June 17 and again in 4-2 loss to the Orioles on July 21.