Part-time spinner Kraigg Brathwaite took six wickets in an inspired bowling performance as West Indies bowled Sri Lanka out for 206 in their second innings to leave the touring side with a target of 244 to win the second Test.
The 22-year-old, who had taken just one wicket in his previous 23 Tests, finished with figures of 6-29 to give West Indies a great chance of levelling the two-Test series.
Brathwaite, however, did not last long with the bat as West Indies were reduced to 20 for one with the opener out lbw to paceman Dhammika Prasad to the last delivery before tea. Shai Hope was unbeaten on 17.
A light drizzle immediately followed Brathwaite's dismissal, forcing the players off the ground and the rain got heavier to wash out the third session.
The hosts, who won the opening test in Galle by an innings and six runs, were all out an hour after lunch with Brathwaite taking the last six wickets in Sri Lanka's second innings with his off-spin.
Resuming on 76-2, Sri Lanka were pegged back early when they lost two wickets in three deliveries.
Opener Kaushal Silva (32) edged debutant spinner Jomel Warrican to slip and two balls later paceman Jerome Taylor forced Dinesh Chandimal (12) to nick a catch to wicketkeeper Denesh Ramdin.
Captain Angelo Mathews (46) and Milinda Siriwardana (42), Sri Lanka's top-scorer from the first innings, added 67 for the fifth wicket to steady the innings and took the team's lead towards 200.
With Marlon Samuels' bowling action under a cloud after he was reported for the third time in his career, West Indies captain Jason Holder called on Brathwaite to break the stand.
The bowler responded brilliantly, sending back Siriwardana in his second over before enjoying more success with the first delivery of his next over when Kusal Perera (five) got an under edge for Ramdin to hold on to another good catch. Rangana Herath made a useful 18, using both the conventional and reverse sweep against the spinners, before he became Brathwaite's third victim.
Brathwaite also claimed the wicket of Dilruwan Perera, then dismissed Mathews and number 11 batsman Nuwan Pradeep in successive deliveries to end Sri Lanka's innings.