nodeclub/public/javascripts/responsive.js
hylin 3d9e2bfde6 1.页面左侧主内容宽度自适应,max-width设置为1400,避免在1920等高分辨率下过于分散
2.访问过的链接颜色变浅,便于用户快速过滤已访问内容
3.移动端:浏览/回复量,更新时间,标题位置调整,取消回复头像显示,标题字体调整
4.移动端:页面留出左右边距
5.移动端:内容中的图片自适应宽度
6.移动端:优化滑动js代码逻辑
2014-03-25 15:56:29 +08:00

70 lines
2.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

$(document).ready(function(){
var $responsiveBtn = $('#responsive-sidebar-trigger'),
$sidebarMask = $('#sidebar-mask'),
$sidebar = $('#sidebar'),
$main = $('#main'),
startX = 0,
startY = 0,
delta = {
x: 0,
y: 0
},
swipeThreshold = 20,
toggleSideBar = function(){
var isShow = $responsiveBtn.data('is-show'),
mainHeight = $main.height(),
sidebarHeight = $sidebar.outerHeight();
$sidebar.css({right:isShow?-300:0});
$responsiveBtn.data('is-show', !isShow);
if(!isShow && mainHeight < sidebarHeight){
$main.height(sidebarHeight);
}
$sidebarMask[isShow?'fadeOut':'fadeIn']().height($('body').height());
},
touchstart = function(e){
var touchs = e.targetTouches;
startX = +touchs[0].pageX;
startY = +touchs[0].pageY;
delta.x = delta.y = 0;
document.body.addEventListener('touchmove', touchmove, false);
document.body.addEventListener('touchend', touchend, false);
},
touchmove = function(e){
var touchs = e.changedTouches;
delta.x = +touchs[0].pageX - startX;
delta.y = +touchs[0].pageY - startY;
//当水平距离大于垂直距离时,才认为是用户想滑动打开右侧栏
if(Math.abs(delta.x) > Math.abs(delta.y)){
e.preventDefault();
}
},
touchend = function(e){
var touchs = e.changedTouches,
docWidth = $(document).width(),
isShow = $responsiveBtn.data('is-show');
delta.x = +touchs[0].pageX - startX;
//右侧栏未显示&&用户touch点在屏幕右侧1/4区域内&&move距离大于阀值时打开右侧栏
if(!isShow && (startX > docWidth*3/4) && Math.abs(delta.x) > swipeThreshold){
$responsiveBtn.trigger('click');
}
//右侧栏显示中&&用户touch点在屏幕左侧侧1/4区域内&&move距离大于阀值时关闭右侧栏
if(isShow && (startX < docWidth*1/4) && Math.abs(delta.x) > swipeThreshold){
$responsiveBtn.trigger('click');
}
startX = startY = 0;
delta.x = delta.y = 0;
document.body.removeEventListener('touchmove', touchmove, false);
document.body.removeEventListener('touchend', touchend, false);
};
if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch){
document.body.addEventListener('touchstart', touchstart);
}
$responsiveBtn.on('click', toggleSideBar);
$sidebarMask.on('click', function() {
$responsiveBtn.trigger('click');
});
});