模拟聊天对话框

时间:2024-03-08 19:47:26

利用原生JS里的事件对象我们可以来模拟下聊天软件的对话框效果如下:

CSS:

	*{
				margin: 0;
				padding: 0;
				font-size: 16px;
				font-family: "微软雅黑";
				
			}
			li{
				list-style: none;
			}
			.main{
				width: 800px;
				height:600px ;
				margin: 50px auto;
				border: 4px solid #B6B6B6;
				border-radius: 10px;
			    
			}
			
			#box{
				margin: 10px;
				border: 1px dotted #ccc ;
				border-radius: 10px;
				height: 400px;
				overflow-y: scroll;
			}
			
			.leftword{
				float: left;
				background: yellowgreen;
				margin: 10px;
				border-radius: 6px;
				padding: 6px;
				
			}
			#box span{
				width: 15px;
				height: 15px;
				display: inline-block;
				background: red;
				border-radius: 50%;
				float: left;
				margin: 6px;
				
			}
			
			
			.rightword{
				float: right;
				background: lightskyblue;
				margin: 10px;
				border-radius: 6px;
				padding: 6px;
				max-width: 400px;
				word-break: break-all;
                white-space: pre-wrap;
			}
			
			#txt{
				margin-left: 20px;
				width: 750px;
				height: 120px;
				overflow-y: scroll;
				border-radius: 6px;
			}
			#btn{
				width: 80px;
				height: 30px;
				text-align: center;
				float: right;
				margin-right: 20px;
				margin-top: 10px;
				
				
			}

  HTML:

	<div class="main">
			<ul id="box">
				<li class="leftword">你好!</li>
				<div style="clear:both"></div>
				<li class="leftword">天王盖地虎</li>
				<div style="clear:both"></div>
				<li class="rightword">你好!</li>
				<div style="clear:both"></div>
				<li class="rightword">宝塔镇河妖</li>
				<div style="clear:both"></div>
				<li class="leftword">脸怎么红了</li>
				<div style="clear:both"></div>
				<li class="rightword">防冷涂的蜡</li>
				<div style="clear:both"></div>
				
				
			</ul>
			<textarea id="txt"></textarea>
			<button id="btn">发送</button>
			
			
		</div>

  js以及注释如下:

<script>
//查找dom元素分别为输入框的,发送按钮,聊天窗口的dom元素
	var txt=document.getElementById("txt");
	var btn=document.getElementById("btn")
	var box=document.getElementById("box");
	//给发送按钮添加事件
	btn.onclick=function(){
		//获取自己说的话,并克隆一个,注意只要外壳不要内容
		var oli=document.querySelector(".rightword").cloneNode()
		//克隆一个空div它是用来清除左右浮动让每一句会话单独在一行
		var odiv=document.querySelector("#box>div").cloneNode();
		//获取输入框的内容并且去除前后空格
		var txtval=txt.value.trim();
		//判断如果输入框内容不为空才进行下一步操作,否则发送不了,也就是不能发送空的盒子
		if(txtval!==""){
		//将输入框内容插入之前获取的空壳里去
		oli.innerHTML=txtval;
		//将这个新的元素和我们清除浮动的div分别插入聊天框去
		box.appendChild(oli);
		box.appendChild(odiv);
		//点击发送然后让输入框内容清空
		txt.value="";
		//让我们添加的那一句会话始终在可视范围,否则输入越多的会话会被聊天框的下部挡住
		oli.scrollIntoView()
		}
		
	
	}
	
	//点击发送按钮的功能已经完成接下来再添加ctrl+enter发送的功能
	//给输入框添加键盘事件,这里我们可以直接调用上面的事件函数
	txt.onkeydown=function(e){
		var e=e||event;
		var code=e.keyCode||e.which;
		/
		if(code==13&&e.ctrlKey){
			//直接调用
		btn.onclick()
		}
		
	}
	
	
</script>