Chasing 267 to win, the home team was 179 for five after 34 overs when rain ended play.
According to Duckworth-Lewis calculations, South Africa were four runs ahead of Sri Lanka, giving them an unassailable 3-0 lead in the five-match series.
The 27-year-old Du Plessis lifted South Africa from 52 for three with 72 off 74 balls, the highest of his three half-centuries, before he became the second batsman to be run out in the innings as he failed to beat a throw by Angelo Mathews [ Images ].
Captain AB de Villiers [ Images ] then took over with an aggressive 39 not out off 36 deliveries.
Sri Lanka totalled 266 for nine after winning the toss. Their top four all scored more than 30 but only opener Upul Tharanga (58) managed a half-century.
Nuwan Kulasekara [ Images ] provided some impetus in the closing overs with 40 off 38 balls.
The fourth match is in Kimberley on Friday.