github.com/sercand/please@v13.4.0+incompatible/docs/action.js (about) 1 document.addEventListener('DOMContentLoaded', function() { 2 var elems = document.querySelectorAll('a[name]'); 3 var elemMap = {}, menuItems = {}; 4 for (var i = 0; i < elems.length; ++i) { 5 elemMap[elems[i].name] = elems[i]; 6 } 7 var menuElems = document.querySelectorAll('.menu .selected a'); 8 var found = false; 9 for (var i = 0; i < menuElems.length; ++i) { 10 var href = menuElems[i].href; 11 var hash = href.indexOf('#'); 12 if (hash != -1) { 13 var name = href.substr(hash + 1); 14 if (name in elemMap) { 15 menuItems[name] = menuElems[i]; 16 found = true; 17 } 18 } 19 } 20 21 var angle = function(el) { 22 var tr = window.getComputedStyle(el, null).getPropertyValue("transform"); 23 if (tr === "none") { 24 return 0; 25 } 26 var values = tr.split('(')[1]; 27 values = values.split(')')[0]; 28 values = values.split(','); 29 var a = values[0]; 30 var b = values[1]; 31 var c = values[2]; 32 var d = values[3]; 33 return Math.round(Math.atan2(b, a) * (180/Math.PI)); 34 } 35 36 var pics = document.querySelectorAll('.menu-graphic img, .sideimg img'); 37 var rots = new Array(pics.length); 38 for (var i = 0; i < pics.length; ++i) { 39 rots[i] = angle(pics[i]); 40 } 41 42 window.addEventListener('scroll', function(e) { 43 if (found) { 44 var maxY = 0; 45 var winner = ""; 46 for (var key in menuItems) { 47 var y = elemMap[key].offsetTop; 48 if (y < window.scrollY + window.innerHeight/2 && y > maxY) { 49 maxY = y; 50 winner = key; 51 } 52 menuItems[key].className = ""; 53 } 54 if (winner) { 55 menuItems[winner].className = "selected"; 56 } 57 } 58 var rot = window.scrollY / 100; 59 for (var i = 0; i < pics.length; ++i) { 60 pics[i].style.transform = 'rotate(' + (rot + rots[i]) + 'deg)'; 61 } 62 }); 63 64 var toggleMenu = function() { 65 var elem = document.querySelector('nav > ul'); 66 if (elem.classList.contains('hide')) { 67 elem.classList.remove('hide'); 68 } else { 69 elem.classList.add('hide'); 70 } 71 }; 72 73 document.querySelector('nav > p a').addEventListener('click', function(e) { 74 toggleMenu(); 75 e.preventDefault(); 76 return false; 77 }); 78 79 if (window.innerWidth < 800) { 80 toggleMenu(); 81 } 82 }, false);