Hmm, not sure I entirely follow your code (current_col presumably refers to the current row?), but it seems like you need another piece of info to decide whether to scroll or not, which is whether the block that's moved to is already visible or not.
You could write something to work this out each time, but I think I'd tackle this by assigning a 'visible' class to each visible block, and amending this after each scroll event. Then when a keypress indicates a move to a new block you can just check whether that block is already visible (in which case no scroll needed) or whether it's not.
Don't know if that helps....