main.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. window.addEventListener('pageshow', function(e) {
  2. // 通过persisted属性判断是否存在 BF Cache
  3. if(e.persisted) {
  4. location.reload();
  5. }
  6. });
  7. var domanUrl = "//" + window.location.host;
  8. var base_path = "//h5.iamberry.com/iamberry";
  9. //var base_path = "/iamberry";
  10. //ajax loading
  11. $(window).ajaxStart(function(){
  12. $(".covers").show();
  13. });
  14. $(window).ajaxStop(function(){
  15. $(".covers").hide();
  16. });
  17. mui.each(document.querySelectorAll('#footer-bar-tab .mui-tab-item'), function(index, el) {
  18. el.addEventListener('tap', function() {
  19. switch(index) {
  20. case 0:
  21. mui.openWindow({
  22. url: 'index.html'
  23. });
  24. break;
  25. case 1:
  26. mui.openWindow({
  27. url: 'shopping-cart.html'
  28. });
  29. break;
  30. case 2:
  31. mui.openWindow({
  32. url: 'order-list.html'
  33. });
  34. break;
  35. case 3:
  36. mui.openWindow({
  37. url: 'my-center.html'
  38. });
  39. break;
  40. default:
  41. break;
  42. }
  43. }, false);
  44. });
  45. function time_before(t){
  46. var minute=1000*60;
  47. var hour=minute*60;
  48. var day=hour*24;
  49. var halfamonth=day*15;
  50. var month=day*30;
  51. var now=new Date().getTime();
  52. var diffValue=now-new Date().setTime(t);
  53. var monthC=diffValue/month;
  54. var weekC=diffValue/(7*day);
  55. var dayC=diffValue/day;
  56. var hourC=diffValue/hour;
  57. var minC=diffValue/minute;
  58. if(monthC>=1){
  59. result=""+parseInt(monthC)+"月前";
  60. }else if(weekC>=1){
  61. result=""+parseInt(weekC)+"周前";
  62. }else if(dayC>=1){
  63. result=""+parseInt(dayC)+"天前";
  64. }else if(hourC>=1){
  65. result=""+parseInt(hourC)+"小时前";
  66. }else if(minC>=2){
  67. result=""+parseInt(minC)+"分钟前";
  68. }else{
  69. result="刚刚";
  70. }
  71. return result;
  72. };
  73. //封装document.getElementById
  74. function dc(objectid) {
  75. if(document.getElementById && document.getElementById(objectid)) {
  76. return document.getElementById(objectid);// w3c dom
  77. } else if (document.all && document.all(objectid)) {
  78. return document.all(objectid);// msie 4 dom
  79. } else if (document.layers && document.layers[objectid]) {
  80. return document.layers[objectid];// nn 4 dom.. note: this won't find nested layers
  81. } else {
  82. return false;
  83. }
  84. };
  85. //生成随机字符,n长度
  86. function generateMixed(n) {
  87. 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'];
  88. var res = "";
  89. for(var i = 0; i < n ; i ++) {
  90. var id = Math.ceil(Math.random()*35);
  91. res += chars[id];
  92. }
  93. return res;
  94. }
  95. function getParam(paramName) {
  96. paramValue = "", isFound = !1;
  97. if(this.location.search.indexOf("?") == 0 && this.location.search.indexOf("=") > 1) {
  98. arrSource = unescape(this.location.search).substring(1, this.location.search.length).split("&"), i = 0;
  99. while(i < arrSource.length && !isFound) {
  100. arrSource[i].indexOf("=") > 0 && arrSource[i].split("=")[0].toLowerCase() == paramName.toLowerCase() && (paramValue = arrSource[i].split("=")[1], isFound = !0), i++
  101. }
  102. }
  103. return paramValue == "" && (paramValue = null), paramValue
  104. };
  105. function getQueryString(name) {
  106. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  107. var r = window.location.search.substr(1).match(reg);
  108. if (r != null) return unescape(r[2]); return null;
  109. }
  110. // 对Date的扩展,将 Date 转化为指定格式的String
  111. // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
  112. // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
  113. // 例子:
  114. // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
  115. // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
  116. Date.prototype.format = function(fmt)
  117. { //author: meizz
  118. var o = {
  119. "M+" : this.getMonth()+1, //月份
  120. "d+" : this.getDate(), //日
  121. "h+" : this.getHours(), //小时
  122. "m+" : this.getMinutes(), //分
  123. "s+" : this.getSeconds(), //秒
  124. "q+" : Math.floor((this.getMonth()+3)/3), //季度
  125. "S" : this.getMilliseconds() //毫秒
  126. };
  127. if(/(y+)/.test(fmt))
  128. fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  129. for(var k in o)
  130. if(new RegExp("("+ k +")").test(fmt))
  131. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
  132. return fmt;
  133. }
  134. //计算月份差
  135. function getMonthNumber(date1,date2){
  136. //默认格式为"2010-01-01",根据自己需要改格式和方法
  137. var d1=date1.replaceAll("-",''),d2=date2.replaceAll("-",'');
  138. var year1 = d1.substring(0,4);
  139. var year2 = d2.substring(0,4);
  140. var month1 = d1.substring(6,4);
  141. var month2 = d2.substring(6,4);
  142. var len=parseInt((year2-year1)*12+(month2-month1));
  143. return len;
  144. }
  145. //替换所有要替换的文字
  146. String.prototype.replaceAll = function (str1,str2){
  147. var str = this;
  148. var result = str.replace(eval("/"+str1+"/gi"),str2);
  149. return result;
  150. }
  151. /**
  152. ** 加法函数,用来得到精确的加法结果
  153. ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
  154. ** 调用:accAdd(arg1,arg2)
  155. ** 返回值:arg1加上arg2的精确结果
  156. **/
  157. function accAdd(arg1, arg2) {
  158. var r1, r2, m, c;
  159. try {
  160. r1 = arg1.toString().split(".")[1].length;
  161. }
  162. catch (e) {
  163. r1 = 0;
  164. }
  165. try {
  166. r2 = arg2.toString().split(".")[1].length;
  167. }
  168. catch (e) {
  169. r2 = 0;
  170. }
  171. c = Math.abs(r1 - r2);
  172. m = Math.pow(10, Math.max(r1, r2));
  173. if (c > 0) {
  174. var cm = Math.pow(10, c);
  175. if (r1 > r2) {
  176. arg1 = Number(arg1.toString().replace(".", ""));
  177. arg2 = Number(arg2.toString().replace(".", "")) * cm;
  178. } else {
  179. arg1 = Number(arg1.toString().replace(".", "")) * cm;
  180. arg2 = Number(arg2.toString().replace(".", ""));
  181. }
  182. } else {
  183. arg1 = Number(arg1.toString().replace(".", ""));
  184. arg2 = Number(arg2.toString().replace(".", ""));
  185. }
  186. return (arg1 + arg2) / m;
  187. }
  188. //给Number类型增加一个add方法,调用起来更加方便。
  189. Number.prototype.add = function (arg) {
  190. return accAdd(arg, this);
  191. };
  192. /**
  193. ** 除法函数,用来得到精确的除法结果
  194. ** 说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
  195. ** 调用:accDiv(arg1,arg2)
  196. ** 返回值:arg1除以arg2的精确结果
  197. **/
  198. function accDiv(arg1, arg2) {
  199. var t1 = 0, t2 = 0, r1, r2;
  200. try {
  201. t1 = arg1.toString().split(".")[1].length;
  202. }
  203. catch (e) {
  204. }
  205. try {
  206. t2 = arg2.toString().split(".")[1].length;
  207. }
  208. catch (e) {
  209. }
  210. with (Math) {
  211. r1 = Number((arg1 + "").replace(".", ""));
  212. r2 = Number((arg2 + "").replace(".", ""));
  213. return (r1 / r2) * pow(10, t2 - t1);
  214. }
  215. }
  216. //给Number类型增加一个div方法,调用起来更加方便。
  217. Number.prototype.div = function (arg) {
  218. return accDiv(this, arg);
  219. };
  220. /**
  221. ** 乘法函数,用来得到精确的乘法结果
  222. ** 说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
  223. ** 调用:accMul(arg1,arg2)
  224. ** 返回值:arg1乘以 arg2的精确结果
  225. **/
  226. function accMul(arg1, arg2) {
  227. var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
  228. try {
  229. m += s1.split(".")[1].length;
  230. }
  231. catch (e) {
  232. }
  233. try {
  234. m += s2.split(".")[1].length;
  235. }
  236. catch (e) {
  237. }
  238. return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
  239. }
  240. // 给Number类型增加一个mul方法,调用起来更加方便。
  241. Number.prototype.mul = function (arg) {
  242. return accMul(arg, this);
  243. };
  244. function formatDate(now) {
  245. now = new Date(now);
  246. var year=now.getFullYear();
  247. var month=now.getMonth()+1;
  248. if(month<10){
  249. month="0"+month;
  250. }
  251. var date=now.getDate();
  252. return year+"年"+month+"月"+date+"日";
  253. }
  254. function formatTime(msd) {
  255. var time = parseFloat(msd) /1000;
  256. if (null!= time &&""!= time) {
  257. if (time >60&& time <60*60) {
  258. time = parseInt(time /60.0) +"分";
  259. // time = parseInt(time /60.0) +"分钟"+ parseInt((parseFloat(time /60.0) -
  260. // parseInt(time /60.0)) *60) +"秒";
  261. }else if (time >=60*60&& time <60*60*24) {
  262. // time = parseInt(time /3600.0) +"小时"+ parseInt((parseFloat(time /3600.0) -
  263. // parseInt(time /3600.0)) *60) +"分钟"+
  264. // parseInt((parseFloat((parseFloat(time /3600.0) - parseInt(time /3600.0)) *60) -
  265. // parseInt((parseFloat(time /3600.0) - parseInt(time /3600.0)) *60)) *60) +"秒";
  266. time = parseInt(time /3600.0) +"时"+ parseInt((parseFloat(time /3600.0) -
  267. parseInt(time /3600.0)) *60) +"分";
  268. }else {
  269. time = parseInt(time) +"分";
  270. }
  271. }else{
  272. time = "0分";
  273. }
  274. return time;
  275. }
  276. function formatMinutes(msd) {
  277. // 参数msd (秒)
  278. var time = parseFloat(msd);
  279. if (null!= time && ""!= time) {
  280. if (time >0&& time <60*60) {
  281. time = parseInt(time /60.0) +"分";
  282. }else{
  283. time = parseInt(time /3600.0) +"时"+ parseInt((parseFloat(time /3600.0) -
  284. parseInt(time /3600.0)) *60) +"分";
  285. }
  286. }else{
  287. time = "0分";
  288. }
  289. return time;
  290. }
  291. function formatDay(now) {
  292. now = new Date(now);
  293. var month=now.getMonth()+1;
  294. if(month<10){
  295. month="0"+month;
  296. }
  297. var date=now.getDate();
  298. if(date<10){
  299. date="0"+date;
  300. }
  301. return month+"-"+date;
  302. }
  303. function formatDateFull(now) {
  304. now = new Date(now);
  305. var year=now.getFullYear();
  306. var month=now.getMonth()+1;
  307. if(month<10){
  308. month="0"+month;
  309. }
  310. var date=now.getDate();
  311. if(date<10){
  312. date="0"+date;
  313. }
  314. return year+"-"+month+"-"+date;
  315. }
  316. function formatDateMinute(now) {
  317. now = new Date(now);
  318. var year=now.getFullYear();
  319. var month=now.getMonth()+1;
  320. if(month<10){
  321. month="0"+month;
  322. }
  323. var date=now.getDate();
  324. if(date<10){
  325. date="0"+date;
  326. }
  327. var hour=now.getHours();
  328. if(hour<10){
  329. hour="0"+hour;
  330. }
  331. var Minute=now.getMinutes();
  332. if(Minute<10){
  333. Minute="0"+Minute;
  334. }
  335. return year+"-"+month+"-"+date+" "+hour+":"+Minute;
  336. }
  337. function int_for_time(obj){
  338. return obj+":00";
  339. }
  340. //替换指定传入参数的值,paramName为参数,replaceWith为新值
  341. function replaceParamVal(paramName,replaceWith) {
  342. var oUrl = this.location.href.toString();
  343. var re=eval('/('+ paramName+'=)([^&]*)/gi');
  344. var nUrl = oUrl.replace(re,paramName+'='+replaceWith);
  345. window.history.pushState({},0,nUrl);
  346. }
  347. function isEmptyObject(e) {
  348. var t;
  349. for (t in e)
  350. return !1;
  351. return !0
  352. }
  353. function gotoTop() {
  354. mui('.my-scroll-wrapper').scroll().scrollTo(0,0,500);//500毫秒滚动到顶
  355. //$(".mui-scroll").css({"transform":"translate3d(0px, 0px, 0px) translateZ(0px)","transition-duration":"100ms"});
  356. };
  357. function gotoBottom(){
  358. mui('.my-scroll-wrapper').scroll().scrollToBottom();//500毫秒滚动到底部
  359. }
  360. $(document).on('tap', '.icon-shouye', function() {
  361. location.href="index.html";
  362. });
  363. //回到顶部
  364. function gotoTop(acceleration, stime) {
  365. acceleration = acceleration || 0.1;
  366. stime = stime || 10;
  367. var x1 = 0,
  368. y1 = 0,
  369. x2 = 0,
  370. y2 = 0,
  371. x3 = 0,
  372. y3 = 0;
  373. if (document.documentElement) {
  374. x1 = document.documentElement.scrollLeft || 0;
  375. y1 = document.documentElement.scrollTop || 0;
  376. }
  377. if (document.body) {
  378. x2 = document.body.scrollLeft || 0;
  379. y2 = document.body.scrollTop || 0;
  380. }
  381. var x3 = window.scrollX || 0;
  382. var y3 = window.scrollY || 0;
  383. var x = Math.max(x1, Math.max(x2, x3));
  384. var y = Math.max(y1, Math.max(y2, y3));
  385. var speeding = 1 + acceleration;
  386. window.scrollTo(Math.floor(x / speeding), Math.floor(y / speeding));
  387. if (x > 0 || y > 0) {
  388. var run = "gotoTop(" + acceleration + ", " + stime + ")";
  389. window.setTimeout(run, stime);
  390. }
  391. }