tool.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //防抖debounce代码:
  2. export function debounce(fn,delay=500) {
  3. var timeout = null; // 创建一个标记用来存放定时器的返回值
  4. return function (e) {
  5. // 每当用户输入的时候把前一个 setTimeout clear 掉
  6. clearTimeout(timeout);
  7. // 然后又创建一个新的 setTimeout, 这样就能保证interval 间隔内如果时间持续触发,就不会执行 fn 函数
  8. timeout = setTimeout(() => {
  9. fn.apply(this, arguments);
  10. }, delay);
  11. };
  12. }
  13. // 返回两个经纬度之间的距离 单位米
  14. const earthDistance = function (location1, location2) {
  15. const lat1 = parseFloat(location1.lat);
  16. const lng1 = parseFloat(location1.lng);
  17. const lat2 = parseFloat(location2.lat);
  18. const lng2 = parseFloat(location2.lng);
  19. const EARTH_RADIUS = 6378137.0; //单位M
  20. const PI = Math.PI;
  21. function getRad(d) {
  22. return d * PI / 180.0;
  23. }
  24. let f = getRad((lat1 + lat2) / 2);
  25. let g = getRad((lat1 - lat2) / 2);
  26. let l = getRad((lng1 - lng2) / 2);
  27. let sg = Math.sin(g);
  28. let sl = Math.sin(l);
  29. let sf = Math.sin(f);
  30. let s, c, w, r, d, h1, h2;
  31. let a = EARTH_RADIUS;
  32. let fl = 1 / 298.257;
  33. sg = sg * sg;
  34. sl = sl * sl;
  35. sf = sf * sf;
  36. s = sg * (1 - sl) + (1 - sf) * sl;
  37. c = (1 - sg) * (1 - sl) + sf * sl;
  38. w = Math.atan(Math.sqrt(s / c));
  39. r = Math.sqrt(s * c) / w;
  40. d = 2 * w * a;
  41. h1 = (3 * r - 1) / 2 / c;
  42. h2 = (3 * r + 1) / 2 / s;
  43. return d * (1 + fl * (h1 * sf * (1 - sg) - h2 * (1 - sf) * sg));
  44. };
  45. //rpx转换px px=rpx * (屏幕宽度 / 750)
  46. export const rpxTopx = function (rpx) {
  47. let width = uni.getWindowInfo().screenWidth
  48. let px = rpx *( width / 750 );
  49. return px
  50. }