在 HTML 页面“到达”底部之前滚动它

2024-01-07

我有这个聊天话题

它当前所做的是,当它到达页面底部时,它会向上滚动,以便它始终位于页面底部。

问题是,正如您在图像中看到的,它在到达页面底部之前隐藏在表单后面。因此,我需要重新定义页面底部的内容:

我努力了:

function scroll() {
    window.scrollTo(0, document.body.scrollHeight + document.getElementById('form_id').offsetHeight);
};

但似乎它对这个函数之前的listen没有任何影响。

这是我的其余代码:

<html>
    <head>
        <title>Chat Demo</title>

        <style>
            .top-bar {
                background: #009E60;
                position: relative;
                overflow: hidden; 
            }

            .top-bar::before {
                content: "";
                position: absolute;
                top: -100%;
                left: 0;
                right: 0;
                bottom: -100%;
                opacity: 0.25;
                background: radial-gradient(white, #009E60);
            }

            .top-bar > * {
                position: relative;
            }

            .top-bar::before {
              animation: pulse 1s ease alternate infinite;
            }

            @keyframes pulse {
              from { opacity: 0; }
              to { opacity: 0.5; }
            }


            * {
                margin: 0;
                padding: 0;
            }

            h1{
                padding: 5px;
            }

            body {
                font: 15px Helvetica, Arial;
            }

            form {
                background: #009E60;
                padding: 10px;
                bottom: 0;
                position: fixed;
                width: 60%;
                box-sizing: border-box;
            }

            form input {
                padding: 5px;
                width: 80%;
                margin-right: 0.5%;
                vertical-align: bottom;
                font: 15px Helvetica, Arial;

            }

            form button {   
                width: 18.5%;
                padding: 9px;
                vertical-align: bottom;

            }

            ol {
                padding-bottom: 100px;
            }

            #messages {
                list-style-type: none;
                margin: 0;
                padding: 0;
            }

            #messages li {
                padding: 5px 10px;
            }

            .left {
                padding: 5px 10px;
                background: -webkit-linear-gradient(left,rgba(215,229,228,1),rgba(255,255,255,0)); /*Safari 5.1-6*/
                background: -o-linear-gradient(right,rgba(255,255,255,0),rgba(215,229,228,1)); /*Opera 11.1-12*/
                background: -moz-linear-gradient(right,rgba(255,255,255,0),rgba(215,229,228,1)); /*Fx 3.6-15*/
                background: linear-gradient(to right, rgba(215,229,228,1), rgba(255,255,255,0)); /*Standard*/
                text-align: left;
            }

            .right {
                padding: 5px 10px;
                background: -webkit-linear-gradient(left,rgba(255,255,255,0),rgba(228,215,229,1)); /*Safari 5.1-6*/
                background: -o-linear-gradient(right,rgba(228,215,229,1),rgba(255,255,255,0)); /*Opera 11.1-12*/
                background: -moz-linear-gradient(right,rgba(228,215,229,1),rgba(255,255,255,0)); /*Fx 3.6-15*/
                background: linear-gradient(to right,rgba(255,255,255,0),rgba(228,215,229,1)); /*Standard*/
                text-align: right;
            }

            .module {
              width: 60%;
              margin: 20px auto;
            }
        </style>

    </head>

    <body>

        <section class="module">

            <div id="wrapper">
                <div id="header">
                    <header class="top-bar">
                        <h1>Chat Demo</h1>
                    </header>
                </div>
                <div id="content">
                    <ol id="messages"></ol>
                </div>
                <div id="footer">
                    <form id="form_id" action = "#">
                        <input id = "user_input"/>
                        <button id="btn_id">send</button>
                    </form>
                </div>
            </div>
        </section>

        <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
        <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
        <script>
            var socket = io();

            $("#form_id").submit(function(){
                var value = $("#user_input").val();
                if(value.length > 0 && value != "Default text"){
                    socket.emit('message from me', value);
                    $('#messages').append($('<li class="right">').text(value));
                    $('#user_input').val('');
                    scroll();
                }
                return false;
            });

            socket.on('message', function(msg){
                $('#messages').append($('<li class="left">').text(msg));
            });

            function scroll() {
                window.scrollTo(0, document.body.scrollHeight);
            };

        </script>

    </body>
</html>

JavaScript 中的滚动始终向上滚动到可能的最大值。在您的情况下,它是可滚动内容的大小。您需要做的就是应用在表单后面呈现的额外空白空间。

因此,从您的代码(您没有向我们展示 CSS)中,您可以添加到您的:

ol { padding-bottom: 50px; }

其中 50px 是表单的高度。

另外,如果你总是想滚动到最大底部,你可以只使用像 999999 这样的最终值,而不是计算它。浏览器将足够聪明来理解它

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 HTML 页面“到达”底部之前滚动它 的相关文章

  • setInterval() 在用户离开选项卡时暂停?

    javascript 中是否有任何方法的行为类似于 setInterval 并且当用户离开选项卡时停止并在用户再次进入选项卡时恢复 您可以使用以下方法创建自己的 API可见性API https developer mozilla org e
  • 如何循环遍历对象数组并生成键值对?

    我有一个像这样的对象数组 let someObj items id 12 value true id 34 value true id 56 value false 我想将其添加到现有对象中 其中 id 是该对象的键 如下所示 let ob
  • 引导标签输入宽度

    我正在尝试使用引导程序标签输入 http timschlechter github io bootstrap tagsinput examples 以模态中包含的形式 像这样 div class form group div
  • 类型“void”不可分配给类型“((event:MouseEvent) => void) |不明确的'

    import as React from react import App css import PageTwo from components PageTwo export interface IPropsk data Array
  • 如何在 javascript 中基于类型字符串创建新对象?

    如何基于变量类型字符串 包含对象名称 在 javascript 中创建新对象 现在我有 随着更多工具的出现 列表会变得更长 function getTool name switch name case SelectTool return n
  • 发送 POST 请求时 JSON 原语无效

    我有以下 ajax 请求 其中我尝试将 JSON 对象发送到服务器 function sendData subscriptionJson ajax type POST url Url Action SubscribeSecurities S
  • 将 onclick 事件应用于页面加载时不存在的元素

    我将列表样式设置为看起来像选择框 并且当用户单击列表中的元素时我想触发一个函数 但是该元素是通过加载的AJAX因此 当页面加载并且我无法绑定时不存在onclick事件到它onDomReady 如果我把它作为一个普通的选择列表 我可以只标记一
  • 根据特定字符获取整个字符串或子字符串

    我有一个包含 MIME 类型的字符串 例如application json 现在我想将其与实际的 HTTP 标头进行比较 在本例中content type 如果标头包含 MIME 类型 那么就很简单 if mimeType contentT
  • 如何使用Jquery获取MS下拉列表的选定值

    我在我的 MVC 项目中使用了 MS 下拉列表 现在我想使用 Jquery 获取 MS 下拉值 如何才能做到这一点呢 Country msDropdown 我想使用 JQuery 获取 INDIA 的选定值 var countryName
  • Android中webview的截图方法

    我在 webview 中的 html5 canvas 上画了一些线 并尝试使用下面的代码截取 webview 的屏幕截图 WebView webView WebView findViewById R id webview webView s
  • Outlook 加载项,无法读取未定义的属性“BeginRequestEventArgs”

    我使用 Visual Studio 开发了 Outlook 插件 我的插件有一个按钮 用于填充会议邀请正文中的详细信息并添加所需的与会者 这在 99 的情况下都有效 但是 时不时地它会给我下面的 JavaScript 错误 Uncaught
  • 不使用控件时,视频元素在 Chrome 中消失

    So I think这是一个浏览器错误 它出现在一个更复杂的设计 网站中 但我已经进行了很好的尝试 简化了我的代码和设计等 并发现了以下内容 嵌入时
  • Javascript onload 不起作用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • 如何为 Imagus 悬停缩放扩展开发自定义过滤器?

    当我读到关于悬停缩放是邪恶的 http www reddit com r YouShouldKnow comments 1wjrc8 ysk that the hover zoom extension is spyware 哎呀 有两篇文章
  • 检测浏览器选项卡是否具有焦点

    是否有可靠的跨浏览器方法来检测选项卡是否具有焦点 场景是 我们有一个定期轮询股票价格的应用程序 如果页面没有焦点 我们可以停止轮询并为每个人节省流量噪音 特别是当人们喜欢打开具有不同投资组合的多个选项卡时 Is window onblur
  • 在方法内部执行方法

    我目前正在 FreeCodeCamp 中进行 JavaScript 练习 我的代码应该使用的测试用例之一是函数调用 如下所示 addTogether 2 3 这是我得到的基本功能 function addTogether return 当我
  • AngularJS 在指令运行之前通过 AJAX 检索数据

    我正在使用 AngularUIuiMap http angular ui github com directives map实例化谷歌地图的指令 uiMap 指令非常适合处理硬编码数据 mapOptions and myMarkers 但是
  • 如何获得 JavaScript 阶乘程序的循环来显示所使用的工作?

    你好 我面临着用 JavaScript 编写一个程序的挑战 尽管我对它不太了解 但它要求用户输入一个数字 然后计算该数字的阶乘 我使用了已经提出的问题并设法使计算正常工作 但无法获得所需的输出 我必须在以下输出中获取它 而不使用任何花哨的库
  • JQuery 删除和内存泄漏

    我正在开发一个游戏 我看到了很多内存消耗 我使用jquery animate 动画完成后 我 remove 元素 我的问题是 从 dom 树中删除一个元素后 对象还存在记忆中吗 Javascript 是一种垃圾收集语言 这意味着当没有代码保

随机推荐

  • 如何在java中创建临时文件而不在文件名后附加随机数?

    我需要创建一个临时文件 所以我尝试了以下方法 String TempFiles c1234c10 c1234c11 c1234c12 c1234c13 for int i 0 i lt 3 i try String tempFile Tem
  • 如何将现有 Java 密钥库 (.jks) 文件导入到 Java 安装中?

    所以 我在 LDAP 方面遇到了麻烦 我有一个集成测试用例 希望能够成功 但它目前遇到了 SSL 握手的 LDAPS 安全问题 我能够使用 Apache Directory Studio 连接到 LDAPS 并且它已将密钥库下载到文件 pe
  • endpoints.ServiceException 子类返回 400 状态代码而不是 409

    在云端点中文档 https developers google com appengine docs python endpoints exceptions对于异常处理 建议子类化endpoints ServiceException类提供自
  • 将 Boost 库添加到 OS X Eclipse 中的 C++ 项目

    我一直在尝试使用 eclipse 使用 boost 文件系统库来设置 C 项目 我跟着these http www technoboria com 2009 07 simple guide to installing boost on ma
  • ListFragment onItemClickListener 不起作用

    我正在使用选项卡式布局 带有滑动 这里我有 3 个由SectionsPagerAdapter 控制的选项卡 每个选项卡都是一个 ListFragment 现在我想在单击列表中的一项时触发一个事件 我想要每个选项卡都有一个监听器 现在是代码
  • 使用 fgets 从文件中读取

    我正在读取格式的文件 1 32 43 23 32 43 123 43 54 243 123 2222 2 这是我的代码片段 string 100 while feof fp fgets string 100 fp 现在 当我将每个字符串放入
  • Django 使用 kwargs 进行反向操作

    比如说 在我的注册类的 post 方法中 如果用户已经注册 我想将用户重定向到登录页面 这很简单 class Register View def post self request Some code to check if the ema
  • XTS 的日期有不同的来源。使用 R 计算 beta

    我对 R 有点陌生 我想我的错误对于有经验的人来说是微不足道的 我正在尝试编写一个 R 程序来计算许多股票的贝塔值 股票代码读取自Input csv 数据是从yahoo下载的 然后 代码循环执行每只股票的 beta 计算 并输出总结回归的
  • UITextView 带有“完成”按钮*和*“返回”键?

    我在 iPhone 应用程序中使用 UITextView 进行多行文本输入 并且已将 返回 键设置为显示 完成 我还设置了返回键来禁用第一响应者状态 以便点击 完成 实际上退出 UITextView 但是 我还希望用户能够在 UITextV
  • 如何编写在框中绘制文本/字符串的测试用例?

    我正在矩形框架中绘制字符串 绳子拉得很完美 现在我需要使用sentesting 套件编写测试用例 我不知道应该从哪里开始 为了寻求帮助 我还看到了iPhone 示例计算器应用程序 http developer apple com IPhon
  • 未找到视图或其主视图,或者没有视图引擎支持搜索的位置

    错误如下 未找到视图 LoginRegister 或其主视图 或者没有视图引擎支持搜索的位置 搜索了以下位置 视图 MyAccount LoginRegister aspx 视图 MyAccount LoginRegister ascx 视
  • 当在 gnu 屏幕中使用 vim 或 less 时,退出 vim 或 less 会留下挥之不去的印记

    在我的新 Ubuntu 系统上 我启动一个屏幕会话并在 vim 中编辑文件或在 less 中查看它 退出后 屏幕不会自行重绘 而只是向上滚动以在我刚刚在 vim 或更少中查看的所有内容下显示命令行 我怎样才能改变这个 以便退出 vim 会让
  • jQuery:如何在两个闭合的 html 标签之间选择文本

    我正在尝试使用 jQuery 将介绍 帮助文本包装在 html 文档中 它不在任何标签内 而是在两个闭合的 html 标签之间 例如 请参阅随附的代码片段 第二个结束标签也可以是除 p var txtHelp jQuery b page t
  • Django 缓存错误..即使禁用缓存

    我有一个 Django 网站 其中出现了一个奇怪的错误 在网站上 他们可以添加 出版物 这基本上与不同名称的博客文章相同 当他们修改现有帖子时 事情会变得很奇怪 他们首先在管理员中修改它 当他们访问网站时 更改不可见 就像旧版本被缓存一样
  • 是否可以隐藏系统栏

    我创建了一个启动器 以便在内部应用程序中使用它 出于某些安全原因 我想隐藏系统栏 对参数的访问和对已安装应用程序的访问的排序 但我不知道该怎么做 将使用的平板电脑未root 你能帮我吗 您无法隐藏它 但可以禁用它 但主页除外 为此 您可以将
  • R 中的网页抓取,“...当前工作目录中不存在”错误

    我正在尝试使用 XML2 包从 ESPN com 中抓取一些表格 举例来说 我想将第 7 周的梦幻四分卫排名抓取到 R 中 其 URL 为 http www espn com fantasy football story page 16ra
  • 如果我推送到已删除的分支会发生什么?

    我有一个 git 分支 被gitlab合并删除了 现在 发现了一个错误 我想继续在这个分支上工作 我重命名了它 但它仍然跟踪已删除的分支 它不知道 gitlab 删除了该分支 现在我很好奇 在这种情况下我该怎么办 如果我按原样推进会发生什么
  • 在Java中编码base64并在C#中解码

    我必须将文件发送到我的 Web 服务 但 Web 服务假定该文件 字节数组 为 base64Binary 在编码之前 byteArrayFile 作为常规文件保存在磁盘上 我这样做只是为了测试 因此 在我的 Web 服务 Java 客户端中
  • Bootstrap 中每行超过 12 列

    我将在 bootstrap 3 2 0 中查看每行 12 列 并根据 bootstrap 和这个帖子 https stackoverflow com questions 23535499 bootstrap what will happen
  • 在 HTML 页面“到达”底部之前滚动它

    我有这个聊天话题 它当前所做的是 当它到达页面底部时 它会向上滚动 以便它始终位于页面底部 问题是 正如您在图像中看到的 它在到达页面底部之前隐藏在表单后面 因此 我需要重新定义页面底部的内容 我努力了 function scroll wi