;(function() { var tool = { tap: function(obj, fun) { if ('ontouchstart' in window) {} else { this.tap = this.clickFun; this.clickFun(obj, fun); return } var start_x = 0 , start_y = 0; obj.addEventListener('touchstart', function(e) { start_x = e.touches[0].clientX; start_y = e.touches[0].clientY; }); obj.addEventListener('touchend', function(e) { var endX = e.changedTouches[0].clientX; var endY = e.changedTouches[0].clientY; if (Math.abs(endX - start_x) < 5 && Math.abs(endY - start_y) < 5) { fun.call(obj, e); } }); }, clickFun: function(obj, fun) { obj.addEventListener('click', function(e) { fun.call(obj, e); }) }, isBtn: function(obj) { var nowObj; var body = document.getElementsByTagName('body')[0]; do { if (obj.getAttribute('type') == 'btn' || obj.nodeName.toLowerCase() == 'a') { return obj; } obj = obj.parentNode; } while (obj != body);return false; }, touchHover: function(obj, sClass) { var sBegin = obj.className; sClass = !sClass ? 'press' : sClass; obj.className = sBegin + ' ' + sClass; document.addEventListener('touchend', fnEnd, false); document.addEventListener('touchmove', fnEnd, false); function fnEnd() { obj.className = sBegin; document.removeEventListener('touchmove', fnEnd, false); document.removeEventListener('touchend', fnEnd, false); } } }; var oHtml = document.getElementsByTagName('html')[0]; oHtml.addEventListener('touchstart', function(e) { var oTarget = e.target; tool.touchHover(tool.isBtn(oTarget)); }, false); tool.tap(oHtml, function(e) { var oTarget = e.target; if (tool.isBtn(oTarget) && tool.isBtn(oTarget).getAttribute('href')) { window.location = tool.isBtn(oTarget).getAttribute('href'); } }); }());