components.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524
  1. // 通用数据
  2. let globaldata = {
  3. // 滚动高度
  4. scrollheight: 50,
  5. // body
  6. body: document.documentElement || document.body,
  7. // 省份
  8. province: [{ "code": "", "codeName": "全国" }, { "code": 1, "codeName": "北京" }, { "code": 21, "codeName": "天津" }, { "code": 42, "codeName": "上海" }, { "code": 63, "codeName": "重庆" }, { "code": 105, "codeName": "河北" }, { "code": 290, "codeName": "山西" }, { "code": 424, "codeName": "台湾" }, { "code": 432, "codeName": "辽宁" }, { "code": 549, "codeName": "吉林" }, { "code": 619, "codeName": "黑龙江" }, { "code": 765, "codeName": "江苏" }, { "code": 885, "codeName": "浙江" }, { "code": 988, "codeName": "安徽" }, { "code": 1110, "codeName": "福建" }, { "code": 1205, "codeName": "江西" }, { "code": 1317, "codeName": "山东" }, { "code": 1475, "codeName": "河南" }, { "code": 1654, "codeName": "湖北" }, { "code": 1775, "codeName": "湖南" }, { "code": 1913, "codeName": "广东" }, { "code": 2063, "codeName": "甘肃" }, { "code": 2166, "codeName": "四川" }, { "code": 2370, "codeName": "贵州" }, { "code": 2469, "codeName": "海南" }, { "code": 2508, "codeName": "云南" }, { "code": 2656, "codeName": "青海" }, { "code": 2708, "codeName": "陕西" }, { "code": 2827, "codeName": "广西" }, { "code": 2953, "codeName": "西藏" }, { "code": 3034, "codeName": "宁夏" }, { "code": 3061, "codeName": "新疆" }, { "code": 3181, "codeName": "内蒙古" }, { "code": 3296, "codeName": "澳门" }, { "code": 3298, "codeName": "香港" }, { "code": '', "codeName": "默认" }],
  9. }
  10. // 全局添加路径解析
  11. $(function () {
  12. var r = {
  13. protocol: /([^\/]+:)\/\/(.*)/i,
  14. host: /(^[^\:\/]+)((?:\/|:|$)?.*)/,
  15. port: /\:?([^\/]*)(\/?.*)/,
  16. pathname: /([^\?#]+)(\??[^#]*)(#?.*)/
  17. };
  18. function parseUrl (url) {
  19. var tmp, res = {};
  20. res["href"] = url;
  21. for (p in r) {
  22. tmp = r[p].exec(url);
  23. res[p] = tmp[1];
  24. url = tmp[2];
  25. if (url === "") {
  26. url = "/";
  27. }
  28. if (p === "pathname") {
  29. res["pathname"] = tmp[1];
  30. res["search"] = tmp[2];
  31. res["hash"] = tmp[3];
  32. }
  33. }
  34. let param = res.search.replace('?', '').split("&");
  35. let params = {};
  36. param.forEach(item => {
  37. let arr = item.split("=");
  38. params[arr[0]] = arr[1]
  39. })
  40. res["query"] = params;
  41. return res;
  42. };
  43. window["lxd"] = {
  44. parseUrl
  45. }
  46. })
  47. // app 悬浮放大
  48. $(function () {
  49. $("[data-app='download']").mouseenter(function () {
  50. $(this).find("div").addClass("show")
  51. }).mouseleave(function () {
  52. $(this).find("div").removeClass("show")
  53. })
  54. })
  55. // 大屏 下拉菜单
  56. $(function () {
  57. let navitems = $("#nav>.nav-item");
  58. const move = (that, show) => {
  59. let lis = $(that).find("li"),
  60. i = $(that).find("i");
  61. ul = $(that).find("ul");
  62. if (lis.length != 0 && show) {
  63. ul.addClass("show");
  64. i.removeClass("glyphicon-chevron-down").addClass("glyphicon-chevron-up");
  65. return false;
  66. }
  67. if (lis.length != 0 && !show) {
  68. ul.removeClass("show")
  69. i.removeClass("glyphicon-chevron-up").addClass("glyphicon-chevron-down");
  70. return false;
  71. }
  72. return false;
  73. }
  74. for (let i = 0; i < navitems.length; i++) {
  75. $(navitems[i]).mouseenter(function () {
  76. let that = this;
  77. move(that, true)
  78. }).mouseleave(function () {
  79. let that = this;
  80. move(that, false)
  81. })
  82. }
  83. }
  84. )
  85. // 监听滚动轴
  86. $(function () {
  87. // face显示锁
  88. let lock = true;
  89. // top显示锁
  90. let locktop = false;
  91. // 滚动高度
  92. let height = globaldata.scrollheight;
  93. $("body")[0].onscroll = function () {
  94. let stop = globaldata.body.scrollTop;
  95. // console.log(stop)
  96. // 可是区域宽度;
  97. if (stop > height && !locktop) {
  98. $("#top").removeClass("noshow");
  99. locktop = true;
  100. }
  101. if (stop < height && locktop) {
  102. $("#top").addClass("noshow");
  103. locktop = false;
  104. }
  105. if ($("body")[0].clientWidth < 768) {
  106. return false;
  107. }
  108. if (stop > height && lock) {
  109. $("#face").addClass("noshow");
  110. lock = false
  111. return false;
  112. }
  113. if (stop <= height && !lock) {
  114. $("#face").removeClass("noshow");
  115. lock = true;
  116. return false;
  117. }
  118. }
  119. })
  120. // 小屏幕 下拉菜单
  121. $(function () {
  122. // 按钮开关
  123. let lock = false;
  124. const open = () => {
  125. if (!lock) {
  126. $("#nav-sm").addClass("nav-sm-show").removeClass("nav-sm-noshow");
  127. globaldata.body.addEventListener('touchmove', e =>
  128. e.preventDefault()
  129. , { passive: false })
  130. lock = true
  131. return false;
  132. }
  133. if (lock) {
  134. $("#nav-sm").addClass("nav-sm-noshow").removeClass("nav-sm-show");
  135. globaldata.body.removeEventListener('touchmove', e => e.preventDefault() = true, { passive: false })
  136. lock = false;
  137. return false;
  138. }
  139. }
  140. $('#listbutton').click(function () {
  141. open()
  142. })
  143. // 可视区域变化
  144. window.onresize = () => {
  145. let appwidth = $("body")[0].clientWidth;
  146. if (appwidth > 768) {
  147. $("#nav-sm").removeClass("nav-sm-show");
  148. lock = false;
  149. return false;
  150. } else {
  151. // face 移动端显示
  152. try {
  153. $("#face").removeClass("noshow");
  154. } catch (err) { }
  155. }
  156. // if (lock) {
  157. // $("#nav-sm").addClass("nav-sm-show");
  158. // return false;
  159. // }
  160. }
  161. })
  162. // 分享设置
  163. var shareModel = {
  164. // /**
  165. // * 分享QQ好友
  166. // * @param {[type]} title [分享标题]
  167. // * @param {[type]} url [分享url链接,默认当前页面链接]
  168. // * @param {[type]} pic [分享图片]
  169. // * @return {[type]} [description]
  170. // */
  171. shareQQ: function (url, title, pic) {
  172. var param = {
  173. url: url || window.location.href,
  174. desc: '', /*分享理由*/
  175. title: title || '', /*分享标题(可选)*/
  176. summary: '',/*分享描述(可选)*/
  177. pics: pic || '',/*分享图片(可选)*/
  178. flash: '', /*视频地址(可选)*/
  179. site: '' /*分享来源 (可选) */
  180. };
  181. var s = [];
  182. for (var i in param) {
  183. s.push(i + '=' + encodeURIComponent(param[i] || ''));
  184. }
  185. var targetUrl = "https://connect.qq.com/widget/shareqq/iframe_index.html?" + s.join('&');
  186. window.open(targetUrl, 'qq');
  187. },
  188. // /**
  189. // * 分享新浪微博
  190. // * @param {[type]} title [分享标题]
  191. // * @param {[type]} url [分享url链接,默认当前页面]
  192. // * @param {[type]} pic [分享图片]
  193. // * @return {[type]} [description]
  194. // */
  195. sinaWeiBo: function (title, url, pic) {
  196. var param = {
  197. url: url || window.location.href,
  198. type: '3',
  199. count: '1', /** 是否显示分享数,1显示(可选)*/
  200. appkey: '', /** 您申请的应用appkey,显示分享来源(可选)*/
  201. title: '', /** 分享的文字内容(可选,默认为所在页面的title)*/
  202. pic: pic || '', /**分享图片的路径(可选)*/
  203. ralateUid: '', /**关联用户的UID,分享微博会@该用户(可选)*/
  204. rnd: new Date().valueOf()
  205. }
  206. var temp = [];
  207. for (var p in param) {
  208. temp.push(p + '=' + encodeURIComponent(param[p] || ''))
  209. }
  210. var targetUrl = 'https://service.weibo.com/share/share.php?' + temp.join('&');
  211. window.open(targetUrl, 'sinaweibo');
  212. }
  213. };
  214. $(function () {
  215. $("#share").mouseenter(function () {
  216. $(this).children("ul").css("width", 'auto')
  217. }).mouseleave(function () {
  218. $(this).children("ul").css("width", '0px');
  219. })
  220. let lis = $("#share>ul>li");
  221. for (let i = 0; i < lis.length; i++) {
  222. if (i == 1) {
  223. $(lis[i]).click(function () {
  224. shareModel.shareQQ();
  225. })
  226. }
  227. if (i == 2) {
  228. var dom = $("<div>");
  229. dom.attr("id", "qrcode");
  230. $(dom).appendTo($("#share"));
  231. var qrcode = new QRCode("qrcode", {
  232. text: window.location.href,
  233. width: 100,
  234. height: 100,
  235. colorDark: "#03C762",
  236. colorLight: "#ffffff",
  237. correctLevel: QRCode.CorrectLevel.H
  238. });
  239. qrcode.clear();
  240. qrcode.makeCode(window.location.href)
  241. $("#qrcode").append(
  242. `<div class="wei"><div>微信扫一扫</div><div>便可将本文分享至朋友圈</div><div>`
  243. )
  244. $(lis[i]).mouseenter(function () {
  245. $("#qrcode").show();
  246. }).mouseleave(function () {
  247. $("#qrcode").hide();
  248. })
  249. }
  250. if (i == 3) {
  251. $(lis[i]).click(function () {
  252. shareModel.sinaWeiBo();
  253. })
  254. }
  255. }
  256. })
  257. // 按钮锁
  258. $(function () {
  259. $("#top").click(function () {
  260. let dom = globaldata.body;
  261. // let top = document.documentElement.scrollTop || document.body.scrollTop;
  262. $(dom).animate({ scrollTop: 0 }, 500);
  263. })
  264. })
  265. // toast 背景事件
  266. $(function () {
  267. let dom = $("#toast>.toast-content");
  268. let style = dom.data();
  269. try {
  270. let h = style["height"] * 1 / 2;
  271. let w = style["width"] * 1 / 2;
  272. style["width"] += "px";
  273. style["height"] += "px";
  274. style["top"] = `calc(50vh - ${h}px )`;
  275. style["left"] = `calc(50vw - ${w}px )`;
  276. dom.css(style);
  277. } catch (err) { }
  278. dom.find("a").click(function () {
  279. window.location.href = $(this).attr("href")
  280. })
  281. $("#toast").click(function (e) {
  282. if (e.target.id != 'toast') return false
  283. $(this).removeClass("show");
  284. Array.prototype.slice.call($(this).find(".show")).forEach(e => {
  285. $(e).removeClass("show")
  286. })
  287. })
  288. })
  289. // 下载app
  290. $(function () {
  291. $("#download button").click(
  292. function () {
  293. window.location.href = "http://down.gaokaoapp.net";
  294. }
  295. )
  296. })
  297. // 评论区 点赞
  298. $(function () {
  299. // const globaldata = {
  300. // // 用户是否登录
  301. // user: false,
  302. // // 登录弹框
  303. // sgin () {
  304. // $("#toast").addClass("show").find(".msg").addClass("show").unbind("click").click(function () {
  305. // window.location.href = "http://down.gaokaoapp.net"
  306. // });
  307. // }
  308. // }
  309. // 显示区高度
  310. // let ch = document.documentElement.clientHeight || document.body.clientHeight;
  311. // 实现评论区加载
  312. // let lock = false, dom = $("#detail") || false;
  313. // $(window).scroll(function () {
  314. // if (lock && !!dom) return false;
  315. // // 滑动区高度
  316. // let sh = document.documentElement.scrollHeight || document.body.scrollHeight;
  317. // // 滑动位置
  318. // let st = document.documentElement.scrollTop || document.body.scrollTop;
  319. // let c = sh * 1 - ch * 1 - st * 1;
  320. // if (c == 0) {
  321. // lock = true;
  322. // data();
  323. // }
  324. // })
  325. // 阅读量问题
  326. // 评论区
  327. // function data () {
  328. // // 请求 根据请求改变内容 唯一标识 data-userid="1" data-good="false"
  329. // let com = `<div class="user" data-good="false" data-userid="1" >
  330. // <div class="u-img"><img src="../imgs/qq.png" alt="" class="img"></div>
  331. // <div class="u-content">
  332. // <div class="u-flex">
  333. // <div class="u-name">QQ官方</div>
  334. // <div class="u-fabulous" data-gods="1"><span>0</span><i data-gods="1" style="margin-left:5px" class="glyphicon glyphicon-thumbs-up"></i></div>
  335. // </div>
  336. // <div class="u-detail">
  337. // 对此,广东警官学院表示,其普通高等教育(全日制)招生工作严格执行教育部的“阳光高考”规定和工作程序,不以任何形式承诺录取,不因任何理由降低标准录取。学校从未委托任何个人、中介组织或招生机构开展提前招生、高职扩招等宣
  338. // </div>
  339. // <div class="u-flex">
  340. // <div class="u-date">2020-12-15</div>
  341. // <div data-gods="2" class="u-report">举报</div>
  342. // </div>
  343. // </div>
  344. // </div>`;
  345. // return new Promise(resolve => {
  346. // $("#detail").append(com);
  347. // //评论点赞 登录状态 请求
  348. // let lists = $("#detail>.user");
  349. // // 模拟无信息加载情况
  350. // if (lists.length == 10) {
  351. // resolve(true)
  352. // }
  353. // for (let i = 0; i < lists.length; i++) {
  354. // $(lists[i]).unbind("click");
  355. // $(lists[i]).click(function (e) {
  356. // if (!globaldata.user) {
  357. // globaldata.sgin();
  358. // return false
  359. // }
  360. // let userid = $(this).data("userid");
  361. // let lock = $(this).data("good");
  362. // let gods = e.target.dataset.gods;
  363. // if (gods == 1) {
  364. // let $i = $(this).find("i");
  365. // let $span = $(this).find("span");
  366. // let num = $span.text();
  367. // if (!lock) {
  368. // $i.addClass("color");
  369. // $(this).data("good", true);
  370. // $span.text(num * 1 + 1);
  371. // } else {
  372. // $i.removeClass("color");
  373. // $(this).data("good", false);
  374. // $span.text(num * 1 - 1);
  375. // }
  376. // return false;
  377. // }
  378. // if (gods == 2) {
  379. // $("#toast").addClass("show").find("#report").addClass("show").data("userid", userid);
  380. // }
  381. // })
  382. // }
  383. // resolve(false);
  384. // })
  385. // }
  386. // 阅读点赞 登录状态 请求
  387. // $("#read>.good").click(function () {
  388. // if (!globaldata.user) {
  389. // globaldata.sgin();
  390. // return false
  391. // }
  392. // let $i = $(this).find("i");
  393. // let $span = $(this).find("span");
  394. // let num = $span.text();
  395. // let lock = $i.data("good");
  396. // if (!lock) {
  397. // $i.addClass("color");
  398. // $i.data("good", true);
  399. // $span.text(num * 1 + 1);
  400. // } else {
  401. // $i.removeClass("color");
  402. // $i.data("good", false);
  403. // $span.text(num * 1 - 1);
  404. // }
  405. // })
  406. })
  407. // 省份
  408. $(function () {
  409. // 根据路径判断城市
  410. let area = lxd.parseUrl(window.location.href).query.area || '', i = 0, bool = true;
  411. do {
  412. if (area == globaldata["province"][i]["code"]) {
  413. bool = !bool;
  414. } else {
  415. i++;
  416. i < globaldata["province"].length ? '' : bool = !bool;
  417. }
  418. } while (bool)
  419. i == 36 ? i = 0 : '';
  420. $(".my-province>span").html(globaldata.province[i]["codeName"]);
  421. function province (data) {
  422. let str = ``;
  423. data.forEach(item => str += `<li data-area=${item.code}>${item.codeName}</li>`);
  424. str = `<ul >${str}</ul>`;
  425. return str
  426. }
  427. // 底部弹出框
  428. let lis = $("[data-province='true']").append(province(globaldata.province)).find("li");
  429. Array.prototype.slice.call(lis).forEach(item => {
  430. $(item).click(function (e) {
  431. e.stopPropagation();
  432. let text = $(this).text();
  433. if (text == "默认") {
  434. $(".my-province div[data-province='true']").hide();
  435. return false;
  436. }
  437. let paresurl = lxd.parseUrl(window.location.href), path = paresurl.pathname;
  438. window.location.href = `${path}?area=${$(e.target).data("area")}`;
  439. })
  440. })
  441. function province_show (e) {
  442. e.stopPropagation();
  443. $(".my-province div[data-province='true']").show().unbind("mouseleave").mouseleave(function () { $(this).hide() });
  444. }
  445. $(".my-province>span").click(province_show);
  446. $(".my-province>i").click(province_show);
  447. })
  448. // 页面内通过 .click-dom .click-href 进行业内跳转
  449. $(function () {
  450. $(".click-dom").click(function () {
  451. let top = $(".click-href").offset().top;
  452. $(window).scrollTop(top)
  453. })
  454. })
  455. // 图片观看轮播
  456. $(function () {
  457. // 获取图片
  458. let showimglist = Array.from($('.showimglist img')), imglist = [], imglistdom = $("#imglist")
  459. i = 0;
  460. var w, h, width = document.documentElement.clientWidth, height = document.documentElement.clientHeight, size = 1;
  461. $('.showimglist img').click(function () {
  462. $("body").css({ "overflow-y": "hidden" })
  463. i = showimglist.indexOf(this);
  464. imgshow(0)
  465. imglistdom.show()
  466. })
  467. showimglist.map(item => {
  468. imglist.push($(item).data("original"));
  469. })
  470. function loop (src) {
  471. $("#imglist>div>img").attr("src", src);
  472. let newimg = new Image();
  473. newimg.src = src;
  474. newimg.onload = function (e) {
  475. w = this.width;
  476. h = this.height;
  477. $("#imglist>div>img").css({ "width": w, "height": h, "top": `calc(50vh - ${h / 2}px)`, "left": `calc(50vw - ${w / 2}px)` })
  478. }
  479. }
  480. let btns = $("#imglist>div>.glyphicon");
  481. function imgshow (num) {
  482. i += num;
  483. if (i < 0) i = imglist.length - 1;
  484. if (i >= imglist.length) i = 0;
  485. loop(imglist[i]);
  486. }
  487. $(btns[0]).click(function (e) {
  488. size = 1;
  489. imgshow(-1);
  490. });
  491. $(btns[1]).click(function (e) {
  492. size = 1;
  493. imgshow(1);
  494. })
  495. let btnss = $("#imglist>div>span>img");
  496. function scale (num) {
  497. size += num;
  498. if (size <= 0) size = 0.5;
  499. let imgw, imgh;
  500. imgw = w * size; imgh = h * size;
  501. let top = imgh / 2, left = imgw / 2;
  502. imgw > width ? left = `0px` : left = `50vw - ${left}px`;
  503. imgh > height ? top = `0px` : top = `50vh - ${top}px`;
  504. $("#imglist>div>img").css({ "width": imgw, "height": imgh, "top": `calc(${top})`, "left": `calc(${left})` })
  505. }
  506. $(btnss[0]).click(function (e) {
  507. scale(0.5);
  508. });
  509. $(btnss[1]).click(function (e) {
  510. scale(-0.5);
  511. });
  512. $(btnss[2]).click(function (e) {
  513. $("body").css({ "overflow-y": "scroll" })
  514. imglistdom.hide()
  515. });
  516. })