I have included an ArrowDown trigger.
It was easiest using jQuery, which we have already loaded, so the final code for Arrow triggering is now:

$(window).scroll(function() {
bottom = false;
if($(window).scrollTop() + $(window).height() > $(document).height() - 10) {
bottom = true;
}
});


document.body.setAttribute('onkeydown', 'paging(event)');
function paging(event) {
i = pages.indexOf(page), a = pages.length;
var kd = event.key;
if (kd.search('Arrow') >= 0) {
switch(kd) {
case 'ArrowLeft': jump((i + a - 1)%a + 1); break;
case 'ArrowRight': jump((i + 1)%a + 1); break;
case 'ArrowUp': if(window.pageYOffset === 0) jump((i + a - 1)%a + 1); break;
case 'ArrowDown': if (bottom) jump((i + 1)%a + 1); break;
default:
}
}
}

PageUp and PageDown do not force a page jump and the Down Arrow only does so when the page just reaches the bottom (I have set a slight offset of 10px but you can change this to any value). If put to zero then when there is no vertical scrollbar, ArrowDown does nothing; 10 seems a happy compromise.

To achieve something nearing an A-site, I might use pageFadeI/pageFadeO with a 2s delivery. For a bit more drama - pageCubeHFI/pageCubeHFO.

Do have a play with The Ultimate Conventional Website - Step 5.xar.

Acorn