新的着陆页,以及无限滚动的一种实现方式

2022-5-16 18:45| 发布者: Hocassian| 查看: 59| 评论: 0|原作者: 三无计划的博客

摘要:
C:\Users\Administrator\Downloads\2019-10-13-21-42-29-124521800402700-无文字 三无计划-采集的数据-后羿采集器.html

发布时间

Aug 09, 2018

标题链接

https://blog.imalan.cn/archives/142/

标题

新的着陆页,以及无限滚动的一种实现方式

word-count

+ 1034 字

导语

没错,个人博客就是可以为所欲为。

正文

新的着陆页

自之前那个 Type­cho 博客爆炸之后,我转战 Hexo 启动了这个博客。由于域名解析的问题,博客域名迁到了 blog.imalan.cn,主域名 imalan.cn 空了出来。本来是直接做了一个 301 跳转,但是觉得有些可惜,而且我腾讯云的主机也没有到期,所以就干脆做一个着陆页放在上面吧。网址是:一只熊猫 - 不急,慢慢来,电脑端的效果见文章首图,更多的页面如下:

landing2
landing2

3landing-
3landing-

我自己不是做前端的,所以不是很懂网页设计。以前也自己写一些简单的静态页面,但是总是执着于背景图、浮动元素之类花哨的东西,技术也达不到,做出来的页面也许自己喜欢,但其实一点也不大气。这次干脆就用最简单的黑白和最简单的布局来做一个静态页面。

在电脑端,一页就是一屏。除了第一页是自己的导航信息之外其他页面都是从一言获取的数据,可以无限滚动,到底了自动加载新的内容。

我个人还是很喜欢这个页面的,特别是在大屏电脑端的效果。页面因为非常简单,没有什么技术上的问题,不过为了实现无限滚动我还是动了一番脑筋。我的目标是页面到底了就加载新的数据,并且每一页都有一个向下的箭头按钮点击就可以滚动到下一页。那么只要先在页面初次载入时加载足够的元素(超过一屏),然后在滚动事件里检测是否到底,到底了用 Ajax 请求新的数据添加 DOM。每个新的 DOM 都要有自己的 id,方便跳转。那么把 HTML 结构和 JS 放在这里吧,页面引用了 JQuery 库,平滑滚动使用了 scrollTo.js 插件。

HTML

<!DOCTYPE html>
<html>
<head>
    <script src="……/jquery.min.js"></script>
    <script src="……/jquery.scrollTo.min.js"></script>
    <script src="js.js"></script>
</head>
<body>
    <header>
        ……
    </header>
    <footer>
        ……
    </footer>
</body>
</html>

为了简单起见,省去了部分内容。

JS

var nHitokoto=0; // 当前页面上的子块数量
function loadHitokoto(index){ // 在 footer 前插入新的 DOM,id 为 hitokoto_index
    var html=`<div id="hitokoto_`+String(index)+`">
    ……
    <p onclick="jumpToHitokoto(`+String(index+1)+`)">下一页</p>
    </div>`;
    $("footer").before(html);
    nHitokoto = nHitokoto + 1;
    $.ajax({
        type: 'Get',
        cache: false,
        url: 'https://v1.hitokoto.cn/?encode=json&c=a&'+String(Math.random()),
        success: function(data) {
            ……
        }
    });
}
function jumpToHitokoto(index){ // 跳转到某个id,如果不存在就先创建新的子块再跳转
    if($("#hitokoto_"+String(index)).length){
        $.scrollTo("#hitokoto_"+String(index),200);
    }
    else{
        loadHitokoto(index);
        $.scrollTo("#hitokoto_"+String(index),200);
    }
}
$(document).ready(function(){ // 页面初次加载时创建足够多的子块(超过一屏)
    for (let index = 0; index < 4; index++)
        loadHitokoto(index);
})
$(window).scroll(function(){ // 检测是否滚动到底,到底了就加载新的数据
    var h=$("footer").offset().top;
    var c = $(document).scrollTop();
    var wh = $(window).height();
    if (Math.ceil(wh+c)>=h){
        loadHitokoto(nHitokoto);
    }
})

其中有技术含量的只有判断页面是否到底这个函数。由于我的 footer 总是在最底部,只要判断 footer 是否出现在屏幕上就好。放张示意图就一目了然了:

illu_scroll_to_bottom_1
illu_scroll_to_bottom_1


一句题外话:发现了一个不错的灯箱插件:Colorbox

更新

现在我已经禁止了所有的滚动事件,只能通过点击按钮来上下翻页。

因为实际上这个页面是以页为单位的,设置成无限滚动倒是显得不合理了。而且我很喜欢一整个页面全黑背景或者全白的感觉,很舒服。涉及到禁止滚动事件,在桌面端只需要设置 over­flow: hid­den 就好,但是移动端,特别是 Sa­fari 我找了好几个办法,最终发现在 body 标签上加上 on­touch­move="event.pre­vent­De­fault ()" 就好。

作者

熊猫小 A


路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部