检查未查看的帖子并更新标题
Check for unseen posts and update title
我需要检查用户是否看到了帖子,并根据他没有看到的帖子数量更改文档标题。
例如,有两个未公开帖子的标题:"(2)-帖子#123",或者没有未公开帖子:"帖子#123。
我已经研究了几个"滚动到视图"的jQuery插件,但我还没有找到一个好的、快速的解决方案来处理ajaxed内容(帖子被附加到div中,它每5秒检查一次新的)。
例如,这是降价:
<div id="posts">
<div class="reply" data-postid="1" data-seen="no">
Post 1
</div>
<div class="reply" data-postid="2" data-seen="no">
Post 2
</div>
<div class="reply" data-postid="3" data-seen="no">
Post 3
</div>
</div>
我猜使用"seed"的属性会很有用。现在,我如何检查用户是否看到了(帖子已经在屏幕上滚动了/),并将未看到的内容存储在字符串中以用于标题?
有用的信息:附加的div是通过xhr获得的,它们会作为另一个"导入"的文件的主体或用xhr附加到#posts
。每5秒重复一次以获得新帖子的函数的名称为PostData()
。
编辑:我正在尝试这个,但它不起作用:
function isScrolledIntoView(elem){
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top;
var elemBottom = elemTop + $(elem).height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
$(window).scroll(function(){
isScrolledIntoView(".reply[data-seen='no']", function(){
if ($(this) == true){
$(this).attr("data-seen", "yes");
}
});
});
更新的工作代码(针对旁路):
function lescroll(){
var amount = "0";
$('.reply[data-seen="no"]').each(function(){
amount++;
if ( isScrolledIntoView(this) ) {
$(this).attr("data-seen", "yes");
amount--;
};
});
document.title = "(" + amount + ") pagetitle";
if (amount == 0){
document.title = ">><?php echo($pageid); ?> - <?php echo($leboardname); ?> vikingchan";
}
setTimeout(lescroll, 5000); /* make it check while you are in another tab */
}
$(window).scroll(function(){
lescroll();
});
$(document).ready(function(){
lescroll();
});
要使代码为所有元素运行,请将滚动回调更改为
$(window).scroll(function(){
$('.reply[data-seen="no"]').each(function(){
if ( isScrolledIntoView(this) ) {
$(this).attr("data-seen", "yes");
};
});
});
但请记住,它可能有点重,因为滚动时会多次触发滚动。您可能希望取消对scroll
事件的反弹。
尝试
$(window).on("scroll", function (e) {
var title = function() {
document.title = $("[data-seen=yes]").length === $(".reply").length
? "Post#123"
: "(" + $("[data-seen=no]").length + ")" + " - Post#123";
return document.title
};
// console.log(document.title);
$(".reply").each(function (i, el) {
if (el.getBoundingClientRect().top <= window.innerHeight) {
el.dataset.seen = "yes";
title();
} else {
el.dataset.seen = "no";
title();
};
});
try {
if (window.innerHeight + window.scrollY >=
Number($("[data-seen=yes]").css("height").replace(/px/, ""))) {
$("[data-seen=yes]").next().data("seen", "yes");
title();
// console.log($("[data-seen=no]").length
// , $("[data-seen=yes]").length)
}
} catch (e) {
console.log(e)
};
}).trigger("scroll");
jsfiddlehttp://jsfiddle.net/guest271314/nqbbLuyL/
相关文章:
- 如何从相应的控制器动态更新标题和描述
- 如何在UIWebView中检测AJAX何时更新标题
- 根据复选框值更新第一个标题列
- UI网格AngularJS-如何更新UI网格中的列标题
- 具有动态更新的实时标题 (AJAX+jQuery)
- 通过响应按钮单击更改表标题,其中行使用 JSTL for 循环更新
- Highcharts-如何正确更新VUMeter的系列[0]数据和yAxis标题
- 获取更新的 iFrame 的标题
- 使用 jQuery 更新对话框标题
- ExtJS 6 网格无法正确更新/刷新列标题
- 动态更新 url/html 标题时,如何获得类似 facebook 的按钮来注册更改?(不是 fb:like 中的 hr
- 如何防止数据表更新列标题文本
- SharePoint 2010 - Javascript 根据标题更新列表项值
- 如何检查表中的新内容,然后更新浏览器选项卡标题
- 检查未查看的帖子并更新标题
- 导出时更新的yAxis标题丢失
- 如何在angularjs中更新SPA的标题
- 使用clipboard.js更新悬停时的标题属性
- 代码不工作(请更新标题,当你知道你在问什么)
- Fancybox2加载后更新标题