The Serbian fourth seed, looking nervous from the start and rarely taking the initiative, managed to salvage one set but looked a pale shadow of the scintillating player who won last year's Australian Open.
The pressure of expectation now seems to weigh heavy on the 22-year-old's shoulders. His self-belief at a low ebb, Djokovic showed little aggression against a confident Haas.
"It's unbelievable. I have no words for it. I am playing some of my best tennis right now," said an overjoyed Haas after recording the biggest shock of the men's tournament so far.
The German always looked in control in the first set. He held his serve to love three times and broke Djokovic in the 11th game to ratchet up the pressure at just the right time.
In an engrossing second set tiebreak, Djokovic had three set points to draw level but Haas fought back from 6-3 down to take a comfortable lead.
"That was huge and maybe the key to success today. I said to myself -- Wake Up," said Haas, a former world number two whose career has been blighted by injury.
Djokovic landed the third set with one
Haas, who beat Djokovic in the Halle final last month, raced into a 5-2 lead in the fourth set with supporters chanting "Let's Go Tommy".
The adoration was rewarded. Haas maintained his nerve when serving for the match and reached the Wimbledon semi-final at his 11th attempt.
Haas's progress to a semi-final clash with five-times champion Roger Federer, who had earlier taken the sting out of Croatian Ivo Karlovic's venomous serve to win 6-3, 7-5, 7-6 and book his place in a 21st straight Grand Slam semi-final, could not have been more laborious.
He needed two days to win both his first and third round matches. Both were suspended because of bad light and he saved two match points against Marin Cilic.
But he did have one stroke of luck -- his second round opponent, Frenchman Michael Llodra, retired injured after colliding with the umpire's chair and one of the ballgirls.
But he now has a mountain to climb. Federer leads 9-2 in their previous clashes but Haas did take him to five sets at the French Open.
"I am going to give it my best shot. There is not much this guy cannot do," Haas said. "I am going to try and go out there and see if I can annoy him a little bit and go from there."