Javascript 水平一页网站赢得';“不去”;“向后”;前分区
快速背景故事: 我让一切都正常工作,但过了一段时间,我发现它不再正常工作了。返回“页面”的能力对我来说非常重要,所以我开始撤销我最近所做的任何更改。这不起作用,所以我决定重新创建框架(希望插入内容以找到问题点),但问题仍然存在。我已经将代码提炼到下面的基本内容 我过去可以点击后退按钮,我会立即被带到上一个面板。现在,除了更改“#page_name”和当前面板移动1px之外,什么也没有发生。如果我点击了几个链接(从而存储了更多的历史“轨迹”),那么一旦我再次点击后退按钮,我最终返回到一个状态,但不是正确的状态 这是一把小提琴: JQ CSS HTMLJavascript 水平一页网站赢得';“不去”;“向后”;前分区,javascript,jquery,html,css,horizontal-scrolling,Javascript,Jquery,Html,Css,Horizontal Scrolling,快速背景故事: 我让一切都正常工作,但过了一段时间,我发现它不再正常工作了。返回“页面”的能力对我来说非常重要,所以我开始撤销我最近所做的任何更改。这不起作用,所以我决定重新创建框架(希望插入内容以找到问题点),但问题仍然存在。我已经将代码提炼到下面的基本内容 我过去可以点击后退按钮,我会立即被带到上一个面板。现在,除了更改“#page_name”和当前面板移动1px之外,什么也没有发生。如果我点击了几个链接(从而存储了更多的历史“轨迹”),那么一旦我再次点击后退按钮,我最终返回到一个状态,但不
家
产品
零件清单目录
服务
报价请求
关于
联系页面
解决方案查询
新闻
法律信息
这对这个项目是一个巨大的打击,因为这个特定的功能是我所追求的。任何帮助都将不胜感激 这将解决您的问题: 我想添加这一点,以便那些在使用Wolff的代码时在跨浏览器遵从性方面遇到问题的人可以暂时避免对[…经销商的选择]进行打击 返乡问题 有些浏览器在试图返回主页时表现不佳,因为它没有哈希值 主页哈希修复程序
function hashHome() {
var currentHash = location.hash;
var homeHash = '#home';
if (currentHash == '') {
history.pushState(null, null, homeHash);
}
}
hashHome();
$(window).on('hashchange', function() {
if(!window.location.hash) return;
var target = $(window.location.hash);
var targetHash = window.location.hash;
var iOS = ( navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false );
var currentPosition = $(window).scrollLeft();
var targetPosLeft = target.offset().left;
var targetPosTop = target.offset().top;
function unbindWindow() { $(window).unbind('scroll'); }
function repositionWin() {
unbindWindow();
$(window).on('scroll', function() {
var alteredPosLeft = $(window).scrollLeft();
var alteredPosTop = $(window).scrollTop();
if (alteredPosLeft != targetPosLeft) {
window.scrollTo(targetPosLeft, alteredPosTop),
unbindWindow(),
repositionWin();
}
});
}
function fadePages() {
if (targetPosLeft == currentPosition) {
}
else {
function fadePageOut() {
$('.page-container').stop(true,false).animate({
opacity: "0.25",
transition: "opacity 0.1s 0.0s ease"
});
}
function fadePageIn() {
$('.page-container').stop(true,false).animate({
opacity: "1.0",
transition: "opacity 0.3s 0.0s ease"
});
}
fadePageOut();
setTimeout (fadePageIn, 900);
}
}
function pageChange() {
if (jQuery.browser.mobile === true) {
if (iOS === true) {
unbindWindow();
$('html,body').stop(true,false).animate({
scrollLeft: targetPosLeft}, 1400);
setTimeout (repositionWin, 1500);
}
else {
unbindWindow();
$('html,body').stop(true,false).animate({
scrollLeft: targetPosLeft}, 1200, function() {
$(this).stop(true,false).animate({
scrollTop: targetPosTop
}, 200, repositionWin);
});
}
}
else {
fadePages();
unbindWindow();
$('html,body').stop(true,false).delay(100).animate({
scrollLeft: targetPosLeft,
scrollTop: targetPosTop
}, 1300, repositionWin);
}
}
if ($('#mini-site-menu-button-container').is(':visible') === true && $('#main-menu-wrapper').hasClass('show-main-menu') === true) {
setTimeout (pageChange, 300)
}
if ($('.footer-container').is(':visible') === true) {
setTimeout (pageChange, 500)
}
if ($('.form-instructions-wrapper').hasClass('expand-form-instruct') === true) {
setTimeout (pageChange, 500)
}
if ($('.quick-quote-container').hasClass('toggle-open') === true) {
setTimeout (pageChange, 500)
}
if ($('#mini-site-menu-button-container').is(':visible') === false && $('.footer-container').is(':visible') === false && $('.form-instructions-wrapper').hasClass('expand-form-instruct') === false && $('.quick-quote-container').hasClass('toggle-open') === false) {
pageChange();
}
if ($('#main-menu-wrapper').hasClass('show-main-menu') === false && $('.footer-container').is(':visible') === false && $('.form-instructions-wrapper').hasClass('expand-form-instruct') === false && $('.quick-quote-container').hasClass('toggle-open') === false) {
pageChange();
}
});
Webkit同步滚动问题 一些webkit浏览器,特别是移动浏览器(阅读iOS!!!)的一个大问题是,当你同时水平和垂直滚动时,你最终得到的是一团乱七八糟的乱七八糟的东西,让你回到起点。非常具有破坏性,非常令人困惑 我最初认为这是因为浏览器没有散列新值,但后来我意识到新值在那里,只是没有“报告”到视口。iOS地址栏(7+)不会在发生更改时显示更改,只有在点击地址栏(DOI!哎哟,应该先尝试一下…)后我才发现。你可以说我疯了,但是如果你的代码依赖于一件事(新的hashvalue),而这件事没有明显发生,你可能会认为(就像我所做的那样),代码不起作用的原因是因为你“看到”的一件事没有发生 完整解释: 单击功能与Wolff的相同。 跨浏览器修复
function hashHome() {
var currentHash = location.hash;
var homeHash = '#home';
if (currentHash == '') {
history.pushState(null, null, homeHash);
}
}
hashHome();
$(window).on('hashchange', function() {
if(!window.location.hash) return;
var target = $(window.location.hash);
var targetHash = window.location.hash;
var iOS = ( navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false );
var currentPosition = $(window).scrollLeft();
var targetPosLeft = target.offset().left;
var targetPosTop = target.offset().top;
function unbindWindow() { $(window).unbind('scroll'); }
function repositionWin() {
unbindWindow();
$(window).on('scroll', function() {
var alteredPosLeft = $(window).scrollLeft();
var alteredPosTop = $(window).scrollTop();
if (alteredPosLeft != targetPosLeft) {
window.scrollTo(targetPosLeft, alteredPosTop),
unbindWindow(),
repositionWin();
}
});
}
function fadePages() {
if (targetPosLeft == currentPosition) {
}
else {
function fadePageOut() {
$('.page-container').stop(true,false).animate({
opacity: "0.25",
transition: "opacity 0.1s 0.0s ease"
});
}
function fadePageIn() {
$('.page-container').stop(true,false).animate({
opacity: "1.0",
transition: "opacity 0.3s 0.0s ease"
});
}
fadePageOut();
setTimeout (fadePageIn, 900);
}
}
function pageChange() {
if (jQuery.browser.mobile === true) {
if (iOS === true) {
unbindWindow();
$('html,body').stop(true,false).animate({
scrollLeft: targetPosLeft}, 1400);
setTimeout (repositionWin, 1500);
}
else {
unbindWindow();
$('html,body').stop(true,false).animate({
scrollLeft: targetPosLeft}, 1200, function() {
$(this).stop(true,false).animate({
scrollTop: targetPosTop
}, 200, repositionWin);
});
}
}
else {
fadePages();
unbindWindow();
$('html,body').stop(true,false).delay(100).animate({
scrollLeft: targetPosLeft,
scrollTop: targetPosTop
}, 1300, repositionWin);
}
}
if ($('#mini-site-menu-button-container').is(':visible') === true && $('#main-menu-wrapper').hasClass('show-main-menu') === true) {
setTimeout (pageChange, 300)
}
if ($('.footer-container').is(':visible') === true) {
setTimeout (pageChange, 500)
}
if ($('.form-instructions-wrapper').hasClass('expand-form-instruct') === true) {
setTimeout (pageChange, 500)
}
if ($('.quick-quote-container').hasClass('toggle-open') === true) {
setTimeout (pageChange, 500)
}
if ($('#mini-site-menu-button-container').is(':visible') === false && $('.footer-container').is(':visible') === false && $('.form-instructions-wrapper').hasClass('expand-form-instruct') === false && $('.quick-quote-container').hasClass('toggle-open') === false) {
pageChange();
}
if ($('#main-menu-wrapper').hasClass('show-main-menu') === false && $('.footer-container').is(':visible') === false && $('.form-instructions-wrapper').hasClass('expand-form-instruct') === false && $('.quick-quote-container').hasClass('toggle-open') === false) {
pageChange();
}
});
附加注释 我删除了大部分附加代码,但将条件语句保留在末尾,以显示如何调用移动站点上的页面更改。根据您选择允许用户浏览页面的方式(我选择从左侧弹出菜单,因此选择“切换打开”),您将希望在启动滚动动画之前允许其他动画完成。对于大多数移动设备来说,一次处理所有数据往往是非常困难的。我还是太幼稚了,不明白动画是怎么变的,所以我就是这样处理的 我还添加了一个函数,可以在页面滚动时淡出页面容器。如果你要从站点的一端到另一端,那么要走那么远,需要做大量的腿部工作。如此多的内容飞驰而过,可能会让人有点反感。褪色一点似乎会减弱打击,我敢说它也会增加一些东西
最后,对于支持触摸的设备,我添加了一个功能,可以在页面更改之间监视和校正水平滚动位置。通过在手机上滑动,很容易不小心左右滚动,所以这似乎是必要的。我在Firefox(27.0.1)中可以使用该提琴。我尝试了该提琴,在Firefox(最新版本)中效果很好。我看到了这个问题,使用Chrome。如果导航到第二个页面,然后是第三个页面,然后在小提琴窗口中单击鼠标右键,然后单击“上一步”,则第三个页面“服务”将保持原样,但会在大约1像素的范围内颠簸。你能详细说明一下你的目标浏览器/设备,以及你是否有任何其他功能或事件与此行为相关吗?@Lazerblade,我在我所有的浏览器(Chrome、Firefox、IE、Opera和Safari;最新版本)中都看到了这种行为,所以我觉得没有必要提及。我的错。tcj,一开始对我来说也很有效。很奇怪,这似乎在很大程度上起到了作用。在IE(最新版本)中,它执行该功能,但似乎不会重复。在Opera中,它不会返回主页(因为我相信,初始页面没有哈希值)。这已经有一段时间了,但我想知道您是否可以使用您提供的脚本查看我遇到的一个新问题:
function hashHome() {
var currentHash = location.hash;
var homeHash = '#home';
if (currentHash == '') {
history.pushState(null, null, homeHash);
}
}
hashHome();
$(window).on('hashchange', function() {
if(!window.location.hash) return;
var target = $(window.location.hash);
var targetHash = window.location.hash;
var iOS = ( navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false );
var currentPosition = $(window).scrollLeft();
var targetPosLeft = target.offset().left;
var targetPosTop = target.offset().top;
function unbindWindow() { $(window).unbind('scroll'); }
function repositionWin() {
unbindWindow();
$(window).on('scroll', function() {
var alteredPosLeft = $(window).scrollLeft();
var alteredPosTop = $(window).scrollTop();
if (alteredPosLeft != targetPosLeft) {
window.scrollTo(targetPosLeft, alteredPosTop),
unbindWindow(),
repositionWin();
}
});
}
function fadePages() {
if (targetPosLeft == currentPosition) {
}
else {
function fadePageOut() {
$('.page-container').stop(true,false).animate({
opacity: "0.25",
transition: "opacity 0.1s 0.0s ease"
});
}
function fadePageIn() {
$('.page-container').stop(true,false).animate({
opacity: "1.0",
transition: "opacity 0.3s 0.0s ease"
});
}
fadePageOut();
setTimeout (fadePageIn, 900);
}
}
function pageChange() {
if (jQuery.browser.mobile === true) {
if (iOS === true) {
unbindWindow();
$('html,body').stop(true,false).animate({
scrollLeft: targetPosLeft}, 1400);
setTimeout (repositionWin, 1500);
}
else {
unbindWindow();
$('html,body').stop(true,false).animate({
scrollLeft: targetPosLeft}, 1200, function() {
$(this).stop(true,false).animate({
scrollTop: targetPosTop
}, 200, repositionWin);
});
}
}
else {
fadePages();
unbindWindow();
$('html,body').stop(true,false).delay(100).animate({
scrollLeft: targetPosLeft,
scrollTop: targetPosTop
}, 1300, repositionWin);
}
}
if ($('#mini-site-menu-button-container').is(':visible') === true && $('#main-menu-wrapper').hasClass('show-main-menu') === true) {
setTimeout (pageChange, 300)
}
if ($('.footer-container').is(':visible') === true) {
setTimeout (pageChange, 500)
}
if ($('.form-instructions-wrapper').hasClass('expand-form-instruct') === true) {
setTimeout (pageChange, 500)
}
if ($('.quick-quote-container').hasClass('toggle-open') === true) {
setTimeout (pageChange, 500)
}
if ($('#mini-site-menu-button-container').is(':visible') === false && $('.footer-container').is(':visible') === false && $('.form-instructions-wrapper').hasClass('expand-form-instruct') === false && $('.quick-quote-container').hasClass('toggle-open') === false) {
pageChange();
}
if ($('#main-menu-wrapper').hasClass('show-main-menu') === false && $('.footer-container').is(':visible') === false && $('.form-instructions-wrapper').hasClass('expand-form-instruct') === false && $('.quick-quote-container').hasClass('toggle-open') === false) {
pageChange();
}
});