search.js 12 KB

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