这段时间再写一个聊天的功能,基本的原理已经通了,剩下的就是细化功能和实现了。原理通了不代表就能解决了这个问题,今天就遇到了一个小问题,就是在接收到新的消息以后,最新的消息不能显示在消息区域,而是跑到了最下面,需要手动划出来。这样的体验肯定是不行的,所以我们就在网上查找解决办法,有的使用js计算高度,然后页面滚动,这种方法虽然比较麻烦,但是确实能解决问题。但是今天又找到了一个更好的办法,就是利用scrollIntoView方法来实现。

  首先说一下注意事项,scrollIntoView这个方法首先的一点是原生的js 的方法,所以就不能使用jQuery选择器来选择元素,否则就要报错了。看下面的截图:

  所以我们就需要使用原生的选择器,来选择,其中document.querySelectorAll()就是一个很好的选择方法。还有就是,scrollIntoView()这个方法中是可以传参的,默认的参数是true。也就是说会把你选择的元素的顶部显示在你浏览器或者滚动区域的顶部。也就是头与头对齐。如果你传false的话,就是正好相反的,就是选择元素的底部显示在浏览器或者滚动区域的底部,也就是底与底对齐。废话不多说,直接看程序吧。

  

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>模仿聊天室滚动的方法</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#center{
width: 500px;
height: 600px;
border: 1px solid #CCCCCC;
overflow-y: scroll;
}
#center p{
width: 400px;
height: 100px;
border: 1px solid #CD235C;
}
#center p:nth-of-type(2n){
background: #CCCCCC;
}
</style>
</head>
<body>
<h1>利用scrollintoview方法来模仿聊天室滚动</h1>
<h2>利用button按钮来触发,模拟收到一条消息</h2>
<div id="center">
<p>叮叮叮,收到了0条新消息</p>
</div>
<button>收到一个信息</button>
</body>
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
$("button").click(function(){
console.log("点击了按钮");
var length = $("#center p").length;
$("<p>叮叮叮,收到了"+length+"条新消息</p>").appendTo($("#center"));
document.querySelectorAll("p")[length].scrollIntoView(false);
//$("p").scrollIntoView(false);//报错,不能使用jQuery的选择器
});
</script>
</html>

  利用下面的按钮来模拟接收到了新的消息,然后选择到最后的那个p标签,让他的底部与聊天窗口的底部对齐。就实现了这个功能!有什么不对的地方,欢迎讨论

利用scrollintoview方法模拟聊天室收到新消息的更多相关文章

  1. python tornado websocket 多聊天室(返回消息给部分连接者)

    python tornado 构建多个聊天室, 多个聊天室之间相互独立, 实现服务器端将消息返回给相应的部分客户端! chatHome.py // 服务器端, 渲染主页 --> 聊天室建立web ...

  2. 利用netty简单实现聊天室

    1.导入依赖包 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</a ...

  3. 基于Server-Sent Event的简单在线聊天室

    Web即时通信 所谓Web即时通信,就是说我们可以通过一种机制在网页上立即通知用户一件事情的发生,是不需要用户刷新网页的.Web即时通信的用途有很多,比如实时聊天,即时推送等.如当我们在登陆浏览知乎时 ...

  4. 网络编程(学习整理)---2--(Udp)实现简单的控制台聊天室

    1.UDP协议: 总结一下,今天学习的一点知识点! UDP也是一种通信协议,常被用来与TCP协议作比较!我们知道,在发送数据包的时候使用TCP协议比UDP协议安全,那么到底安全在哪里呢?怎么理解呢! ...

  5. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

  6. 基于Tomcat7、Java、WebSocket的服务器推送聊天室

    http://blog.csdn.net/leecho571/article/details/9707497 http://blog.fens.me/java-websocket-intro/ jav ...

  7. SignalR 聊天室实例详解(服务器端推送版)

    翻译自:http://www.codeproject.com/Articles/562023/Asp-Net-SignalR-Chat-Room  (在这里可以下载到实例的源码) Asp.Net Si ...

  8. 使用Android网络编程实现简易聊天室

    在Java中我们可以利用socket编程实现聊天室,在Android中也一样,因为Android完全支持JDK本身的TCP.UDP网络通信API.我们可以使用ServerSocket.Socket来建 ...

  9. Asp.Net SignalR - 简单聊天室实现

    简单聊天室 使用持久链接类我们就可以做一些即时通讯的应用了,我使用Group做了一个简单的聊天室,先上图技术细节下面再讲 可以加入聊天室.创建聊天室.发送消息,下面就说说我是如何通过Group做出来的 ...

随机推荐

  1. 微信报错 config:fail.Error:invalid signature

    config:fail.Error:invalid signature 微信公众号报这个错,appid等各项都配置好,经过一番折腾,发现原来ip白明单设置了不是该服务器的ID,重新设置后就可以了

  2. win10常用详细快捷键大全

    • 贴靠窗口:Win +左/右> Win +上/下>窗口可以变为1/4大小放置在屏幕4个角落• 切换窗口:Alt + Tab(不是新的,但任务切换界面改进)• 任务视图:Win + Tab ...

  3. Data Center手册(1):架构

    如图是数据中心的一个基本架构 最上层是Internet Edge,也叫Edge Router,也叫Border Router,它提供数据中心与Internet的连接. 连接多个网络供应商来提供冗余可靠 ...

  4. .NET Core的依赖注入[1]: 控制反转

    写在前面:我之前写过一系列关于.NET Core依赖注入的文章,由于.NET Core依赖注入框架的实现原理发生了很大的改变,加上我对包括IoC和DI这些理论层面的东西又有了一些新的理解,所以我在此基 ...

  5. 【安富莱】【RL-TCPnet网络教程】第8章 RL-TCPnet网络协议栈移植(RTX)

    第8章        RL-TCPnet网络协议栈移植(RTX) 本章教程为大家讲解RL-TCPnet网络协议栈的RTX操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要 ...

  6. [Swift]LeetCode493. 翻转对 | Reverse Pairs

    Given an array nums, we call (i, j) an important reverse pair if i < j and nums[i] > 2*nums[j] ...

  7. [Swift]LeetCode706. 设计哈希映射 | Design HashMap

    Design a HashMap without using any built-in hash table libraries. To be specific, your design should ...

  8. Java IO流读取文件

    使用指定编码读取文件 public static String toString(File file, String charset){ StringBuilder result = new Stri ...

  9. Python内置函数(20)——exec

    英文文档: exec(object[, globals[, locals]]) This function supports dynamic execution of Python code. obj ...

  10. 7.Ajax

    优先级 如果发送的是[普通数据] jQuery XMLHttpRequest iframe 如果发送的是[文件] iframe jQuery(FormData) XMLHttpRequest(Form ...