main.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. var domanUrl = "//" + window.location.host;
  2. var base_path = "//test.iamberry.com/tooth";
  3. //var base_path = domanUrl+"/tooth";
  4. //ajax loading
  5. $(window).ajaxStart(function(){
  6. $(".covers").show();
  7. });
  8. $(window).ajaxStop(function(){
  9. $(".covers").hide();
  10. });
  11. mui.each(document.querySelectorAll('#footer-bar-tab .mui-tab-item'), function(index, el) {
  12. el.addEventListener('tap', function() {
  13. switch(index) {
  14. case 0:
  15. mui.openWindow({
  16. url: 'index.html'
  17. });
  18. break;
  19. case 1:
  20. mui.openWindow({
  21. url: 'pro-list.html'
  22. });
  23. break;
  24. case 2:
  25. mui.openWindow({
  26. url: 'shopping-cart.html'
  27. });
  28. break;
  29. case 3:
  30. mui.openWindow({
  31. url: 'my-center.html'
  32. });
  33. break;
  34. default:
  35. break;
  36. }
  37. }, false);
  38. });
  39. function time_before(t){
  40. var minute=1000*60;
  41. var hour=minute*60;
  42. var day=hour*24;
  43. var halfamonth=day*15;
  44. var month=day*30;
  45. var now=new Date().getTime();
  46. var diffValue=now-new Date().setTime(t);
  47. var monthC=diffValue/month;
  48. var weekC=diffValue/(7*day);
  49. var dayC=diffValue/day;
  50. var hourC=diffValue/hour;
  51. var minC=diffValue/minute;
  52. if(monthC>=1){
  53. result=""+parseInt(monthC)+"月前";
  54. }else if(weekC>=1){
  55. result=""+parseInt(weekC)+"周前";
  56. }else if(dayC>=1){
  57. result=""+parseInt(dayC)+"天前";
  58. }else if(hourC>=1){
  59. result=""+parseInt(hourC)+"小时前";
  60. }else if(minC>=2){
  61. result=""+parseInt(minC)+"分钟前";
  62. }else{
  63. result="刚刚";
  64. }
  65. return result;
  66. };
  67. //封装document.getElementById
  68. function dc(objectid) {
  69. if(document.getElementById && document.getElementById(objectid)) {
  70. return document.getElementById(objectid);// w3c dom
  71. } else if (document.all && document.all(objectid)) {
  72. return document.all(objectid);// msie 4 dom
  73. } else if (document.layers && document.layers[objectid]) {
  74. return document.layers[objectid];// nn 4 dom.. note: this won't find nested layers
  75. } else {
  76. return false;
  77. }
  78. };
  79. //生成随机字符,n长度
  80. function generateMixed(n) {
  81. var chars = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
  82. var res = "";
  83. for(var i = 0; i < n ; i ++) {
  84. var id = Math.ceil(Math.random()*35);
  85. res += chars[id];
  86. }
  87. return res;
  88. }
  89. function getParam(paramName) {
  90. paramValue = "", isFound = !1;
  91. if(this.location.search.indexOf("?") == 0 && this.location.search.indexOf("=") > 1) {
  92. arrSource = unescape(this.location.search).substring(1, this.location.search.length).split("&"), i = 0;
  93. while(i < arrSource.length && !isFound) {
  94. arrSource[i].indexOf("=") > 0 && arrSource[i].split("=")[0].toLowerCase() == paramName.toLowerCase() && (paramValue = arrSource[i].split("=")[1], isFound = !0), i++
  95. }
  96. }
  97. return paramValue == "" && (paramValue = null), paramValue
  98. };
  99. function getQueryString(name) {
  100. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  101. var r = window.location.search.substr(1).match(reg);
  102. if (r != null) return unescape(r[2]); return null;
  103. }
  104. // 对Date的扩展,将 Date 转化为指定格式的String
  105. // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
  106. // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
  107. // 例子:
  108. // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
  109. // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
  110. Date.prototype.format = function(fmt)
  111. { //author: meizz
  112. var o = {
  113. "M+" : this.getMonth()+1, //月份
  114. "d+" : this.getDate(), //日
  115. "h+" : this.getHours(), //小时
  116. "m+" : this.getMinutes(), //分
  117. "s+" : this.getSeconds(), //秒
  118. "q+" : Math.floor((this.getMonth()+3)/3), //季度
  119. "S" : this.getMilliseconds() //毫秒
  120. };
  121. if(/(y+)/.test(fmt))
  122. fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  123. for(var k in o)
  124. if(new RegExp("("+ k +")").test(fmt))
  125. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
  126. return fmt;
  127. }
  128. /**
  129. * 根据formatter字符串转换时间字符串
  130. * 月(M)、日(d)、小时(h)、分(m)、秒(s) 占位符个数需要和时间字符串匹配
  131. * @param {string} dateStr 时间字符串 如:"2015-11-12"
  132. * @param {string} fmt 格式化字符串 如:"yyyy-MM-dd"
  133. * @return {Date} 标准时间
  134. * author: shaojiasong 2015-12-29
  135. */
  136. function parseDate(dateStr,fmt){
  137. if(!dateStr || !fmt || (dateStr.length != fmt.length)) {
  138. throw new Error("转换时间时发生错误,时间字符串与格式字符串不匹配!");
  139. }
  140. //排除特殊字符,避免正则发生错误
  141. fmt = fmt.replace(/([\^\$\.\*\+\?\=\!\:\|\\\/\(\)\[\]\{\}])/ig,"\\$1");
  142. function getReg(str){
  143. var cfmt = fmt;
  144. cfmt = cfmt.replace(new RegExp(str+"+","g"),function(full){ return "("+full+")";}) || "";
  145. return cfmt.replace(/[yMdhmsS]/g,"\\d");
  146. }
  147. var year = parseInt((new RegExp(getReg("y")).exec(dateStr)[1])) || 0;
  148. var month = parseInt((new RegExp(getReg("M")).exec(dateStr)[1])) - 1 || 0;
  149. var day = parseInt((new RegExp(getReg("d")).exec(dateStr)[1])) || 0;
  150. var hour = parseInt((new RegExp(getReg("h")).exec(dateStr)[1])) || 0;
  151. var minute = parseInt((new RegExp(getReg("m")).exec(dateStr)[1])) || 0;
  152. var second = parseInt((new RegExp(getReg("s")).exec(dateStr)[1])) || 0;
  153. return new Date(year,month,day,hour,minute,second);
  154. }
  155. //计算月份差
  156. function getMonthNumber(date1,date2){
  157. //默认格式为"2010-01-01",根据自己需要改格式和方法
  158. var d1=date1.replaceAll("-",''),d2=date2.replaceAll("-",'');
  159. var year1 = d1.substring(0,4);
  160. var year2 = d2.substring(0,4);
  161. var month1 = d1.substring(6,4);
  162. var month2 = d2.substring(6,4);
  163. var len=parseInt((year2-year1)*12+(month2-month1));
  164. return len;
  165. }
  166. //替换所有要替换的文字
  167. String.prototype.replaceAll = function (str1,str2){
  168. var str = this;
  169. var result = str.replace(eval("/"+str1+"/gi"),str2);
  170. return result;
  171. }
  172. /**
  173. ** 加法函数,用来得到精确的加法结果
  174. ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
  175. ** 调用:accAdd(arg1,arg2)
  176. ** 返回值:arg1加上arg2的精确结果
  177. **/
  178. function accAdd(arg1, arg2) {
  179. var r1, r2, m, c;
  180. try {
  181. r1 = arg1.toString().split(".")[1].length;
  182. }
  183. catch (e) {
  184. r1 = 0;
  185. }
  186. try {
  187. r2 = arg2.toString().split(".")[1].length;
  188. }
  189. catch (e) {
  190. r2 = 0;
  191. }
  192. c = Math.abs(r1 - r2);
  193. m = Math.pow(10, Math.max(r1, r2));
  194. if (c > 0) {
  195. var cm = Math.pow(10, c);
  196. if (r1 > r2) {
  197. arg1 = Number(arg1.toString().replace(".", ""));
  198. arg2 = Number(arg2.toString().replace(".", "")) * cm;
  199. } else {
  200. arg1 = Number(arg1.toString().replace(".", "")) * cm;
  201. arg2 = Number(arg2.toString().replace(".", ""));
  202. }
  203. } else {
  204. arg1 = Number(arg1.toString().replace(".", ""));
  205. arg2 = Number(arg2.toString().replace(".", ""));
  206. }
  207. return (arg1 + arg2) / m;
  208. }
  209. //给Number类型增加一个add方法,调用起来更加方便。
  210. Number.prototype.add = function (arg) {
  211. return accAdd(arg, this);
  212. };
  213. /**
  214. ** 减法函数,用来得到精确的减法结果
  215. ** 说明:javascript的减法结果会有误差,在两个浮点数相减的时候会比较明显。这个函数返回较为精确的减法结果。
  216. ** 调用:accSub(arg1,arg2)
  217. ** 返回值:arg1加上arg2的精确结果
  218. **/
  219. function accSub(arg1, arg2) {
  220. var r1, r2, m, n;
  221. try {
  222. r1 = arg1.toString().split(".")[1].length;
  223. }
  224. catch (e) {
  225. r1 = 0;
  226. }
  227. try {
  228. r2 = arg2.toString().split(".")[1].length;
  229. }
  230. catch (e) {
  231. r2 = 0;
  232. }
  233. m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
  234. n = (r1 >= r2) ? r1 : r2;
  235. return ((arg1 * m - arg2 * m) / m).toFixed(n);
  236. }
  237. // 给Number类型增加一个mul方法,调用起来更加方便。
  238. Number.prototype.sub = function (arg) {
  239. return accSub(arg, this);
  240. };
  241. /**
  242. ** 除法函数,用来得到精确的除法结果
  243. ** 说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
  244. ** 调用:accDiv(arg1,arg2)
  245. ** 返回值:arg1除以arg2的精确结果
  246. **/
  247. function accDiv(arg1, arg2) {
  248. var t1 = 0, t2 = 0, r1, r2;
  249. try {
  250. t1 = arg1.toString().split(".")[1].length;
  251. }
  252. catch (e) {
  253. }
  254. try {
  255. t2 = arg2.toString().split(".")[1].length;
  256. }
  257. catch (e) {
  258. }
  259. with (Math) {
  260. r1 = Number((arg1 + "").replace(".", ""));
  261. r2 = Number((arg2 + "").replace(".", ""));
  262. return (r1 / r2) * pow(10, t2 - t1);
  263. }
  264. }
  265. //给Number类型增加一个div方法,调用起来更加方便。
  266. Number.prototype.div = function (arg) {
  267. return accDiv(this, arg);
  268. };
  269. /**
  270. ** 乘法函数,用来得到精确的乘法结果
  271. ** 说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
  272. ** 调用:accMul(arg1,arg2)
  273. ** 返回值:arg1乘以 arg2的精确结果
  274. **/
  275. function accMul(arg1, arg2) {
  276. var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
  277. try {
  278. m += s1.split(".")[1].length;
  279. }
  280. catch (e) {
  281. }
  282. try {
  283. m += s2.split(".")[1].length;
  284. }
  285. catch (e) {
  286. }
  287. return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
  288. }
  289. // 给Number类型增加一个mul方法,调用起来更加方便。
  290. Number.prototype.mul = function (arg) {
  291. return accMul(arg, this);
  292. };
  293. function formatDate(now) {
  294. now = new Date(now);
  295. var year=now.getFullYear();
  296. var month=now.getMonth()+1;
  297. if(month<10){
  298. month="0"+month;
  299. }
  300. var date=now.getDate();
  301. return year+"年"+month+"月"+date+"日";
  302. }
  303. function formatTime(msd) {
  304. var time = parseFloat(msd) /1000;
  305. if (null!= time &&""!= time) {
  306. if (time >60&& time <60*60) {
  307. time = parseInt(time /60.0) +"分";
  308. // time = parseInt(time /60.0) +"分钟"+ parseInt((parseFloat(time /60.0) -
  309. // parseInt(time /60.0)) *60) +"秒";
  310. }else if (time >=60*60&& time <60*60*24) {
  311. // time = parseInt(time /3600.0) +"小时"+ parseInt((parseFloat(time /3600.0) -
  312. // parseInt(time /3600.0)) *60) +"分钟"+
  313. // parseInt((parseFloat((parseFloat(time /3600.0) - parseInt(time /3600.0)) *60) -
  314. // parseInt((parseFloat(time /3600.0) - parseInt(time /3600.0)) *60)) *60) +"秒";
  315. time = parseInt(time /3600.0) +"时"+ parseInt((parseFloat(time /3600.0) -
  316. parseInt(time /3600.0)) *60) +"分";
  317. }else {
  318. time = parseInt(time) +"分";
  319. }
  320. }else{
  321. time = "0分";
  322. }
  323. return time;
  324. }
  325. function formatMinutes(msd) {
  326. // 参数msd (秒)
  327. var time = parseFloat(msd);
  328. if (null!= time && ""!= time) {
  329. if (time >0&& time <60*60) {
  330. time = parseInt(time /60.0) +"分";
  331. }else{
  332. time = parseInt(time /3600.0) +"时"+ parseInt((parseFloat(time /3600.0) -
  333. parseInt(time /3600.0)) *60) +"分";
  334. }
  335. }else{
  336. time = "0分";
  337. }
  338. return time;
  339. }
  340. function formatDay(now) {
  341. now = new Date(now);
  342. var month=now.getMonth()+1;
  343. if(month<10){
  344. month="0"+month;
  345. }
  346. var date=now.getDate();
  347. if(date<10){
  348. date="0"+date;
  349. }
  350. return month+"-"+date;
  351. }
  352. function formatDateFull(now) {
  353. now = new Date(now);
  354. var year=now.getFullYear();
  355. var month=now.getMonth()+1;
  356. if(month<10){
  357. month="0"+month;
  358. }
  359. var date=now.getDate();
  360. if(date<10){
  361. date="0"+date;
  362. }
  363. return year+"-"+month+"-"+date;
  364. }
  365. function formatDateMinute(now) {
  366. now = new Date(now);
  367. var year=now.getFullYear();
  368. var month=now.getMonth()+1;
  369. if(month<10){
  370. month="0"+month;
  371. }
  372. var date=now.getDate();
  373. if(date<10){
  374. date="0"+date;
  375. }
  376. var hour=now.getHours();
  377. if(hour<10){
  378. hour="0"+hour;
  379. }
  380. var Minute=now.getMinutes();
  381. if(Minute<10){
  382. Minute="0"+Minute;
  383. }
  384. return year+"-"+month+"-"+date+" "+hour+":"+Minute;
  385. }
  386. function int_for_time(obj){
  387. return obj+":00";
  388. }
  389. //替换指定传入参数的值,paramName为参数,replaceWith为新值
  390. function replaceParamVal(paramName,replaceWith) {
  391. var oUrl = this.location.href.toString();
  392. var re=eval('/('+ paramName+'=)([^&]*)/gi');
  393. var nUrl = oUrl.replace(re,paramName+'='+replaceWith);
  394. window.history.pushState({},0,nUrl);
  395. }
  396. function isEmptyObject(e) {
  397. var t;
  398. for (t in e)
  399. return !1;
  400. return !0
  401. }
  402. function gotoTop() {
  403. mui('.my-scroll-wrapper').scroll().scrollTo(0,0,500);//500毫秒滚动到顶
  404. //$(".mui-scroll").css({"transform":"translate3d(0px, 0px, 0px) translateZ(0px)","transition-duration":"100ms"});
  405. };
  406. function gotoBottom(){
  407. mui('.my-scroll-wrapper').scroll().scrollToBottom();//500毫秒滚动到底部
  408. }
  409. $(document).on('tap', '.go_pro_list', function() {
  410. var positions='';
  411. if(typeof($(this).attr("pos"))!="undefined"){
  412. positions=$(this).attr("pos");
  413. location.href="pro-list.html?pos="+positions;
  414. }else{
  415. location.href="pro-list.html";
  416. }
  417. });
  418. $(document).on('tap', '.icon-shouye', function() {
  419. location.href="index.html";
  420. });
  421. //回到顶部
  422. function gotoTop(acceleration, stime) {
  423. acceleration = acceleration || 0.1;
  424. stime = stime || 10;
  425. var x1 = 0,
  426. y1 = 0,
  427. x2 = 0,
  428. y2 = 0,
  429. x3 = 0,
  430. y3 = 0;
  431. if (document.documentElement) {
  432. x1 = document.documentElement.scrollLeft || 0;
  433. y1 = document.documentElement.scrollTop || 0;
  434. }
  435. if (document.body) {
  436. x2 = document.body.scrollLeft || 0;
  437. y2 = document.body.scrollTop || 0;
  438. }
  439. var x3 = window.scrollX || 0;
  440. var y3 = window.scrollY || 0;
  441. var x = Math.max(x1, Math.max(x2, x3));
  442. var y = Math.max(y1, Math.max(y2, y3));
  443. var speeding = 1 + acceleration;
  444. window.scrollTo(Math.floor(x / speeding), Math.floor(y / speeding));
  445. if (x > 0 || y > 0) {
  446. var run = "gotoTop(" + acceleration + ", " + stime + ")";
  447. window.setTimeout(run, stime);
  448. }
  449. }
  450. /**
  451. * 该方法用于将Undefined转换为空值
  452. * @param val
  453. */
  454. function convertUndefinedToEmpty(val) {
  455. if (undefined == val || null == val||typeof val == undefined || typeof val == 'undefined'|| 'undefined' == val) {
  456. val = "";
  457. }
  458. return val;
  459. }
  460. /**
  461. * 该方法用于将Undefined转换为空值
  462. * @param val
  463. */
  464. function cufte(val) {
  465. return convertUndefinedToEmpty(val);
  466. }
  467. /**
  468. * 空值返回0,其他值返回原值
  469. * @param val
  470. */
  471. function cufteInt(val) {
  472. if(convertUndefinedToEmpty(val) == "")
  473. return 0;
  474. return val;
  475. }
  476. /**
  477. * 空值返回false
  478. * @param val
  479. */
  480. function isEmpty(val) {
  481. if(convertUndefinedToEmpty(val) == "")
  482. return false;
  483. return true;
  484. }