使用iframe或可滚动的div可以使聊天窗口可滚动的建议方法是什么?这两种技术的优点和缺点是什么?您会选择哪个以及为什么? 谢谢
答案 0 :(得分:8)
您可以创建一个脚本,将聊天嵌入第三方网站,同时创建<div>
或<iframe>
iframe
强>
DIV
强>
%
创建一个流畅的聊天应用。这样你的应用程序将适合每个容器,如果它是一个流畅的页面...更多的爱你。 所以,即使我亲自选择<div>
,也完全符合您的需求。
<强> See it in action here 强>
<强> HTML 强>:
<div class="chat">
<div class="messages">
<div>Old message</div>
</div>
<textarea></textarea>
<button>Post</button>
</div>
BASIC CSS(演示链接中的CSS更多):
.chat{
position:relative;
margin:0 auto;
width:300px;
overflow:hidden;
}
.chat .messages{
width:100%;
height:300px;
overflow:hidden;
}
.chat .messages:hover{
overflow-y:scroll;
}
.chat .messages > div{
padding:15px;
border-bottom:1px dashed #999;
}
<强>的jQuery 强>:
var $chat = $('.chat'),
$printer = $('.messages', $chat),
$textArea = $('textarea', $chat),
$postBtn = $('button', $chat),
printerH = $printer.innerHeight(),
preventNewScroll = false;
//// SCROLL BOTTOM
function scrollBottom(){
if(!preventNewScroll){ // if mouse is not over printer
$printer.stop().animate( {scrollTop: $printer[0].scrollHeight - printerH }, 600); // SET SCROLLER TO BOTTOM
}
}
scrollBottom(); // DO IMMEDIATELY
function postMessage(e){
// on Post click or 'enter' but allow new lines using shift+enter
if(e.type=='click' || (e.which==13 && !e.shiftKey)){
e.preventDefault();
var msg = $textArea.val(); // not empty / space
if($.trim(msg)){
$printer.append('<div>'+ msg.replace(/\n/g,'<br>') +'</div>');
$textArea[0].value=''; // CLEAR TEXTAREA
scrollBottom(); // DO ON POST
// HERE Use AJAX to post msg to PHP
}
}
}
//// PREVENT SCROLL TO BOTTOM WHILE READING OLD MESSAGES
$printer.hover(function( e ) {
preventNewScroll = e.type=='mouseenter' ? true : false ;
if(!preventNewScroll){ scrollBottom(); } // On mouseleave go to bottom
});
$postBtn.click(postMessage);
$textArea.keyup(postMessage);
//// TEST ONLY - SIMULATE NEW MESSAGES
var i = 0;
intv = setInterval(function(){
$printer.append("<div>Message ... "+ (++i) +"</div>");
scrollBottom(); // DO ON NEW MESSAGE (AJAX)
},2000);
答案 1 :(得分:3)
我自己总是会为聊天应用程序找一个div,为什么?
这是基本的好处。您可以处理div上的事件,使用iframe无法处理。您可以亲自尝试,尝试处理iframe中的click
,mouseover
事件,您将无法获得任何结果。
$('div').click(function () {
alert('Div was clicked!');
}
虽然iframe不允许您访问子元素的事件。
虽然div会向父级或甚至js提供每个事件,以便根据需要处理和编码。对于iframe,你需要处理iframe中的事件,比如说iframe加载的页面,它的事件都在用于创建iframe的代码中。
$('iframe').click(function () {
// code..this will execute when click is on iframe, not for a child
}
但你不能做某事
$('iframe html body div').click(function () {
/* techniques for iframes are different and harder as
* compared to ones used for div, to get a child event
*/
})
但div中的元素可以嵌入到您的网页中。您可以随时更改其子元素或父元素。因此,如果您可以处理所有元素事件,聊天应用程序会更好。
<div>
Some text
</div>
的jQuery
$('div').on('event', function () { // on an event..
// so on, adding more and more event handlers and blah blah
})
在div中,您可以使用ajax请求更新内容,然后将其添加到div中,您还可以使用jQuery API滚动它。无论页面大小多少,您都可以使用%
或确切位置滚动到的位置。所以div更简单。
$('div').load('chat_page.php'); // load a page in the div
或者只是使用
更新它$.ajax({ // create ajax request
url: 'chat_message', // url
success: function (resp) { // if OK
$('div').html(resp); // update the page
}
});
iframe通常用于让其他人使用您的功能,例如在第三方网站中嵌入聊天应用程序,您无需在其中编辑或重复使用代码。所以你给他们一个iframe和一个链接。
我不理解骂人的事! :(对不起,我想我会写出模糊的答案,所以我会让那部分去,但这是你可以滚动元素
$('div').scrollTo(10); // scroll 10px down..
(你在评论中要求浏览器支持)但是,jQuery支持跨浏览器和跨平台。剩下的部分是HTML,它随处可见!
http://jquery.com/browser-support/以下是了解浏览器支持的链接
答案 2 :(得分:1)
我更喜欢使用div,因为您可以轻松管理它的所有内容,并且使用较少的数据下载服务器更容易刷新。只是个人意见。
PROS或DIV包含较少的数据,随时随地插入,以及在页面上需要时轻松将数据用于其他任务的能力。
IFRAME的优点更易于设置和编码,并且更容易使其独立。
iframe的缺点,并且更难以访问其中的数据并且需要更多代码来执行此操作(如果需要)并且div的缺点是使得所有css和代码正确且就地为div及其父项及其子项以使其流动正确而且很好。