HTML滚动时位置固定

现在显示器一般都是宽屏,网页两端常常会留白。

两边可能会放一些推荐、标签或是导航什么的辅助模块。

现在有的网站页面内容过长时,用户将滚动条向下拉时,拉到一定程度,左右两侧的辅助模块就会固定在指定位置,不随滚动条滚动。这个的体验很好。

试着自己写了一个。

原理很简单,就是使用JS计算当滚动条位置大于元素显示位置时,将元素设置为 position:fixed; 设置好top,left这样就固定好位置了。

<!DOCTYPE html>
<html>
<head>
    <title>无标题页</title>
</head>
<body style="width: 900px; margin: 0px auto; line-height: 23px; padding: 10px;">
    <div>
        <div style="float: left; width: 120px;">
            <div>
                滚动内容区域<br />
                滚动内容区域<br />
                滚动内容区域<br />
                滚动内容区域<br />
            </div>
            <div id="div1" style="border: solid 1px gray; width: 90px; padding: 10px; background-color: #eff;">
                fix内容区域<br />
                fix内容区域<br />
                fix内容区域<br />
                fix内容区域<br />
                fix内容区域<br />
                fix内容区域<br />
                fix内容区域<br />
                fix内容区域<br />
                fix内容区域<br />
                fix内容区域<br />
                fix内容区域<br />
            </div>
        </div>
        <div style="float: right; width: 750px; border: solid 1px gray; padding: 10px;">
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
            <span>ssssssssssssssss</span><br>
        </div>
    </div>
    <script type="text/javascript">
        function htmlScroll() {
            var top = document.body.scrollTop || document.documentElement.scrollTop;
            if (elFix.data_top < top) {
                elFix.style.position = ‘fixed‘;
                elFix.style.top = 0;
                elFix.style.left = elFix.data_left;
            }
            else {
                elFix.style.position = ‘static‘;
            }
        }

        function htmlPosition(obj) {
            var o = obj;
            var t = o.offsetTop;
            var l = o.offsetLeft;
            while (o = o.offsetParent) {
                t += o.offsetTop;
                l += o.offsetLeft;
            }
            obj.data_top = t;
            obj.data_left = l;
        }

        var oldHtmlWidth = document.documentElement.offsetWidth;
        window.onresize = function () {
            var newHtmlWidth = document.documentElement.offsetWidth;
            if (oldHtmlWidth == newHtmlWidth) {
                return;
            }
            oldHtmlWidth = newHtmlWidth;
            elFix.style.position = ‘static‘;
            htmlPosition(elFix);
            htmlScroll();
        }
        window.onscroll = htmlScroll;

        var elFix = document.getElementById(‘div1‘);
        htmlPosition(elFix);

    </script>
</body>
</html>
时间: 2024-10-12 21:49:08

HTML滚动时位置固定的相关文章

页面滚动时出现固定导航

页面滚动时出现固定导航的效果,参考页面有http://v.thea.cn/course/info_358和v.thea.cn. 参考代码如下: <div class="tab-title" style="position: static; top: 0px;"><span class="normal selected">课程介绍</span><span class="normal"&g

Jquery DIV滚动至浏览器顶部位置固定

获取元素(这里定位元素A)距离顶部的高度,接着设定scroll滚动的事件,比如超过那个高度,把A的位置设定为fixed,小于该高度,修改回relative. 方法一: $(function() { var elm = $('.nav'); var startPos = $(elm).offset().top; $.event.add(window, "scroll", function() { var p = $(window).scrollTop(); $(elm).css('pos

js页面滚动时层智能浮动定位实现:

案例展示: 第一个:每个人都有看过的淘宝页面: 案例就不多说了,有兴趣的可以多去找找, 这样的智能浮动效果还是不错的,挺方便. 基本的实现原理: 首先有一个默认状态就是没有滚动的时候,什么事情也不用做,定位可以是absolute,也可以是stati,fixed,relartive 这些都可以.我们主要需要关注的是当浏览器滚动的时候,(要浮动的块)要移除浏览器界面视区的时候,修改其position属性,让其浮动在窗口的上沿显示就可以了.最好的position属性就是fixed了,可以在IE6+和其

universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法

在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使用UIL遇到了这个问题,相信这个问题许多使用UIL的人都碰到过 现在把解决方法贴出来给有同样问题的朋友做参考 先看下UIL的工作流程 在已经允许内存,存储卡缓存的前提下,当一个图片被请求display时,首先要判断图片是否缓存在内存中,如果false则尝试从存储卡读取,如果依然不存在最后才从网络地址

Android 记录和恢复ListView滚动的位置的三种方法

本文主要介绍记录和恢复listView滚动位置的3种方法(1)记录listView滚动到的位置的坐标(推荐)(2)记录listView显示在屏幕上的第一个item的位置(3)通知适配器数据改变. 有时在view切换时,需要恢复listView之前滚动到的位置,鉴于网上已有资料说的都是第二种方法,而第二种方法本身在精确度上较差,自己找到了第一种方法分享下. 1.记录listView滚动到的位置的坐标,然后利用listView.scrollTo精确的进行恢复 listView.setOnScroll

滚动时div的背景图片随之滚动

在浏览一些网站时发现有一种效果是当滚动时看到某一DIV的背景也会随之滚动,如下: 当滚动时内容位置保持不变,但是内容后面的背景却在随着滚动.随之我通过审查元素看到了其是通过background-position来实现的,实现原理为当目标DIV出现在屏幕上时,当往下滚动时background-position的Y越来越小,反之则越大. 准备好一张大图,先写出布局 <style> .wrap{width: 100%;height: 3000px;} .wrap_bg{background: url

ListView或者RecycleView滚动时隐藏Toolbar( Part 2 )

ListView或者RecycleView滚动时隐藏Toolbar( Part 2 ) > * 原文链接 : How to hide/show Toolbar when list is scrolling (part 2) * 译者 : chaossss * 校对者: 这里校对者的github用户名 * 状态 : 完成 Hello,各位小伙伴,俺胡汉三又来了!!!今天我打算接着上一篇博文继续给大家讲解展现/隐藏Toolbar的效果.我建议没有读过 ListView或者RecycleView滚动时

vuejs在不使用history的情况下,回退返回到之前滚动的位置

在vuejs里,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样(借用vuejs官方文档一句话):但是官方文档使用路由,来控制滚动行为是建立在HTML5 history模式下的(参考这里),但是本人最开始就没有使用这种模式,如果在修改项目的话,太耗时,想按现在这种非history的条件下,实现页面滚动位置的记录. 其实最核心的就是记录滚动的位置,让后保存,在页面回退的时候,让页面滚动到指定位置即可.但是需要注意的钩子函数的时候.因为这里使用了keep-alive

div随页面滚动遇顶固定的两种方法(js&amp;jQuery)

一.遇顶固定的例子 我一直以为是某个div或层随屏幕滚动,遇顶则固定,离开浏览器顶部又还原这样的例子其实不少,其实它的名字叫"层的智能浮动效果".目前我们在国内的商业网站上就常常看到这样的效果了.例如淘宝网的搜索结果页的排序水平条,在默认状态时,该工具条是跟随页面滚动的,如下图: 而当我们下拉滚动条,随着页面向下滚动,当此工具条接触到浏览器的上边缘时,这时就会独立出来固定在顶部,不跟随页面滚动而滚动了,如下图: 类似的例子效果我们在别的网站上都有看到过,例如腾讯微博首页上,当我们下拉屏