近来一直在做微信开发,涉及的东西很多,但是思路基本是从微信接口拿数据这样一个流程。在开发过程中,顺便写了一个聊天页面。个人感觉还不错,所以把其中遇到的几个知识点分享给大家。 整体的界面就是上面的样子,排版方面的知识就不多说了,毕竟我也不是做前端的,而且很多样式都是直接从官网拿过来。还是主要说一说流程逻辑方面的知识。其实并没有太深的学问,只要有基础的Js,循环,判断语句就可以了。我主要想表达的还是实战思路。接下来我先把问题抛出来,如果已经想到了很好的方法大可不必再浪费时间看下去了。 1,中框部分的聊天记录显示问题(各部分均为独立iframe框架) 难点:因为显示的条数受限,假设只显示最近5条,那么应该是用时间倒序获取5条数据,这样能实现最近5条数据,但是显示结果会是自上而下从晚到早。相反,如果按照时间顺序提取5条,那么显示顺序没问题,可是获取的5条数据却不是最近的而是最早的。 2,与第1点同步的会出现每条发送信息的时间,但是每条数据后面跟着一串‘2017-01-20 15:30:23’肯定会很难看。理想的效果是,短时间内(例如半小时内)就显示一次发送时间,当天聊天记录就只显示时分秒,今天以前的聊天就显示年月日时分秒。如果判断是否当天还好说,可是判断是否距离上一条记录(严格来说是上一条显示时间的记录)半小时以内就要动动脑筋了。 3,中框的聊天信息展示肯定要随时更新的,如果你发送一条信息用post提交,相当于刷新一次页面还好理解。但是如果是收到一条信息又怎么能即时刷新呢。 4,倘若中框的聊天记录有10条,窗口大小只能显示5条,怎么能让它显示到最底部一条信息。当然,你可以只让它获取到最近5条数据,但是如果某一条数据内容特别长,还是会出现滚动条,还是不是显示页面底部。 5,发送信息采用ctrl+enter发送,因为如果只按enter发送,就不能换行了。网上可以搜到相关代码,但是很有可能出现ctrl+enter键按下时,打开新的窗口。所以我在下面会放上测试好的代码。 6,当聊天页面处于关闭状态,收到新信息会有消息提醒。这一点比较容易就不说了。另外一种情况,你在聊天页面与某一个好友聊天时,另一个或多个好友来消息时,也需要在对应的头像和分组菜单有消息提醒。 7,发送消息方式一般采用post提交,提交后页面刷新也能获取到最新消息。但是如果提交信息用的是其它接口(比如用微信公众号发送),就会首先获取到接口返回的数据后才能算发送成功,才能进行写入数据库或其它操作。在这个过程可能会3到5秒,体验效果就会变差。所以建议采用ajax异步提交,并且提交后利用Js显示到聊天主窗口(发送中状态),当收到ajax发送成功的反馈时刷新页面,否则提示发送失败。 针对以上的问题,在下面一一解答或者直接粘贴代码。 问题一思路:把获取到的最近5条信息遍历出来,逆序赋值给一个变量,然后把这个变量当成html元素放到页面。 $res= mysql_query("select * from msg where sid= 23 and user=23 order bycreat_time limit 0,5");//从数据库获取最近5条数据 $str= ‘’;//声明变量 While($rows = mysql_fetch_array($res)) { $str = "{$rows[‘name’]} {$rows[‘con’]} ".$str; } Html 部分 {$str} 问题二思路:是否当天可以用拿到的时间与当天日期进行比较(如果字段有时分秒可以截取前10位),判断是否与上一条显示时间相隔半小时,就需要先声明一个时间变量,当每次需要显示时间时就赋值一次。 这里还有一个问题,因为显示时第一条信息是5条里面最早的,最后一条是最近的,然后获取数据的顺序正好相反。所以判断时间是否相隔半小时,是拿到的一条时间与下一条时间做比较。这当然是不可能的。那么我想到的方法先把获取的数据赋值给数组,再用数据遍历输出。 问题三思路:在里加入一行代码让这个页面每5秒刷新一次。这当然是个方法,只是不太好。原因很简单,页面会不断的闪动也会占用服务器承载量。所以建议用ajax获取是否有新消息,如果有,则启动刷新。 functionget_msg(){ var str = ""; $.get("./ajax/ajax_wechat_new_list.php?uid="+uid+"&mid="+mid,function(data,status){ if(data>0){ window.location.reload(); } }); setTimeout(function(){ get_msg(); },3000) } get_msg(); 问题四思路:这个问题是个很实用的问题,曾很困扰。我尝试用模拟点击事件,自动运行js效果都不太好。其实最简单的方法是在页面末端加一个全局选择器,例如id. 然后在url地址尾处加一个#go_foot,,,倘若不好用的话,再设置瞄点模拟点击。 document.getElementById("go_foot").click(); 问题五思路: $("#sms_content").keyup(function(event){ if(event.ctrlKey && event.which ==13) //13等于回车键(Enter)键值,ctrlKey 等于 Ctrl { $("#send").trigger("click"); } }); 备注:其中‘sms_content’是input提交标签的Id, keyup(松开按键)可以改为keydown(按下键盘),但是会出现打开新窗口的情况。 问题六思路:预先给每个好友设置好提醒的html元素(id名需要与该好友的id相关联以便查找),并处理隐藏状态。当用ajax获取到该好友的新消息时,则找到对应标签变为显示状态。 functionget_msg(){ var str = ""; $.get("./ajax/ajax_wechat_notice1.php?uid="+uid+"&show="+show,function(data,status){ if(data!=0){ varmsg = eval("("+data+")"); for(vari=0;i
小身材大能量!MOMAX100W氮化镓充电器体验Hi大家好,我是三重奏记得,最早在2019年的时候,市面上就出现了以新型半导体材料GaN(氮化镓),作为元件的快充产品,其充电功率直接飙升到60W,65W。要知道当时新发布的苹果1小个头大能量,AOHi65W氮化镓充电头体验Hi大家好,我是三重奏自苹果以环保名义取消附属充电头之后,相信很多人又气又恨。但是也不难发现,正是苹果的这个骚操作,给各大充电器品牌厂商带来了春天。目前市面上可选择的三方充电头越来韩国财阀不可战胜?三星太子李在镕抓了又放,连总统都不得不低头其实经常看韩国电视剧的粉丝,特别是爱看爱情片的人应该都对韩国财阀有着深刻的印象,在影视中韩国的财阀几乎都有着统一的爽朗外表,以及一颗玛丽苏的心。但在部分韩国媒体的笔下,韩国财阀却成女生为什么要侧着坐车?正着坐不是更安全吗?看完涨知识了不知道大家在骑行自行车摩托车电动车时有没有发现这样一个现象,那就是女生坐二轮交通工具时,往往选择侧着坐,而不是正着坐,正着坐不是更安全吗?相信直男是不会明白的,看完就会涨知识!优雅电子眼为罚而罚,一年抓拍60多万次违章,车主何时取消?汽车数量的增多,让交警的任务更重了,尽管有交规的限制,但是依旧有车主选择不遵守,这就需要交警来约束了,幸好电子警察出现了,在缓解交警压力的同时,也不会放过一个违章行为。交通规则的制头盔刚戴好,新禁令又出台?车主步行上班算了电动车发展迎来了寒冬,当然这是对于生产厂家而言的处境,就拿消费者来说,反而是有利的,尤其是一车一票出台之后,消费者在购买电动车后的维权变得简单。当然,随着新国标出台之后,一些著名的这类电动车将不能上路,查到会扣车罚款,月底开始实施如今,交通工具行业百花齐放,各种各样的出行工具占据了人们的生活,很多人就算是出门遛弯都会选择骑行,这并不是因为人们懒了,而是人们的生活方式得到了完全的改变。要问哪种交通工具最受人们在农村,一辆废旧摩托车可以卖到200多元,收购它干什么用呢?在经济发展的前期,人们外出基本依靠步行,这时候生活水平还没法得到保障,更不用说购买出行工具了,随着生活水平的提高,自行车进入了千家万户,当时结婚嫁妆里,自行车是大件。就在自行车占据女人说的这些话千万不能相信下第二十一句你给我一段时间考虑(不给我时间,我怎么溜啊)第二十二句你的条件真的很好(可是还没好到我想要的地步)第二十三句可是这样的感觉好怪(你这丑八怪,怪到这样还想吃天鹅肉?)第二十下载神器IDM的安装与使用,分分钟教你满速下载IDM(IntegratedDataMultiplexer)是一款国外的优秀下载工具,该软件提升你的下载速度最多达5倍,具有动态档案分割多重下载点技术,而且它会重复使用现有的联机,让女人超感动的100句温柔浪漫语下89。妳就是我最困难时的那位永远支持我的人!90。妳可知我百年的孤寂只为妳一人守候千夜的恋歌只为妳一人而唱91。白昼与黑夜将无法阻挡我俩的深深思念!92。我是那深深的大海,妳是那自