England made their second-highest one-day international total to beat South Africa by 39 runs on the Duckworth-Lewis method in Bloemfontein.
Jos Buttler's 73-ball century helped the tourists to 399-9, with Ben Stokes, Alex Hales and Joe Root passing 50.
Quinton de Kock's unbeaten 138 off 96 balls kept the Proteas in contention.
But the loss of wickets at key times halted the home side's momentum before rain ended the game with them on 250-5 to give England a 1-0 series lead.
The second ODI in the five-match series is in Port Elizabeth on Saturday.