su-fixed.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. "use strict";
  2. const common_vendor = require("../../../common/vendor.js");
  3. const sheep_index = require("../../index.js");
  4. require("../../url/index.js");
  5. require("../../store/index.js");
  6. require("../../store/app.js");
  7. require("../../api/promotion/diy.js");
  8. require("../../request/index.js");
  9. require("../../config/index.js");
  10. require("../../platform/index.js");
  11. require("../../platform/provider/wechat/index.js");
  12. require("../../platform/provider/wechat/miniProgram.js");
  13. require("../../api/member/auth.js");
  14. require("../../api/member/social.js");
  15. require("../../api/member/user.js");
  16. require("../../platform/provider/apple/index.js");
  17. require("../../platform/share.js");
  18. require("../../router/index.js");
  19. require("../../hooks/useModal.js");
  20. require("../../helper/index.js");
  21. require("../../helper/test.js");
  22. require("../../helper/digit.js");
  23. require("../../helper/throttle.js");
  24. require("../../platform/pay.js");
  25. require("../../api/pay/order.js");
  26. require("../../store/user.js");
  27. require("../../store/cart.js");
  28. require("../../api/trade/cart.js");
  29. require("../../api/pay/wallet.js");
  30. require("../../api/trade/order.js");
  31. require("../../api/promotion/coupon.js");
  32. require("../../store/sys.js");
  33. require("../../store/modal.js");
  34. require("../../config/zIndex.js");
  35. const _sfc_main = {
  36. __name: "su-fixed",
  37. props: {
  38. noNav: {
  39. type: Boolean,
  40. default: false
  41. },
  42. bottom: {
  43. type: Boolean,
  44. default: false
  45. },
  46. bg: {
  47. type: String,
  48. default: ""
  49. },
  50. bgStyles: {
  51. type: Object,
  52. default() {
  53. }
  54. },
  55. val: {
  56. type: Number,
  57. default: 0
  58. },
  59. width: {
  60. type: [String, Number],
  61. default: 0
  62. },
  63. alway: {
  64. type: Boolean,
  65. default: true
  66. },
  67. opacity: {
  68. type: Boolean,
  69. default: false
  70. },
  71. index: {
  72. type: [Number, String],
  73. default: 0
  74. },
  75. placeholder: {
  76. type: [Boolean],
  77. default: false
  78. },
  79. sticky: {
  80. type: [Boolean],
  81. default: false
  82. },
  83. noFixed: {
  84. type: Boolean,
  85. default: false
  86. },
  87. ui: {
  88. type: String,
  89. default: ""
  90. },
  91. clickTo: {
  92. type: Boolean,
  93. default: false
  94. },
  95. //是否需要安全区
  96. isInset: {
  97. type: Boolean,
  98. default: true
  99. }
  100. },
  101. setup(__props) {
  102. const props = __props;
  103. const { safeAreaInsets } = sheep_index.sheep.$platform.device;
  104. const vm = common_vendor.getCurrentInstance();
  105. const uuid = sheep_index.sheep.$helper.guid();
  106. const sys_navBar = sheep_index.sheep.$platform.navbar;
  107. const state = common_vendor.reactive({
  108. content: {},
  109. fixed: true,
  110. scrollTop: 0,
  111. opacityVal: 0
  112. });
  113. const insetHeight = common_vendor.computed(() => {
  114. if (state.fixed && props.bottom) {
  115. if (props.isInset) {
  116. return props.val + "px";
  117. } else {
  118. return props.val + safeAreaInsets.bottom + "px";
  119. }
  120. } else {
  121. return "auto";
  122. }
  123. });
  124. state.fixed = !common_vendor.unref(props.sticky);
  125. common_vendor.onPageScroll((e) => {
  126. let top = e.scrollTop;
  127. state.scrollTop = top;
  128. state.opacityVal = top > sheep_index.sheep.$platform.navbar ? 1 : top * 0.01;
  129. });
  130. common_vendor.onMounted(() => {
  131. common_vendor.nextTick$1(() => {
  132. computedQuery();
  133. });
  134. });
  135. const computedQuery = () => {
  136. common_vendor.index.createSelectorQuery().in(vm).select(`#fixed-${uuid}`).boundingClientRect((data) => {
  137. if (data != null) {
  138. state.content = data;
  139. if (common_vendor.unref(props.sticky)) {
  140. setFixed(state.scrollTop);
  141. }
  142. }
  143. }).exec();
  144. };
  145. const setFixed = (value) => {
  146. if (common_vendor.unref(props.bottom)) {
  147. state.fixed = value >= state.content.bottom - sheep_index.sheep.$platform.device.windowHeight + state.content.height + common_vendor.unref(props.val);
  148. } else {
  149. state.fixed = value >= state.content.top - (common_vendor.unref(props.noNav) ? common_vendor.unref(props.val) : common_vendor.unref(props.val) + sheep_index.sheep.$platform.navbar);
  150. }
  151. };
  152. const toTop = () => {
  153. if (props.hasToTop) {
  154. common_vendor.index.pageScrollTo({
  155. scrollTop: state.content.top,
  156. duration: 100
  157. });
  158. }
  159. };
  160. return (_ctx, _cache) => {
  161. return common_vendor.e({
  162. a: common_vendor.unref(safeAreaInsets).bottom && __props.bottom && __props.isInset
  163. }, common_vendor.unref(safeAreaInsets).bottom && __props.bottom && __props.isInset ? {
  164. b: common_vendor.s({
  165. height: common_vendor.unref(safeAreaInsets).bottom + "px"
  166. })
  167. } : {}, {
  168. c: common_vendor.o(toTop),
  169. d: common_vendor.s({
  170. zIndex: __props.index + common_vendor.unref(sheep_index.sheep).$zIndex.navbar
  171. }),
  172. e: __props.bottom
  173. }, __props.bottom ? {
  174. f: common_vendor.n(__props.bg)
  175. } : {}, {
  176. g: common_vendor.n(__props.ui),
  177. h: common_vendor.n(__props.bg),
  178. i: common_vendor.s({
  179. zIndex: __props.index + common_vendor.unref(sheep_index.sheep).$zIndex.navbar - 1
  180. }),
  181. j: common_vendor.s(__props.bgStyles),
  182. k: common_vendor.s(__props.opacity ? {
  183. opacity: state.opacityVal
  184. } : ""),
  185. l: `fixed-${common_vendor.unref(uuid)}`,
  186. m: common_vendor.n({
  187. fixed: state.fixed
  188. }),
  189. n: common_vendor.s({
  190. left: __props.sticky ? "auto" : "0px",
  191. top: state.fixed && !__props.bottom ? (__props.noNav ? __props.val : __props.val + common_vendor.unref(sys_navBar)) + "px" : "auto",
  192. bottom: common_vendor.unref(insetHeight),
  193. zIndex: __props.index + common_vendor.unref(sheep_index.sheep).$zIndex.navbar
  194. }),
  195. o: common_vendor.s(!__props.alway ? {
  196. opacity: state.opacityVal
  197. } : ""),
  198. p: __props.sticky ? state.fixed : __props.placeholder && state.fixed
  199. }, (__props.sticky ? state.fixed : __props.placeholder && state.fixed) ? {
  200. q: common_vendor.s({
  201. height: state.content.height + "px",
  202. width: __props.width + "px"
  203. })
  204. } : {});
  205. };
  206. }
  207. };
  208. const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__file", "/Users/RuHu.Xu/Desktop/mall-newfeifan-zx-app/sheep/ui/su-fixed/su-fixed.vue"]]);
  209. wx.createComponent(Component);