Shift register to fade LED's on and keep them on until input

I need the button to able be pressed at anytime during the loop.

If you need this then you need to be able to break out of a loop from a command in the interrupt service routine. You can not do this. You can only jump out of a loop when you check something and if you are going to check the state of the flag of the switches you might as well check the switches at the same time.

Now what you need to do is to write the whole program as a state machine, using the blink without delay technique. Look at that technique, it is as simple as it can get. Then grow it to cover your sequence.

So what you do it look at the milis timer and decide what you want to do next to advance the sequence, to look at the switches and so on.

As a final point you are altering the brightness of the LEDs by applying PWM to the shift register's output enable. This will always change the brightness of all the LEDs that are on, that is all the LEDs that have a one in the shift register. All the other LEDs will be off. So I think you can not get what you want with your current hardware setup. As I understand it you want one LED to fade up with some of the others being on and the rest being off.