msn.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531
  1. var page=1; //分页
  2. var moban_time=0; //全局时间戳
  3. var bq_h=".png"; //表情格式后缀
  4. var load_over = false; //是否加载完聊天记录
  5. /******************全局方法*********************/
  6. //提示框弹出
  7. function ts(html){
  8. //获取垂直居中的px
  9. $(".prompt p").html(html)
  10. $(".prompt").fadeIn();
  11. }
  12. //提示框关闭
  13. function ts_no(){
  14. $(".prompt").fadeOut();
  15. }
  16. //ajax获取当前指定页聊天记录
  17. function ajax_get_list(page){
  18. ts("正在拉取<b>"+to_unickname+"</b>的记录");
  19. var query = new Object();
  20. query.uid = uid;
  21. query.to_uid = to_uid;
  22. query.page = page;
  23. query.mer_id = mer_id;
  24. $.ajax({
  25. type:"post",
  26. url:"/wap/auth_api/get_msn",
  27. data:query,
  28. dataType:"json",
  29. async:true,
  30. success: function(data){
  31. if(data.code == 200 && data.data.length > 0){
  32. //取原高度
  33. jili=$(".kj").height();
  34. html = moban_msn(data.data);
  35. $(".duihua").prepend(html);
  36. //更新滚动距离
  37. conter(jili);
  38. }else{
  39. load_over = true;
  40. }
  41. //关闭提示框
  42. ts_no();
  43. }
  44. });
  45. }
  46. //发送添加消息
  47. function add_msn(msn,type){
  48. var query = new Object();
  49. query.uid = uid;
  50. query.to_uid = to_uid;
  51. query.msn = msn;
  52. query.type = type;
  53. query.mer_id = mer_id;
  54. $.ajax({
  55. type:"post",
  56. url:"/wap/auth_api/add_msn",
  57. data:query,
  58. dataType:"json",
  59. async:true,
  60. success: function(data){
  61. //合成我的消息
  62. if(type == "html")
  63. json_msn(msn);
  64. else
  65. json_msn($('<div>').text(msn).html());
  66. }
  67. });
  68. }
  69. //页面刷新消息显示
  70. function refresh_msn(){
  71. var query = new Object();
  72. query.uid = uid;
  73. query.to_uid = to_uid;
  74. query.mer_id = mer_id;
  75. $.ajax({
  76. type:"post",
  77. url:"/wap/auth_api/refresh_msn",
  78. data:query,
  79. dataType:"json",
  80. async:true,
  81. success: function(data){
  82. if(data.code == 200 && data.data.length > 0){
  83. html = moban_msn(data.data);
  84. $(".duihua").append(html);
  85. bottom();
  86. }
  87. }
  88. });
  89. }
  90. //聊天显示时间处理
  91. function timedate(sdate,type){
  92. //取今天0点时间戳
  93. today = new Date();
  94. today.setHours(0);
  95. today.setMinutes(0);
  96. today.setSeconds(0);
  97. today.setMilliseconds(0);
  98. today=Date.parse(today);
  99. //时间戳计算
  100. var oneday = 1000 * 60 * 60 * 24;
  101. //取昨天0点
  102. tooday=today-oneday;
  103. //取前天0点
  104. toooday=today-oneday*2;
  105. //取7天0点
  106. tooooday=today-oneday*7;
  107. //js的时间戳和php的时间戳少4位
  108. sdate=parseInt(sdate)*1000;
  109. d=new Date(sdate);
  110. if(sdate > today){//判断是否在今天内
  111. res = moment(d).format('ah:mm');
  112. }
  113. if(sdate < today){//判断是否是昨天
  114. res = moment(d).format('昨天 ah:mm');
  115. if(type == 1)
  116. res="昨天";
  117. }
  118. if(sdate < tooday){//判断是否昨天前 显示前天
  119. res = moment(d).format('前天 ah:mm');
  120. if(type == 1)
  121. res="前天";
  122. }
  123. if(sdate < toooday){//判断是否前天前 显示星期
  124. res = moment(d).format('dddd ah:mm');
  125. if(type == 1)
  126. res=moment(d).format('dddd');
  127. }
  128. if(sdate < tooooday){//判断是否7天前
  129. res = moment(d).format('YYYY年M月D日 ah:mm');
  130. if(type == 1)
  131. res=moment(d).format('YY/M/D');
  132. }
  133. res =res.replace("am", "上午");
  134. res =res.replace("pm", "下午");
  135. res =res.replace("Sunday", "星期天");
  136. res =res.replace("Saturday", "星期六");
  137. res =res.replace("Monday", "星期一");
  138. res =res.replace("Tuesday", "星期二");
  139. res =res.replace("Wednesday", "星期三");
  140. res =res.replace("Thursday", "星期四");
  141. res =res.replace("Friday", "星期五");
  142. return res;
  143. }
  144. /******************全局方法*********************/
  145. //点击发送消息
  146. function msn_add(){
  147. if($("#msn").val() != ""){
  148. //取消息
  149. msn=$("#msn").val();
  150. //编辑框清空
  151. $("#msn").val("");
  152. //添加信息
  153. add_msn(msn,"auto");
  154. }
  155. }
  156. //合成我的消息json
  157. function json_msn(msn){
  158. msn=msn.replace(/(^\s*)|(\s*$)/g,"");
  159. if(msn !== ""){
  160. var obj = new Object();
  161. obj.my = "my";
  162. obj.msn = msn;
  163. obj.add_time = moment().format('X');
  164. data = "["+JSON.stringify(obj)+"]";
  165. // data='[{"my":"my","msn":"'+msn+'","add_time":"'+moment().format('X')+'"}]';
  166. html = moban_msn(JSON.parse(data));
  167. $(".duihua").append(html);
  168. bottom();
  169. }
  170. }
  171. //表情替换模版
  172. function moban_bq(name){
  173. jc=0;
  174. var moj = new Array();
  175. moj['阿'] = 1;
  176. moj['唉'] = 2;
  177. moj['拜拜'] = 3;
  178. moj['板砖拍你'] = 4;
  179. moj['暴走'] = 5;
  180. moj['悲伤'] = 6;
  181. moj['鼻出血'] = 7;
  182. moj['别逼我'] = 8;
  183. moj['不高兴'] = 9;
  184. moj['崇拜'] = 10;
  185. moj['出发'] = 11;
  186. moj['打你'] = 12;
  187. moj['打肿'] = 13 ;
  188. moj['大哭'] = 14 ;
  189. moj['大喷血'] = 15;
  190. moj['大笑'] =16 ;
  191. moj['发呆'] =17 ;
  192. moj['愤怒'] = 18;
  193. moj['感觉真好'] = 19;
  194. moj['哈哈'] = 20;
  195. moj['害羞'] = 21;
  196. moj['好困'] = 22;
  197. moj['好冷'] = 23;
  198. moj['好美'] =24 ;
  199. moj['好色'] = 25;
  200. moj['黑客'] =26 ;
  201. moj['怀疑'] =27 ;
  202. moj['坏淫'] =28 ;
  203. moj['惊讶'] = 29;
  204. moj['可爱'] = 30;
  205. moj['可怜'] =31 ;
  206. moj['老大'] =32 ;
  207. moj['流口水'] = 33;
  208. moj['妈呀'] =34 ;
  209. moj['你懂得'] =35 ;
  210. moj['牛B'] = 36;
  211. moj['亲亲'] =37 ;
  212. moj['确定'] = 38;
  213. moj['塞饭'] = 39;
  214. moj['神阿'] = 40;
  215. moj['生气'] =41 ;
  216. moj['受伤'] = 42;
  217. moj['说唱'] = 43;
  218. moj['偷看'] =44 ;
  219. moj['投降'] =45 ;
  220. moj['无奈'] = 46;
  221. moj['咽气'] =47 ;
  222. moj['郁闷'] =48 ;
  223. moj['找炮轰'] = 49;
  224. moj[ '真臭'] =50;
  225. moj['蜘蛛侠'] = 51;
  226. moj['自信'] = 52;
  227. moj['做梦'] = 53;
  228. while(jc==0){
  229. shou=name.indexOf("[");
  230. wei=name.indexOf("]");
  231. if(shou > -1 && wei > -1){
  232. temp=name.substring(shou,wei+1);
  233. bq_name=temp.replace("[", "");
  234. bq_name=bq_name.replace("]", "");
  235. html='<img class="express" src="'+bq_m+moj[bq_name]+bq_h+'" title="'+bq_name+'" >';
  236. name=name.replace(temp,html);
  237. }else{
  238. jc=1;
  239. }
  240. }
  241. return name;
  242. }
  243. //对话窗口模版
  244. function moban_duihua(){
  245. if(mer_id > 0)
  246. $(".kj").html('<div class="duihua" style="padding-top: 45px;"></div>');
  247. else
  248. $(".kj").html('<div class="duihua"></div>');
  249. var html= '<div class="msn">'+
  250. '<div class="msn_k">'+
  251. '<i class="express_icon"></i>'+
  252. '<i class="img_icon"></i>'+
  253. '<b onclick="msn_add()">发送</b>'+
  254. '<span>'+
  255. '<input type="text" id="msn" placeholder="请输入要发送的消息">'+
  256. '</span>'+
  257. '</div>'+
  258. '<div class="biaoqing">'+
  259. '<ul>'+
  260. '<li>'+
  261. '<span>'+
  262. '<div>'+moban_bq("[大笑]")+'</div>'+
  263. '<div>'+moban_bq("[哈哈]")+'</div>'+
  264. '<div>'+moban_bq("[感觉真好]")+'</div>'+
  265. '<div>'+moban_bq("[拜拜]")+'</div>'+
  266. '<div>'+moban_bq("[害羞]")+'</div>'+
  267. '<div>'+moban_bq("[亲亲]")+'</div>'+
  268. '<div>'+moban_bq("[可爱]")+'</div>'+
  269. '<div>'+moban_bq("[阿]")+'</div>'+
  270. '<div>'+moban_bq("[唉]")+'</div>'+
  271. '<div>'+moban_bq("[悲伤]")+'</div>'+
  272. '<div>'+moban_bq("[鼻出血]")+'</div>'+
  273. '<div>'+moban_bq("[别逼我]")+'</div>'+
  274. '<div>'+moban_bq("[不高兴]")+'</div>'+
  275. '<div>'+moban_bq("[崇拜]")+'</div>'+
  276. '<div>'+moban_bq("[出发]")+'</div>'+
  277. '<div>'+moban_bq("[打你]")+'</div>'+
  278. '<div>'+moban_bq("[打肿]")+'</div>'+
  279. '<div>'+moban_bq("[大哭]")+'</div>'+
  280. '<div>'+moban_bq("[大喷血]")+'</div>'+
  281. '<div>'+moban_bq("[发呆]")+'</div>'+
  282. '<div>'+moban_bq("[愤怒]")+'</div>'+
  283. '</span>'+
  284. '</li>'+
  285. '<li>'+
  286. '<span>'+
  287. '<div>'+moban_bq("[好困]")+'</div>'+
  288. '<div>'+moban_bq("[好冷]")+'</div>'+
  289. '<div>'+moban_bq("[好美]")+'</div>'+
  290. '<div>'+moban_bq("[好色]")+'</div>'+
  291. '<div>'+moban_bq("[黑客]")+'</div>'+
  292. '<div>'+moban_bq("[怀疑]")+'</div>'+
  293. '<div>'+moban_bq("[坏淫]")+'</div>'+
  294. '<div>'+moban_bq("[惊讶]")+'</div>'+
  295. '<div>'+moban_bq("[可怜]")+'</div>'+
  296. '<div>'+moban_bq("[老大]")+'</div>'+
  297. '<div>'+moban_bq("[流口水]")+'</div>'+
  298. '<div>'+moban_bq("[妈呀]")+'</div>'+
  299. '<div>'+moban_bq("[你懂得]")+'</div>'+
  300. '<div>'+moban_bq("[牛B]")+'</div>'+
  301. '<div>'+moban_bq("[确定]")+'</div>'+
  302. '<div>'+moban_bq("[塞饭]")+'</div>'+
  303. '<div>'+moban_bq("[神阿]")+'</div>'+
  304. '<div>'+moban_bq("[生气]")+'</div>'+
  305. '<div>'+moban_bq("[受伤]")+'</div>'+
  306. '<div>'+moban_bq("[投降]")+'</div>'+
  307. '<div>'+moban_bq("[偷看]")+'</div>'+
  308. '</span>'+
  309. '</li>'+
  310. '<li>'+
  311. '<span>'+
  312. '<div>'+moban_bq("[无奈]")+'</div>'+
  313. '<div>'+moban_bq("[咽气]")+'</div>'+
  314. '<div>'+moban_bq("[郁闷]")+'</div>'+
  315. '<div>'+moban_bq("[找炮轰]")+'</div>'+
  316. '<div>'+moban_bq("[真臭]")+'</div>'+
  317. '<div>'+moban_bq("[做梦]")+'</div>'+
  318. '<div>'+moban_bq("[自信]")+'</div>'+
  319. '<div>'+moban_bq("[暴走]")+'</div>'+
  320. '<div>'+moban_bq("[板砖拍你]")+'</div>'+
  321. '<div>'+moban_bq("[说唱]")+'</div>'+
  322. '<div>'+moban_bq("[蜘蛛侠]")+'</div>'+
  323. '</span>'+
  324. '</li>'+
  325. '</ul>'+
  326. '</div>'+
  327. '</div>';
  328. $(".kj").after(html);
  329. if(mer_id > 0){
  330. var html = '<div class="title">';
  331. html += '<a href="javascript:history.back(-1);" class="title-back"></a>';
  332. html += '<div class="title-text">'+mer_name+'</div>';
  333. html += '<a class="title-go" href="/wap/merchant/index/mid/'+mer_id+'.html">进店</a>';
  334. html += '</div>';
  335. $(".kj").before(html);
  336. }
  337. }
  338. //对话窗口所用的js
  339. function moban_duihua_js(){
  340. //当按下回车时,发送消息
  341. $("#msn").keyup(function(){
  342. if(event.keyCode == 13){
  343. $(".msn_k b").trigger("click");
  344. }
  345. });
  346. //打开表情窗口
  347. $(".msn i.express_icon").click(function(){
  348. $(".biaoqing").show();
  349. $(".duihua").css("padding-bottom","190px");
  350. bottom();
  351. });
  352. //当点击其它区域时 关闭表情窗口
  353. $("#msn,.msn_k b,.duihua").click(function(){
  354. $(".biaoqing").hide();
  355. $(".duihua").css("padding-bottom","60px");
  356. })
  357. //表情轮播
  358. var slidey=$('.biaoqing').unslider({
  359. delay: false,
  360. dots: true
  361. });
  362. sliden = slidey.data('unslider');
  363. //表情滑动
  364. $(".biaoqing ul").swipe({
  365. swipeStatus:function(event, phase, direction, distance, duration,fingerCount) {
  366. if(direction == "left")//手指按住向左 表情跟随
  367. $(this).css({"margin-left":"-"+distance+"px"});
  368. if(direction == "right")//手指按住向右 表情跟随
  369. $(this).css({"margin-left":distance+"px"});
  370. if(phase == "cancel" || phase == "end"){//停止时
  371. if(distance > 50){//滑动像素大于 30
  372. $(this).css({"margin-left":"0"});
  373. if(direction == "left") //向左滑动
  374. sliden.next();
  375. if(direction == "right") //向右滑动
  376. sliden.prev();
  377. }
  378. else{
  379. $(this).animate({marginLeft:"0"},300);
  380. }
  381. }
  382. },
  383. });
  384. //表情滑动
  385. $(".biaoqing ul").swipe({
  386. swipeStatus:function(event, phase, direction, distance, duration,fingerCount) {
  387. if(direction == "left")//手指按住向左 表情跟随
  388. $(this).css({"margin-left":"-"+distance+"px"});
  389. if(direction == "right")//手指按住向右 表情跟随
  390. $(this).css({"margin-left":distance+"px"});
  391. if(phase == "cancel" || phase == "end"){//停止时
  392. if(distance > 50){//滑动像素大于 30
  393. $(this).css({"margin-left":"0"});
  394. if(direction == "left") //向左滑动
  395. sliden.next();
  396. if(direction == "right") //向右滑动
  397. sliden.prev();
  398. }
  399. else{
  400. $(this).animate({marginLeft:"0"},300);
  401. }
  402. }
  403. },
  404. });
  405. //表情滑动
  406. $(".biaoqing ul").swipe({
  407. swipeStatus:function(event, phase, direction, distance, duration,fingerCount) {
  408. if(direction == "left")//手指按住向左 表情跟随
  409. $(this).css({"margin-left":"-"+distance+"px"});
  410. if(direction == "right")//手指按住向右 表情跟随
  411. $(this).css({"margin-left":distance+"px"});
  412. if(phase == "cancel" || phase == "end"){//停止时
  413. if(distance > 50){//滑动像素大于 30
  414. $(this).css({"margin-left":"0"});
  415. if(direction == "left")//向左滑动
  416. sliden.next();
  417. if(direction == "right")//向右滑动
  418. sliden.prev();
  419. }
  420. else{
  421. $(this).animate({marginLeft:"0"},300);
  422. }
  423. }
  424. },
  425. });
  426. //点击表情添加
  427. $(".biaoqing ul li span div img").swipe({
  428. click:function(){
  429. title=$(this).attr("title");//取在title标签中的内容
  430. $("#msn").val($("#msn").val()+"["+title+"]");
  431. }
  432. });
  433. page=1; //初始化分页
  434. ajax_get_list(page); //首次加载聊天记录
  435. $(window).scroll(function() {
  436. //console.log($(window).scrollTop());
  437. if ($(window).scrollTop() <= 0 && !load_over) {
  438. page++;//更新分页
  439. ajax_get_list(page);//加载此分页聊天记录
  440. }
  441. });
  442. // $(".duihua").bind('swipeone',function(){
  443. // alert("zhixing!");
  444. // if ($(window).scrollTop() <= 0) {
  445. // page++;//更新分页
  446. // ajax_get_list(page);//加载此分页聊天记录
  447. // }
  448. // });
  449. }
  450. //消息模版
  451. function moban_msn(data){
  452. var html = "";
  453. for(var i=0;i<data.length;i++){
  454. //根据主从取头像
  455. if(data[i].my == "my")
  456. tou = uavatar;
  457. else
  458. tou = to_uavatar;
  459. //对比时间戳
  460. temptime=data[i].add_time - moban_time;
  461. //超过60秒的信息就显示时间
  462. if(Math.abs(temptime) > 60){
  463. html +='<div class="time"><p>'+timedate(data[i].add_time,0)+'</p></div>';
  464. //更新全局时间戳
  465. moban_time=data[i].add_time;
  466. }
  467. //模版开始
  468. html +='<div class="'+data[i].my+'hua">'+
  469. '<div class="tou">'+
  470. '<img src="'+tou+'">'+
  471. '</div>'+
  472. '<i class="ci_ico"></i>'+
  473. '<div class="ci">'+moban_bq(data[i].msn)+'</div>'+
  474. '</div>';
  475. }
  476. return html;
  477. }
  478. //滚动到底部
  479. function bottom(){
  480. $('html,body').animate({scrollTop:$(".kj").height()}, 500);
  481. }
  482. //顶上有新记录时,要滚动到以前的顶部距离
  483. function conter(jili){
  484. //取没更新的距离 减更新过的距离,就是要滚动到的高度
  485. $conter_jili=$(".kj").height()-jili
  486. $(document).scrollTop($conter_jili);
  487. }