链接到一个带有哈希片段的页面(这样用户就可以看到页面上的特定内容)问题
Linking into a page with a hash fragment (so user lands at specific content on page) issues
我想要的功能:
我想给用户一个像mysite.com/foo#bar
这样的链接,这样当他们点击这个链接时,他们就会降落在页面foo上,并在页面的一半向下滚动到id为bar
的内容。需要注意的是,此链接将始终从场外单击或手动键入地址栏,用户不会已经在加载了所有资产的页面上。
此外,我正在使用angular和有问题的页面,每个内容位都在一个元素指令中,并且在每个指令模板中都有图像
问题:
很简单吧?好吧,我遇到了一些问题,大多数时候它是有效的,但可能40%的时候它不起作用,用户在内容上方着陆,我相信这是因为浏览器滚动到页面上的正确点,但随后图像会加载到页面上方,将页面的其余部分向下推,让用户处于一个随机的无意识位置。(由于某种原因,iPhone的故障率似乎更糟…(
到目前为止我尝试了什么:
在run函数中,我在任何路由上查找哈希片段,如果存在,则滚动到它。
if($location.hash()) {
$anchorScroll();
}
我试过:
- 在超时时包装
这有时有效,但显然不一致,当然我可以将其设置为500ms,在良好的wifi连接上也可以,但在信号差的手机上不行
- 正在侦听$viewContentLoaded
太快了,ui路由器似乎在页面呈现之前触发了这个事件
为页面上的所有指令在每个post-link函数中发出一个事件。
link: function ($scope) { $scope.$emit('loadingFinished');
然后在运行功能中再次拾取
$scope.$on('loadingFinished', function () {
$timeout(doAnchorScroll, 500);
}
这提高了成功率,但仍然不是万无一失的。我亲眼目睹了它让用户被困在奇怪的地方,主要是在iPhone上。
有人能提出一种检测可以安全滚动的时刻的方法,或者其他确保降落在正确位置的方法吗?
有两件事——首先是用户滚动应该阻止它——如果他们已经滚动了,你不想滚动视图。第二个是监听图像以完成加载。
听图像很容易:
$("img").one("load", $anchorScroll);
然后在$anchorScroll中,我建议检查是否所有图像都已加载,如果没有,则立即返回(如果您只检查锚上方的图像,但只快速回复,则可获得奖励(:
var scrolled = false;
function $anchorScroll() {
var allLoaded = true;
$("img").each(function() {
if (!this.loaded) {
return allLoaded = false;
}
});
if (scrolled || !allLoaded) {
return;
}
...
滚动可能会稍微困难一点-你可以检查滚动事件,但不同平台之间的滚动事件略有不同-甚至可能会因为手动滚动而被解雇-如果你发现发生了这种情况,那么只需有一个全局消息,上面写着"我在这里滚动"并忽略它,否则:
$(document).one("scroll", function() { // Use ".on" if this gets fired for code...
scrolled = true;
});
请注意,您可能不需要关心失败的映像加载或已经加载的映像加载,因为对$anchorScroll()
的初始调用会捕获它们。
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- 只要用户将鼠标悬停在jQuery中的某个元素上,就可以执行多次单击
- AngularJS在不使用变量的情况下将服务注入模块中,这样就可以缩小它
- 如何绑定到这个,这样我就可以在这个coffeescript中正确地调用React中的setState
- 如何通过知道节点的值来访问dom&&只要知道价值就可以得到手风琴的索引
- 如何用程序读取和解析gruntfile,这样我就可以修改它并再次保存
- setTimeout()是如何实现的,这样它就可以在不阻塞主线程的情况下跟踪经过的时间
- JQuery动画打断了脚本,但如果没有它,脚本就可以工作
- 如果我在其中使用alert,Javascript代码就可以工作,否则它'It’不起作用
- 在输入字段上使用它-can'我不能从函数中取出变量,这样我就可以使用它了
- lunr:返回搜索词的词干,这样我就可以在结果中突出显示它
- 如何只需一次调用就可以将对象数组保存到mongoose DB中
- Hapi.js文件上传我如何获取文件,这样我就可以在上面使用imageMagick命令行工具
- 我怎么能"保存“;变量客户端,这样我就可以在其他java脚本事件中使用它
- 通过小部件设置第三方cookie,这样我以后就可以识别用户了
- 如何更改当前打开的链接的文本颜色,并保持未打开链接的默认颜色?这样用户就可以知道他现在在哪个链接上
- 将值从一个html表单移动到另一个,这样一个表单就可以提交自己和另一个表单的值
- 2 pdf'It’点击一下网站就可以打开了
- 将和.html(墙帖)加载到不同的页面(这样我就可以在所有想要添加的页面中都有墙帖),使用angular
- 链接到一个带有哈希片段的页面(这样用户就可以看到页面上的特定内容)问题