search.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548
  1. var searchName='';
  2. var searchNameinput='';
  3. var searchNameopeon=false;
  4. var pageIndex=1;
  5. var nTotalNum=10;
  6. var searchassociatedtime=null;
  7. var searchvariables=1;
  8. var searchstarted=true;
  9. var clearstartedtime=null;
  10. var ntimeout=10000;
  11. var sliformwork='<li>\
  12. <a href="aHref">\
  13. <div class="s_img"><img src="/assets/img/frontend/images/default_img.png" data-original="dataOriginal" /></div>\
  14. <div class="s_info">\
  15. <h3>searchName</h3>\
  16. <strong>searchAuthor</strong>\
  17. <p>searchIntroduction</p>\
  18. </div>\
  19. </a>\
  20. </li>';
  21. var oHotBook=[];
  22. var nHotnum = 0;
  23. $(function(){
  24. //返回上一页
  25. $('.new_search_return').click(function(){
  26. window.history.go(-1);
  27. });
  28. //输入搜索关键字
  29. $('.new_search_input_search').on('input','input',function(e){
  30. searchName = $.trim($(this).val());
  31. searchstarted=true;
  32. searchNameopeon=false;
  33. $('.nst_list_loading').hide();
  34. if(searchName.length>0){
  35. clearTimeout(searchassociatedtime);
  36. $('.new_search_input a').show();
  37. searchassociatedtime=setTimeout(function(){
  38. clearTimeout(searchassociatedtime);
  39. // 关键字热推
  40. // searchassociated(searchName);
  41. },500);
  42. }else{
  43. clearTimeout(searchassociatedtime);
  44. $('.new_search_tips_list,.ns_list_main_search_loading,.new_search_input a,.new_search_tips_body,.ns_list_main_search_loading').hide();
  45. $('.ns_list_main_box').show();
  46. $('.ns_list_recommend').show();
  47. }
  48. });
  49. //删除input内容
  50. $('.new_search_input a').on('click',function(){
  51. $(this).hide();
  52. $(".new_search_input_search input").val('');
  53. $('.new_search_tips_list,.new_search_tips_body,.ns_list_main_search_loading').hide();
  54. $('.ns_list_main_box').show();
  55. $('.ns_list_recommend').show();
  56. $('.ns_list_hot').show();
  57. $('.ns_list_main_local').show();
  58. });
  59. //敲回车搜索
  60. $(".new_search_input_search input").on('keypress',function(e) {
  61. var keycode = e.keyCode;
  62. var oThis=$(this);
  63. pageIndex=1;
  64. searchName = $.trim(oThis.val());
  65. if(keycode=='13') {
  66. if(searchName.length>0){
  67. if(searchNameopeon){
  68. return false;
  69. }
  70. searchNameopeon=true;
  71. clearTimeout(searchassociatedtime);
  72. e.preventDefault();
  73. searchstarted=true;
  74. searchtips(searchName,true);
  75. replacelocalstorage('locallist',searchName);
  76. /* cpslog([702,{
  77. map:{
  78. keyword:searchName
  79. }
  80. },'search_enter']);*/
  81. }else{
  82. oThis.val('');
  83. consoleMain('请输入要搜索的内容');
  84. }
  85. }
  86. });
  87. //点击搜索按钮搜索
  88. // $('.new_search_but').on('click',function(){
  89. // pageIndex=1;
  90. // searchName=$.trim($('.new_search_input_search input').val());
  91. // if(searchName.length>0){
  92. // if(searchNameopeon){
  93. // return false;
  94. // }
  95. // searchNameopeon=true;
  96. // searchstarted=true;
  97. // searchtips(searchName,true);
  98. // replacelocalstorage('locallist',searchName);
  99. // cpslog([702,{
  100. // map:{
  101. // keyword:searchName
  102. // }
  103. // },'search_but']);
  104. // }else{
  105. // $('.new_search_input_search input').val('');
  106. // consoleMain('请输入要搜索的内容');
  107. // }
  108. // });
  109. //点击列表搜索点击的词
  110. $('.ns_list_main_local,.new_search_tips_list_ul').on('click','li',function(){
  111. var oThis=$(this);
  112. var skeyword=oThis.text();
  113. pageIndex=1;
  114. $('.new_search_input_search input').val(skeyword);
  115. $('.new_search_input a').show();
  116. searchstarted=true;
  117. searchtips(skeyword,true);
  118. replacelocalstorage('locallist',skeyword);
  119. /* cpslog([702,{
  120. map:{
  121. keyword:skeyword
  122. }
  123. },'search_local']);*/
  124. });
  125. //删除本地数据
  126. $('.ns_list_main_local a').on('click',function(){
  127. removelocalstorage('locallist');
  128. $('.ns_list_main_local ul').html('');
  129. $('.ns_list_main_local').hide();
  130. });
  131. //换一换
  132. $('.ns_list_hot .ns_list_hot_but').on('click',function(){
  133. var shot='';
  134. if(nHotnum < oHotBook.length - 1){
  135. nHotnum++;
  136. }else{
  137. nHotnum = 0;
  138. }
  139. for(var i=0; i<oHotBook[nHotnum].length; i++){
  140. var bookid = oHotBook[nHotnum][i]['book_id'];
  141. var bookInfoUrl = bookInfoTemp.replace("mbid", bookid);
  142. shot+='<li class="section-block"><a href="'+ bookInfoUrl +'" class="client-url section-data" data-zone="热门搜索" data-book_id="'+bookid+'">'+oHotBook[nHotnum][i]['name']+'</a></li>';
  143. }
  144. $('.ns_list_hot ul').html(shot);
  145. });
  146. //大家都在看
  147. searcheverybody();
  148. //最近搜索
  149. replacelocalstorage('locallist');
  150. //滚动动加载搜索列表
  151. $(window).scroll(function(e){
  152. if($('.new_search_tips_body').css('display') == 'none'){
  153. return false;
  154. }
  155. if($('.new_search_tips_list').css('display') != 'none'){
  156. e.preventDefault();
  157. return false;
  158. }
  159. var nWinHeight = document.documentElement.clientHeight;
  160. var nWinTop = $(window).scrollTop() + nWinHeight;
  161. var nBodyScrollH = document.body.scrollHeight;
  162. var oNewLoading = $('.read_content_list').last();
  163. var newTime = Date.parse(new Date());
  164. if (searchstarted && nBodyScrollH - nWinTop < 300) {
  165. pageIndex++;
  166. searchtips(searchName);
  167. }
  168. });
  169. });
  170. //搜索关联词
  171. function searchassociated(keyword){
  172. if(searchName.length>0){
  173. clearTimeout(searchassociatedtime);
  174. $.ajax({
  175. url:'/asg/portal/h5/searchTips.html?keyword='+keyword,
  176. type:'get',
  177. timeout: ntimeout,
  178. cache: false,
  179. success: function(data){
  180. data = jsono(data);
  181. var reg=new RegExp(keyword,'gm');
  182. if(data.status == 1){
  183. var sHtml='';
  184. //if(data.keys.length>0){
  185. for(var i=0; i<data.keys.length; i++){
  186. sHtml+='<li>'+data.keys[i]['key'].replace(reg,'<span>'+keyword+'</span>')+'</li>'
  187. }
  188. $('.new_search_tips_list_ul').html(sHtml);
  189. $('.new_search_tips_list').show();
  190. //}else{
  191. //$('.new_search_tips_list').hide();
  192. //}
  193. if(searchName.length>0){
  194. $('.ns_list_main_box,.new_search_tips_body').hide();
  195. }
  196. }
  197. },
  198. error:function(err){
  199. }
  200. });
  201. }else{
  202. clearTimeout(searchassociatedtime);
  203. $('.new_search_tips_list').hide();
  204. }
  205. }
  206. //大家都在看
  207. function searcheverybody (){
  208. var sex = $("#sex").val();
  209. $.ajax({
  210. url:'/clientwebapi/index/hotsearchapi?sex='+sex,
  211. type:'get',
  212. timeout: ntimeout,
  213. cache: false,
  214. success: function(data){
  215. data = jsono(data);
  216. //输入框默认值
  217. // if(data.defSearchKeys.length>0){
  218. // $('.new_search_input_search input').val(data.defSearchKeys[nrandom(data.defSearchKeys.length)]['tags']);
  219. // $('.new_search_input a').show();
  220. // }
  221. //大家都在看
  222. var shot=''
  223. var MAX_NUM = 5;
  224. if(data.length>0){
  225. $('.ns_list_hot').show();
  226. ahotsearchapi = data;
  227. for(var i=0; i<data.length; i++){
  228. if(!oHotBook[parseInt(i/MAX_NUM)]){
  229. oHotBook.push([data[i]]);
  230. }else{
  231. oHotBook[parseInt(i/MAX_NUM)].push(data[i]);
  232. }
  233. if(i<MAX_NUM){
  234. var bookid = data[i]['book_id'];
  235. var bookInfoUrl = bookInfoTemp.replace("mbid", bookid);
  236. shot+='<li class="section-block"><a href="'+bookInfoUrl+'" class="client-url section-data" data-zone="热门搜索" data-book_id="'+bookid+'">'+data[i]['name']+'</a></li>';
  237. }
  238. }
  239. if(oHotBook.length > 0){
  240. if(oHotBook.length > 1){
  241. $('.ns_list_hot_but').show();
  242. }
  243. $('.ns_list_hot ul').html(shot);
  244. $('.ns_list_hot').show();
  245. }
  246. }else{
  247. $('.ns_list_hot').hide();
  248. }
  249. },
  250. error:function(err){
  251. }
  252. });
  253. }
  254. //搜索列表
  255. function searchtips(keyword,boolean){
  256. if(searchstarted){
  257. searchStarted();
  258. if(pageIndex == 1){
  259. loadingimg();
  260. }else{
  261. $('.nst_list_loading').html('玩命加载中~');
  262. $('.nst_list_loading').show();
  263. }
  264. $.ajax({
  265. url:'/clientwebapi/index/searchapi?&keyword='+keyword+'&page='+pageIndex,
  266. type:'get',
  267. timeout: ntimeout,
  268. cache: false,
  269. success: function(data){
  270. data = jsono(data);
  271. clearTimeout(clearstartedtime);
  272. if(boolean){
  273. $('.nst_list_ul').html('');
  274. }
  275. $('.ns_list_main_box').hide();
  276. if(data['priMap']['searchList']['length'] <= 0 && pageIndex == 1){
  277. //搜索为null
  278. loadingnull(keyword);
  279. $('.ns_list_hot').hide();
  280. $('.ns_list_main_local').hide();
  281. $('.new_search_tips_list').hide();
  282. searchvariables=1;
  283. searchstarted=false;
  284. }else if(data['priMap']['searchList']['length']>0){
  285. clearloading();
  286. var slist='';
  287. var osearchlist=data['priMap']['searchList'];
  288. var reg=new RegExp(keyword,'gm');
  289. for(var i=0; i<osearchlist['length']; i++){
  290. var bookid = osearchlist[i]['id'];
  291. var bookInfoUrl = bookInfoTemp.replace("mbid", bookid);
  292. var sisfinish = '<i style="color: #ffc701;">已完结</i>';
  293. if(osearchlist[i].is_finish == 1){
  294. sisfinish = '<i style="color: #ffc701;">已完结</i>';
  295. }else{
  296. sisfinish = '<i>连载中</i>';
  297. }
  298. // sLi=sliformwork.replace(/aHref/, '/index/book/info?book_id='+osearchlist[i]['id']+'&t='+Math.random());
  299. // sLi=sLi.replace(/dataOriginal/,osearchlist[i]['image']);
  300. // osearchlist[i]['name']=osearchlist[i]['name'].replace(reg,'<span>'+keyword+'</span>');
  301. // sLi=sLi.replace(/searchName/,osearchlist[i]['name']);
  302. // osearchlist[i]['author']=osearchlist[i]['author'].replace(reg,'<span>'+keyword+'</span>');
  303. // sLi=sLi.replace(/searchAuthor/,osearchlist[i]['author']);
  304. // if(osearchlist[i]['description'].length>0){
  305. // osearchlist[i]['description']=osearchlist[i]['description'].replace(reg,'<span>'+keyword+'</span>');
  306. // sLi=sLi.replace(/searchIntroduction/,osearchlist[i]['description']);
  307. // }else{
  308. // sLi=sLi.replace(/searchIntroduction/,'暂无介绍');
  309. // }
  310. // slist += sLi;
  311. slist += '<li class="section-block">\
  312. <a href="'+bookInfoUrl+'" class="client-url section-data" data-zone="查询结果" data-book_id="'+bookid+'">\
  313. <div class="i_images_img"><img alt="" src="' + osearchlist[i].image + '"></div>\
  314. <div class="i_images_txt_box">\
  315. <h3>' + osearchlist[i].name + '</h3>\
  316. <p>' + osearchlist[i].description + '</p>\
  317. <div class="i_images_txt_other">\
  318. <strong>' + sisfinish +'\
  319. <b>' + osearchlist[i].author + '</b>\
  320. </strong>\
  321. <em>' + osearchlist[i].read_num + '人在追</em>\
  322. </div>\
  323. </div>\
  324. </a>\
  325. </li>';
  326. }
  327. if(osearchlist['length'] > 0){
  328. searchvariables=2;
  329. $('.nst_list_ul').append(slist);
  330. $('.ns_list_recommend').hide();
  331. $('.new_search_tips_body').show();
  332. searchstarted=true;
  333. $('img').picLazyLoad({
  334. effect : "fadeIn"
  335. });
  336. }
  337. if(osearchlist['length'] < nTotalNum){
  338. //push之后的数据
  339. searchstarted=false;
  340. $('.nst_list_loading').html('全部搜索结果');
  341. $('.nst_list_loading').show();
  342. }else{
  343. $('.nst_list_loading').hide();
  344. }
  345. if($('.new_search_tips_body').css('display') == 'none'){
  346. $('.ns_list_main_box,.new_search_tips_list').hide();
  347. $('.new_search_tips_body').show();
  348. }
  349. }else if(data['priMap']['searchList']['length'] <= 0){
  350. $('.nst_list_loading').html('全部搜索结果');
  351. $('.nst_list_loading').show();
  352. searchstarted=false;
  353. }
  354. /* cpslog([703,{
  355. map:{
  356. result:1,
  357. keyword:keyword
  358. }
  359. },'ssjg']);*/
  360. },
  361. error:function(err){
  362. searchstarted=true;
  363. /* cpslog([703,{
  364. map:{
  365. result:4,
  366. keyword:keyword
  367. }
  368. },'ssjg']);*/
  369. }
  370. });
  371. }
  372. }
  373. //搜索loading
  374. function loadingimg(){
  375. $('.ns_list_main_search_loading,.ns_list_main_search_loading_img,.ns_list_main_box').show();
  376. $('.ns_list_main_search_loading_null').hide();
  377. }
  378. //搜索null
  379. function loadingnull(keyword){
  380. searchvariables=1;
  381. $('.ns_list_main_search_loading,.ns_list_main_search_loading_null,.ns_list_main_box').show();
  382. $('.ns_list_main_search_loading_img').hide();
  383. $('.j_keyword').text(keyword);
  384. }
  385. //关闭搜索loading
  386. function clearloading(){
  387. if($('.ns_list_main_box').css('display') != 'none'){
  388. $('.ns_list_main_box').hide();
  389. }
  390. if(!$('.new_search_tips_list').css('display') != 'none'){
  391. $('.new_search_tips_list').hide();
  392. }
  393. if(!$('.ns_list_main_search_loading').css('display') != 'none'){
  394. $('.ns_list_main_search_loading').hide();
  395. }
  396. }
  397. //获取随机数
  398. function nrandom(num,nummin){
  399. var nrandom=Math.random();
  400. if(nummin){
  401. nrandom= parseInt( nrandom * num + nummin );
  402. }else{
  403. nrandom= parseInt( nrandom * num);
  404. }
  405. return nrandom;
  406. }
  407. //json串转换为json对象
  408. function jsono(jstr) {
  409. if (typeof jstr == 'string') {
  410. try{
  411. return JSON.parse(jstr);
  412. } catch(e) {
  413. return jstr;
  414. }
  415. }
  416. return jstr;
  417. }
  418. //json对象转换为json串
  419. function jsons(jobj) {
  420. if (typeof jobj == 'object') {
  421. try{
  422. return JSON.stringify(jobj);
  423. } catch(e) {
  424. return jobj;
  425. }
  426. }
  427. return jobj;
  428. }
  429. //获取本地数据
  430. function getlocalstorage(key){
  431. if(window.localStorage){
  432. var oWinSt=window.localStorage;
  433. var localstoragecontent=$.trim(oWinSt.getItem(key));
  434. if(localstoragecontent){
  435. if(typeof localstoragecontent=='string'){
  436. try{
  437. localstoragecontent = JSON.parse(localstoragecontent);
  438. }catch(e){
  439. return '';
  440. }
  441. }
  442. return localstoragecontent;
  443. }else{
  444. return '';
  445. }
  446. }
  447. }
  448. //修改本地数据
  449. function setlocalstorage(key,arr){
  450. if(window.localStorage){
  451. var oWinSt=window.localStorage;
  452. if(typeof arr=='object'){
  453. arr = JSON.stringify(arr);
  454. }
  455. oWinSt.setItem(key,arr);
  456. }
  457. }
  458. //删除为 key 的本地数据
  459. function removelocalstorage(key){
  460. if(window.localStorage){
  461. var oWinSt=window.localStorage;
  462. oWinSt.removeItem(key);
  463. }
  464. }
  465. //更新本地搜索数据
  466. function replacelocalstorage(key,str){
  467. var getlarr=getlocalstorage(key);
  468. if(str){
  469. if(!getlarr){
  470. getlarr=[str];
  471. }
  472. if(typeof getlarr == 'object'){
  473. if(getlarr.indexOf(str) > -1){
  474. getlarr.splice(getlarr.indexOf(str),1);
  475. }
  476. getlarr.unshift(str);
  477. if(getlarr.length>5){
  478. getlarr.splice(5,getlarr.length);
  479. }
  480. }else if(typeof getlarr == 'string'){
  481. }
  482. setlocalstorage(key,getlarr);
  483. }
  484. //最近搜索
  485. var nslistlocal=''
  486. if(getlarr.length>0){
  487. $('.ns_list_main_local').show();
  488. for(var i=0; i<getlarr.length; i++){
  489. nslistlocal+='<li><span>'+getlarr[i]+'</span></li>';
  490. }
  491. $('.ns_list_main_local ul').html(nslistlocal);
  492. }else{
  493. $('.ns_list_main_local').hide();
  494. }
  495. };
  496. function searchStarted(){
  497. clearTimeout(clearstartedtime);
  498. searchstarted=false;
  499. clearstartedtime=setTimeout(function(){
  500. searchstarted=true;
  501. },ntimeout);
  502. }