一款简单的Jquery聊天窗口

前端html代码

<div class="chatContainer" id="chatContainer">
	<div class="chatBox" id="chatBox"></div>
	<div class="chatFooter">
		<div class="oporation"><span class="icon emotion" id="emotion"><img src="emotion.png"/></span></div>
		<div class="chatInput">
			<textarea class="message-input" id="messageInput"></textarea>
			<input id="sendMessage" class="send" type="submit" value="发送"/>
		</div>
	</div>
</div>

样式

html,body{margin: 0;height:100%;}
.chatContainer{height:100%;position: relative;background: url(chat_bg.jpg) no-repeat;background-size: cover;}
.chatContainer .chatBox{padding:5px; background: rgba(0,0,0,0.35);overflow-y: auto;position: absolute;top: 0;right: 0;bottom: 85px;left: 0}
.chatContainer .chatBox .item{padding:3px 0px;}
.chatContainer .chatBox .item-title span{color:#3dbfff;font-size:12px}
.chatContainer .chatBox .create-name{;margin-right: 10px}
.chatContainer .chatBox .item-message{color: #f8f8f8;font-size:12px;word-break: break-all;}
.chatContainer .oporation{padding:5px;}
.chatContainer .oporation .icon{width:25px;height:25px;display: inline-block;}
.chatContainer .oporation img{width:25px;height:25px;}
.chatContainer .chatFooter{position: fixed;bottom: 0;left: 0;width: 100%;border-top:1px solid #757f90}
.chatContainer .chatInput{overflow: hidden;}
.chatContainer .message-input{resize:none;height: 50px;width:80%;box-sizing: border-box;float: left;}
.chatContainer .send{width:20%;height: 50px;color: #fff;background:#f80;font-size: 14px;text-align: center;box-sizing: border-box;border:none;}

引入QQ表情样式

<link rel="stylesheet" type="text/css" href="jquery.sinaEmotion.css" />

引入jquery库和QQ表情js文件

<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="jquery.sinaEmotion.js"></script>

javascript

<script type="text/javascript">
$(function (){
	// 绑定表情
	$('#emotion').SinaEmotion($('#messageInput'));

	//正式开发时会监听从服务端发过来的消息
	//监听点击发送按钮事件
	$('#sendMessage').on('click',function(){
		sendMessage();
	});

	//正式开发时先把消息发送到服务器,再向界面追加信息
	function sendMessage(){
		if($("#messageInput").val()!=''){

			addItem("马可波罗",getTime(),AnalyticEmotion(replace_em($('.message-input').val())));
		}else{
			alert("不能发送空白信息");
		}
	}
	
	//判断用户是否拖动过滚动条
	//当对方来消息时,判断滚动条小于可滚动的高度,添加消息之后不要自动滚到底部,
	//否则,添加消息之后自动滚到底部。
	var isScroll=false;
	$('#chatBox').scroll(function(){
		var scrollHeight=$('#chatBox')[0].scrollHeight-$('#chatBox').outerHeight();
		if($('#chatBox').scrollTop()<scrollHeight){
			isScroll=true;
		}else{
			isScroll=false;
		}
	});

	//添加消息
	function addItem(name,time,message) {
		var messageItem='<div class="item"><div class="item-title"><span class="create-name">'+name+'</span><span class="create-time">'+time+'</span></div><div class="item-message">'+message+'</div></div>'
		$('#chatBox').append(messageItem);
		//如果消息的发送人不是我自己,并且我滚动了页面,页面追加消息时不会自动滚动
		if(!(name!="马可波罗" && isScroll)){
			var scrollH=$('#chatBox')[0].scrollHeight;
			$('#chatBox').scrollTop(scrollH);
		}
		$('#messageInput').val('');
		
	}
	
	//html格式转义
	function replace_em(str){
		str = str.replace(/\</g,'<');
		str = str.replace(/\>/g,'>');
		str = str.replace(/\n/g,'<br/>');
		str = str.replace(/\s/g,'  ');
		return str;
	}
	
	//获取本地时间,正式开发的应该使用服务器时间
	function getTime() {
		var today = new Date();
		var y = today.getFullYear();
		var mo = today.getMonth()+1;
		var d = today.getDate();
		var h = today.getHours();
		var m = today.getMinutes();
		var s = today.getSeconds();
		return y + '/' + mo + '/' + d + ' ' + h + ':' + m + ':' + s;
	}
	
	//监听回车事件
	//发送信息用enter,文字内容换行用shift+enter
	jQuery.fn.extend({  
		enter: function(fn){  
			$(this).bind('keydown',function(event){  
				var e = event || window.event;  
				if(!e.ctrlKey &&!e.shiftKey&& e.keyCode ==13){  
				  if(typeof(fn)!='undefined'){  
					  fn.call(this);  
					  //这句话阻止原有的回车换行事件的冒泡执行
					  return false;
				   }  
				}  
			});  
			return this;  
		}  
	});  
	$('#messageInput').enter(function(){
		sendMessage();
	});  
}); 
</script>

下载地址



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery.chatbox 说明文档 特性 1.轻量级动画特效以及友好的界面 2.支持多窗口 3.完善的回调函数以实现自定义功能 4.多种调用方式 4.良好的封装以及扩展性 5.每个聊天窗对象实例以data属性的形式附加在聊天窗DOM对象上(如果你想获得某个特定插件的实例,可以直接从页面元素中获取:$('{boxId}').data('chatbox')) 配置项 配置项分为全局配置项和实例配置项 全局配置项: 参数            类型           默认值                说明 ----------------------------------------------------------------------------------------------- id              number          null                  当前用户的id,也就是发送者的id,必须是唯一值 user            string          null                  发送者的显示名称,可以是昵称用户名等,不要求唯一 debug           boolean         false                 是否打开调试功能 idPrefix        string          'chatbox_'            生成页面DOM元素的id值 实例配置项: 参数            类型           默认值                说明 ----------------------------------------------------------------------------------------------- id              number          null                  接收者的id,同时也会作为实例id,必须是唯一值 user            string          null                  接收者的显示名称,可以是昵称用户名等,不要求唯一 title           string          'Chat with ' {user}   聊天窗的标题 回调函数 回调函数也分为两种,一种是全局回调函数另一种是实例回调函数。 但是有点Javascript基础的开发者应该了解不管是哪种类型的回调函数我们都应该以传递函数引用的方式来调用,而不是对每个实例创建一个函数副本。 这样会造成内存浪费。全局回调函数不会在实例化每个聊天窗对象时重复创建副本分配给每个对象实例,而实例回调函数会。 因此在不需要为每个独立的聊天窗分配不同的回调功能时使用实例回调函数也应该以传递函数引用的方式来分配回调函数以节省内存空间。 回调函数参考: 函数名                  参数       说明 ----------------------------------------------------------------------------------------------- onChatboxCreate                     创建聊天窗时触发 onChatboxEnable                     聊天窗被启用时触发 onChatboxDisable                    聊天窗被禁用时触发 onMessageSend           msg         发送消息时触发,唯一参数:消息内容msg onMessageReceive        msg         收到消息时触发,唯一参数:消息内容msg onMessageSystem         msg         收到系统消息时触发,唯一参数:消息内容msg onChatboxDestroy                    销毁聊天窗时触发 优先级:实例回调函数优先级高于全局回调函数,也就是说实例配置项中的回调函数会覆盖全局配置项中同名的回调函数。 this指针:this指针经由apply或者call方法已经指向调用该方法的实例。 API(属性和方法) 全局API: 属性/方法名       类型       参数          说明 ----------------------------------------------------------------------------------------------- globalOptions     属性        无           保存所有聊天窗的全局配置项 getQueue()        方法        无           返回当前聊天窗的实例队列 实例API: 属性/方法名       类型      参数              说明 ----------------------------------------------------------------------------------------------- $elem             属性        无              保存着当前聊天窗实例的jQuery对象 opts              属性        无              保存着当前聊天窗实例的初始化选项 show()            方法        无              显示聊天窗 hide()            方法        无              隐藏聊天窗 enable()          方法        无              启用聊天窗 disable()         方法        无              禁用聊天窗 message()         方法        msg,type        设置接收到的消息到聊天窗,两个参数:消息内容msg、消息类型type blink()           方法        无              高亮标题栏闪烁提示 destroy()         方法        无              无 调用方式 设定全局配置项: 直接定义配置对象globalOptions,未给定的配置项依旧会使用默认值并不会被该配置对象覆盖 $.chatbox.globalOptions = {     id:10000,     user:'Jason',     debug:true,     onChatboxCreate:function(){         //要执行的代码     } } 或者以附加属性的方式 $.chatbox.globalOptions.id = 10000; $.chatbox.globalOptions.user = 'Jason'; $.chatbox.globalOptions.onChatboxCreate = function(){     //要执行的代码 }; 初始化聊天窗: $.chatbox({     id:11254,     user:'Tony',     title:'Chat with Tony',     onChatboxCreate:function(){         //要执行的代码     } }); 调用API方法: 第一种调用方式 $.chatbox({instanceId}).message({message content}); 第二种调用方式 $({boxId}).data('chatbox').message({message content}); 标签:Chatbox
好的,以下是一个基于jQuery的h5聊天窗口示例: HTML代码: ```html <div class="chat-container"> <div class="chat-header"> <h3>Chat Window</h3> </div> <div class="chat-messages"> <!-- 这里是聊天消息显示区域 --> </div> <div class="chat-input"> <input type="text" placeholder="Type your message..."> <button>Send</button> </div> </div> ``` CSS样式: ```css .chat-container { width: 400px; height: 500px; border: 1px solid #ccc; margin: 20px auto; padding: 10px; } .chat-header { text-align: center; margin-bottom: 10px; } .chat-messages { height: 350px; overflow-y: scroll; padding: 5px; } .chat-message { margin-bottom: 10px; } .chat-message p { padding: 5px; background-color: #f2f2f2; border-radius: 5px; display: inline-block; } .chat-input { display: flex; } .chat-input input { flex-grow: 1; padding: 5px; border-radius: 5px; border: none; margin-right: 10px; } .chat-input button { background-color: #4CAF50; color: white; border: none; border-radius: 5px; padding: 5px 10px; cursor: pointer; } ``` JavaScript代码: ```javascript $(function() { var socket = io(); // 连接socket.io服务器 // 发送消息 $('button').click(function() { var message = $('input').val(); if (message !== '') { socket.emit('chat message', message); $('input').val(''); } }); // 接收消息 socket.on('chat message', function(msg) { $('.chat-messages').append($('<div class="chat-message">').html('<p>' + msg + '</p>')); $('.chat-messages').scrollTop($('.chat-messages')[0].scrollHeight); }); }); ``` 需要注意的是,这个示例依赖于socket.io库,所以需要先在HTML文件中引入socket.io库: ```html <script src="/socket.io/socket.io.js"></script> ``` 同时,还需要在服务器端实现socket.io的相关逻辑,这里不再赘述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值