hx-navbar.nvue 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159
  1. <template>
  2. <view class="hx-navbar" :style="{width:screenWidth + 'px'}">
  3. <view class="hx-navbar__content"
  4. :class="{'hx-navbar__fixed': conf.fixed,'hx-navbar__shadow':conf.shadow,'hx-navbar__border':conf.border}"
  5. :style="{width:screenWidth + 'px','background-color': !bgIsLine ? backgroundColorRgba : '','background-image':bgIsLine ? backgroundColorRgba : '',height: navbarHeight, color: txtColor}">
  6. <!-- <block v-if="backgroundImage">
  7. <view class="hx-navbar__img" :style="{'background-image': backgroundImageEnd,'opacity': bgImgTransparent[1]}"></view>
  8. <view class="hx-navbar__img" :style="{'background-image': backgroundImage,'opacity': bgImgTransparent[0]}"></view>
  9. </block> -->
  10. <view class="hx-navbar__content__imgctn" :style="{'opacity': bgImgTransparent[1]}" v-if="backgroundImage">
  11. <image class="hx-navbar__imgctn__img"
  12. :style="{'height': conf.height + statusBarHeight + 'px',width:screenWidth + 'px'}"
  13. :src="backgroundImageEnd" mode="scaleToFill"></image>
  14. </view>
  15. <view class="hx-navbar__content__imgctn" :style="{'opacity': bgImgTransparent[0]}" v-if="backgroundImage">
  16. <image class="hx-navbar__imgctn__img"
  17. :style="{'height': conf.height + statusBarHeight + 'px',width:screenWidth + 'px'}"
  18. :src="backgroundImage" mode="scaleToFill"></image>
  19. </view>
  20. <!-- #ifndef H5 -->
  21. <!-- 状态栏 -->
  22. <view
  23. :style="'height:' + statusBarHeight + 'px;' + (statusBarBackground ? 'background-color:'+ statusBarBackground : '')"
  24. class="hx-navbar__status" v-if="conf.statusBar"></view>
  25. <!-- #endif -->
  26. <!-- 小程序分开编译 -->
  27. <!-- #ifdef MP -->
  28. <view class="hx-navbar__content__main"
  29. :style="{ height: conf.height + 'px', fontSize: conf.fontSize,maxWidth: `calc(100vw - ${jnWidth}px - 13px)`}">
  30. <!-- #endif -->
  31. <!-- #ifndef MP -->
  32. <view class="hx-navbar__content__main" :style="{ height: conf.height + 'px', fontSize: conf.fontSize}">
  33. <!-- #endif -->
  34. <!-- 不是app的时候中返回和left在前面 -->
  35. <!-- #ifndef APP-PLUS-NVUE -->
  36. <view class="hx-navbar__content__main_back left_icon" @tap="onBack" v-if="conf.back">
  37. <text class="hxicon hx-navbar__icon" :class="{'hx-navbar__icontran':bgTransparent == 0}"
  38. :style="{color: backColor}">&#xe679;</text>
  39. <text class="hx_font_size" :style="{color: txtColor}"
  40. v-if="conf.backTxt">{{conf.backTxt}}</text>
  41. </view>
  42. <view class="hx-navbar__content__main_back left_icon" @tap="onClose()" v-if="conf.web">
  43. <text class="iconfont_yige hx-navbar__icon" :class="{'hx-navbar__icontran':bgTransparent == 0}"
  44. :style="{color: backColor}">&#xe867;</text>
  45. </view>
  46. <view class="hx-navbar__content__main_left" style="padding: 0;margin:0 13px 0 0;"
  47. v-if="conf.leftSlot">
  48. <slot name="leftSwitch" v-if="conf.leftSlotSwitch && slotSwitchOpacity == 0" />
  49. <slot name="left" v-else></slot>
  50. </view>
  51. <view class="hx-navbar__content__main_left"
  52. :style="{'padding': conf.back ||conf.leftSlot ? '0' : '0 9px 0 13px;' }" v-if="conf.leftButton">
  53. <block v-for="(btn,index) in conf.leftButton" :key="index">
  54. <view class="hx-navbar__content__main_left_btn left_icon" @tap="onClickBtn(btn)"
  55. :class="{'hx-navbar__btntran':bgTransparent == 0}">
  56. <text v-if="btn.position && btn.position == 'left'" class="hx-navbar__icon font"
  57. :class="conf.font"
  58. :style="{color:btn.color ? btn.color : txtColor,marginRight:btn.txt ? '2px': '0'}">{{iconHandle(btn.icon)}}</text>
  59. <text class="hx-navbar__content__main_lefticon_txt hx_font_size"
  60. :style="{color:btn.color ? btn.color : txtColor}" v-if="btn.txt">{{btn.txt}}</text>
  61. <text v-if="!btn.position || btn.position != 'left'" class="hx-navbar__icon font"
  62. :class="conf.font"
  63. :style="{color:btn.color ? btn.color : txtColor,marginLeft:btn.txt ? '2px': '0'}">{{iconHandle(btn.icon)}}</text>
  64. </view>
  65. </block>
  66. </view>
  67. <!-- #endif -->
  68. <!-- :class="" -->
  69. <view class="hx-navbar__content__main_center" v-if="!conf.search && !conf.maxSlot">
  70. <view class="hx-navbar__content__main_center_flex"></view>
  71. <view class="hx-navbar__content__main_center_txt">
  72. <text class="hx_font_size hx_text_overflow titleRef" :style="{color: txtColor}"
  73. v-if="!conf.centerSlot && conf.title">{{conf.title}}</text>
  74. <slot name="centerSwitch" v-if="conf.centerSlotSwitch && slotSwitchOpacity == 0" />
  75. <slot name="center" v-else />
  76. </view>
  77. <view class="hx-navbar__content__main_center_flex"></view>
  78. </view>
  79. <view class="hx-navbar__content__main_center" style="overflow: hidden"
  80. v-if="!conf.search && conf.maxSlot">
  81. <slot name="maxSwitch" v-if="conf.maxSlotSwitch && slotSwitchOpacity == 0" />
  82. <slot name="max" v-else />
  83. </view>
  84. <!-- #ifdef APP-PLUS-NVUE -->
  85. <view class="hx-navbar__content__main_back" @tap="onBack" v-if="conf.back">
  86. <!--txtColor -->
  87. <text class="hxicon hx-navbar__icon" :class="{'hx-navbar__icontran':bgTransparent == 0}"
  88. :style="{color:'#999999'}">&#xe679;</text>
  89. <text class="hx_font_size" :style="{color: txtColor}"
  90. v-if="conf.backTxt">{{conf.backTxt}}</text>
  91. </view>
  92. <view class="hx-navbar__content__main_left" style="padding: 0;margin:0 13px 0 0;"
  93. v-if="conf.leftSlot">
  94. <slot name="leftSwitch" v-if="conf.leftSlotSwitch && slotSwitchOpacity == 0" />
  95. <slot name="left" v-else></slot>
  96. </view>
  97. <view class="hx-navbar__content__main_left"
  98. :style="{'padding': conf.back ||conf.leftSlot ? '0' : '0 9px 0 13px;' }" v-if="conf.leftButton">
  99. <block v-for="(btn,index) in conf.leftButton" :key="index">
  100. <view class="hx-navbar__content__main_left_btn" @tap="onClickBtn(btn)"
  101. :class="{'hx-navbar__btntran':bgTransparent == 0}">
  102. <text v-if="btn.position && btn.position == 'left'" class="hx-navbar__icon"
  103. :class="conf.font"
  104. :style="{color:btn.color ? btn.color : txtColor,marginRight:btn.txt ? '2px': '0'}">{{iconHandle(btn.icon)}}</text>
  105. <text class="hx-navbar__content__main_lefticon_txt hx_font_size"
  106. :style="{color:btn.color ? btn.color : txtColor}" v-if="btn.txt">{{btn.txt}}</text>
  107. <text v-if="!btn.position || btn.position != 'left'" class="hx-navbar__icon"
  108. :class="conf.font"
  109. :style="{color:btn.color ? btn.color : txtColor,marginLeft:btn.txt ? '2px': '0'}">{{iconHandle(btn.icon)}}</text>
  110. </view>
  111. </block>
  112. </view>
  113. <!-- #endif -->
  114. <view class="hx-navbar__content__main_search"
  115. :style="{'padding-left': conf.leftButton ? '9px' : '13px','padding-right': conf.rightButton ? '9px' : '13px'}"
  116. v-if="conf.search" @click="searchClick">
  117. <text class="hxicon hx-navbar__content__main_search_hxicon"
  118. style="color:#dbdbdb;">&#xe65c;</text>
  119. <input type="text" class="hx-navbar__content__main_search_input hx_font_size"
  120. placeholder-style="color:#dbdbdb;" confirm-type="search" v-model="conf.search.value"
  121. :placeholder="conf.search.placeholder ? conf.search.placeholder : '请输入搜索内容'"
  122. :disabled="conf.search.disabled" @confirm="searchConfirm" @blur='searchBlur' />
  123. </view>
  124. <!-- #ifndef MP -->
  125. <view class="" style="flex: 1;" v-if="!conf.search"></view>
  126. <!-- #endif -->
  127. <view class="hx-navbar__content__main_right"
  128. :style="{padding: conf.rightSlot ? '0' : '0 13px 0 9px;'}" v-if="conf.rightButton">
  129. <block v-for="(btn,index) in conf.rightButton" :key="index">
  130. <view class="hx-navbar__content__main_right_btn" @tap="onClickBtn(btn)"
  131. :class="{'hx-navbar__btntran':bgTransparent == 0}">
  132. <text v-if="btn.position && btn.position == 'left'"
  133. class="hxicon hx-navbar__content__main_right_icon hx-navbar__icon"
  134. :class="conf.font"
  135. :style="{color:btn.color ? btn.color : txtColor,marginRight:btn.txt ? '2px': '0'}">{{iconHandle(btn.icon)}}</text>
  136. <text class="hx-navbar__content__main_right_txt hx_font_size"
  137. :style="{color:btn.color ? btn.color : txtColor}" v-if="btn.txt">{{btn.txt}}</text>
  138. <text v-if="!btn.position || btn.position != 'left'"
  139. class="hxicon hx-navbar__content__main_right_icon hx-navbar__icon"
  140. :class="conf.font"
  141. :style="{color:btn.color ? btn.color : txtColor,marginLeft:btn.txt ? '2px': '0'}">{{iconHandle(btn.icon)}}</text>
  142. </view>
  143. </block>
  144. </view>
  145. <view class="hx-navbar__content__main_right" style="padding: 0;margin: 0;" v-if="conf.rightSlot">
  146. <slot name="rightSwitch" v-if="conf.rightSlotSwitch && slotSwitchOpacity == 0" />
  147. <slot name="right" v-else />
  148. <!-- 滑动过度 和 突变两种模式,因不实用在此先注释 -->
  149. <!-- <view v-if="conf.rightSlotSwitch && (conf.slotSwitch == 1 || conf.slotSwitch == 2 && slotSwitchOpacity == 0) " :style="{'opacity': 1 - slotSwitchOpacity,top:statusBarHeight+ 1 + 'px'}">
  150. <slot name="rightSwitch" />
  151. </view>
  152. <view v-if="conf.slotSwitch == 1 || (conf.slotSwitch == 2 && slotSwitchOpacity != 0)" :style="{'opacity': conf.slotSwitch == 1 ? slotSwitchOpacity : 1,top:statusBarHeight + 1 + 'px'}">
  153. <slot name="right" />
  154. </view> -->
  155. </view>
  156. </view>
  157. </view>
  158. <!-- 占位符,一般都需要 -->
  159. <view v-if="conf.barPlaceholder && conf.fixed">
  160. <view :style="{ height: statusBarHeight + 'px'}" v-if="conf.statusBar" />
  161. <view :style="{ height: conf.height + 'px'}" />
  162. </view>
  163. </view>
  164. </template>
  165. <script>
  166. // #ifdef APP-PLUS-NVUE
  167. var domModule = weex.requireModule('dom');
  168. var b64 =
  169. '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'
  170. domModule.addRule('fontFace', {
  171. 'fontFamily': "hxcion",
  172. 'src': "url('data:font/truetype;charset=utf-8;base64," + b64 + "')"
  173. // 'src': "url('../../components/hx-navbar/txt.ttf')"
  174. });
  175. var he = require('he');
  176. // #endif
  177. export default {
  178. name: "hxNavbar",
  179. components: {
  180. },
  181. data() {
  182. return {
  183. backgroundColorRgba: '',
  184. backgroundColorRgb: 'rgb(222,222,222)',
  185. backgroundImage: null,
  186. backgroundImageEnd: null,
  187. //当前使用文字颜色
  188. txtColor: '#333333',
  189. // 背景颜色过度数组
  190. bgArr: [],
  191. // 文字颜色过度数组
  192. colorArr: [],
  193. // 状态栏颜色
  194. statusBarBackground: '',
  195. // 背景透明
  196. bgTransparent: 1,
  197. // 背景图片透明
  198. bgImgTransparent: [1, 1],
  199. // 小程序 胶囊宽度
  200. jnWidth: 0,
  201. // 背景颜色是否为线性渐变
  202. bgIsLine: false,
  203. // 插槽过度透明度
  204. slotSwitchOpacity: 1,
  205. // 默认设置
  206. conf: {
  207. // 标题
  208. title: '',
  209. titlePosition: 'center',
  210. // nav 高度
  211. height: 44,
  212. web: false, // 是否是web-view页面
  213. closePath: '', // 关闭当前页面需要返回的页面
  214. // 是否固定头部
  215. fixed: true,
  216. // 是否包含状态栏
  217. statusBar: true,
  218. // 状态栏字体颜色,只支持黑(#000000)和白(#FFFFFF)两种颜色。为数组则是滑动变色
  219. statusBarFontColor: "#000000",
  220. //状态栏背景颜色
  221. statusBarBackground: null,
  222. // 字体
  223. font: 'hxicon',
  224. // 字体大小
  225. fontSize: '18px',
  226. // 文字颜色,可以数组和string,为数组则是滑动变色 ["#000000","#ff9900"]
  227. color: "#333333",
  228. //背景颜色;参数一:透明度;参数二:背景颜色(array则为线性渐变,string为单色背景)、
  229. // [1,['#24bdab','#80c54c']]
  230. backgroundColor: [1, '#ffffff'],
  231. // 背景图片(array则为滑动切换背景图,string为单一背景图)
  232. // 普通背景
  233. // ['/static/xj.jpg']
  234. // 切换功能参数说明:第一张图片,第二张图,第一张图透明度,第二张图透明度
  235. // ['/static/xj.jpg','/static/xk.jpg',1,1]
  236. backgroundImg: null,
  237. // 线性渐变角度
  238. backgroundColorLinearDeg: 'to right',
  239. // 滑动距离
  240. slideHeight: 100,
  241. // 滑动后背景颜色;参数一:透明度;参数二:背景颜色(array则为线性渐变,string为单色背景)
  242. slideBackgroundColor: null,
  243. // 是否需要返回按钮
  244. back: true,
  245. // 返回文本 '返回',小程序无效
  246. backTxt: null,
  247. // 返回tab页面
  248. backTabPage: null,
  249. // 返回普通页面
  250. backPage: null,
  251. // 左侧按钮组,icon参数为必填
  252. leftButton: null,
  253. // 右侧按钮组,icon参数为必填
  254. rightButton: null,
  255. // rightButton:[{
  256. // key: 'address', // 标识,方便事件识别是哪一个按钮触发
  257. // icon: '&#xe64b;', // 图标代码
  258. // txt: '文本', // 文本,常用于城市选择
  259. // color: '#ff9900', // 图标颜色
  260. // position: 'left', // 图标居于文字left 或 right
  261. // },{
  262. // key: 'address', // 标识,方便事件识别是哪一个按钮触发
  263. // icon: '&#xe650;',
  264. // txt: '文本',
  265. // color: '#894574',
  266. // },]
  267. // 搜索框
  268. search: null,
  269. // search: {
  270. // value:'',
  271. // placeholder: '',
  272. // disabled: false
  273. // }
  274. // 阴影
  275. shadow: false,
  276. // 底边框
  277. border: false,
  278. // 导航栏占位符
  279. barPlaceholder: true,
  280. // 插槽滑动切换
  281. slotSwitch: 0,
  282. // 右插槽
  283. rightSlot: false,
  284. // 右插槽切换
  285. rightSlotSwitch: false,
  286. },
  287. titleWidth: null,
  288. };
  289. },
  290. props: {
  291. config: {
  292. type: Object,
  293. default: () => ({
  294. })
  295. },
  296. backColor: {
  297. type: String,
  298. default: 'white'
  299. }
  300. //订单返回弹窗
  301. // backoff:{
  302. // type:Boolean,
  303. // }
  304. },
  305. computed: {
  306. //获取系统状态栏高度
  307. statusBarHeight() {
  308. var that = this;
  309. return uni.getSystemInfoSync().statusBarHeight
  310. },
  311. navbarHeight() {
  312. var that = this;
  313. return uni.getSystemInfoSync().statusBarHeight + that.conf.height + 'px'
  314. },
  315. screenWidth() {
  316. return uni.getSystemInfoSync().screenWidth;
  317. }
  318. },
  319. created() {
  320. var that = this;
  321. // 小程序胶囊按钮长度
  322. // #ifdef MP-WEIXIN || MP-QQ || MP-BAIDU || MP-TOUTIAO
  323. let menuButtonInfo = uni.getMenuButtonBoundingClientRect();
  324. that.jnWidth = menuButtonInfo.width;
  325. // #endif
  326. // #ifdef MP-ALIPAY
  327. that.jnWidth = 87;
  328. // #endif
  329. that.init();
  330. },
  331. mounted() {
  332. this.setTime()
  333. },
  334. watch: {
  335. config(n, o) {
  336. this.init();
  337. this.setTime()
  338. }
  339. },
  340. methods: {
  341. setTime() {
  342. var that = this;
  343. this.$nextTick(function() {
  344. let useW = uni.getSystemInfoSync().screenWidth;
  345. let w = uni.createSelectorQuery().in(this).select(".titleRef");
  346. w.boundingClientRect(function(data) { //data - 各种参数
  347. if (data) {
  348. useW = useW - data.width;
  349. useW = useW / 2
  350. }
  351. }).exec()
  352. let left = uni.createSelectorQuery().in(this).select(".left_icon");
  353. left.boundingClientRect(function(data) { //data - 各种参数
  354. if (data) {
  355. useW = useW - data.left || 0;
  356. useW = useW - data.width || 0;
  357. }
  358. that.titleWidth = useW;
  359. }).exec()
  360. })
  361. },
  362. iconHandle(icon) {
  363. // #ifndef APP-PLUS-NVUE
  364. icon = icon.replace(/(&#x|;)/g, "")
  365. return unescape("%u" + icon)
  366. // #endif
  367. // #ifdef APP-PLUS-NVUE
  368. return he.decode(icon)
  369. // #endif
  370. },
  371. init() {
  372. var that = this;
  373. // 参数合并
  374. that.conf = Object.assign(that.conf, that.config)
  375. if (that.conf.title != '') {
  376. uni.setNavigationBarTitle({
  377. title: that.conf.title
  378. });
  379. }
  380. // 状态栏背景颜色
  381. if (that.conf.statusBarBackground) {
  382. if (typeof that.conf.statusBarBackground == 'object' && that.conf.statusBarBackground.length == 2) {
  383. that.statusBarBackground = that.conf.statusBarBackground[0];
  384. } else {
  385. that.statusBarBackground = that.conf.statusBarBackground;
  386. }
  387. }
  388. // 状态栏文字颜色
  389. if (that.conf.statusBarFontColor) {
  390. uni.setNavigationBarColor({
  391. frontColor: (typeof that.conf.statusBarFontColor == 'object') ? that.conf
  392. .statusBarFontColor[0] : that.conf.statusBarFontColor,
  393. backgroundColor: '#000000'
  394. });
  395. }
  396. //文字颜色
  397. if (that.conf.color != '') {
  398. if (typeof that.conf.color == 'object' && that.conf.color.length == 2) {
  399. that.txtColor = that.conf.color[0];
  400. that.colorArr = that.gradientColor(that.conf.color[0], that.conf.color[1], that.conf.slideHeight);
  401. } else {
  402. that.txtColor = that.conf.color;
  403. }
  404. }
  405. //背景图片存在时,背景色不生效
  406. if (that.conf.backgroundImg) {
  407. let img = '';
  408. if (typeof that.conf.backgroundImg == 'object') {
  409. img = that.conf.backgroundImg[0];
  410. if (that.conf.backgroundImg.length > 2) {
  411. that.bgTransparent = that.conf.backgroundImg[2];
  412. }
  413. } else {
  414. img = that.conf.backgroundImg;
  415. that.bgTransparent = 1;
  416. }
  417. that.backgroundImage = that.bgImgStringHandle(img);
  418. }
  419. // 背景颜色设置
  420. if (that.conf.backgroundColor) {
  421. let transparent = that.conf.backgroundColor[0];
  422. let background = that.conf.backgroundColor[1];
  423. if (typeof background == 'object' && background.length > 1) {
  424. // 为线性背景
  425. that.bgIsLine = true;
  426. }
  427. if (that.conf.slideBackgroundColor) {
  428. let backgroundEnd = that.conf.slideBackgroundColor[1];
  429. that.bgArr = [];
  430. if (background && typeof background == 'object' && background.length > 0) {
  431. for (var i in background) {
  432. that.bgArr.push(that.gradientColor(background[i], backgroundEnd[i], that.conf
  433. .slideHeight));
  434. }
  435. } else {
  436. that.bgArr.push(that.gradientColor(background, backgroundEnd, that.conf.slideHeight));
  437. }
  438. }
  439. that.bgTransparent = transparent;
  440. that.setBgColor(background, transparent);
  441. }
  442. if (that.conf.rightButton && that.conf.rightButton.length > 0) {
  443. }
  444. },
  445. onClose() {
  446. // 关闭当前页面,跳转某个页面
  447. if (this.conf.closePath) {
  448. uni.redirectTo({
  449. url: this.conf.closePath
  450. });
  451. } else {
  452. // 关闭当前页面,返回首页
  453. uni.switchTab({
  454. url: '/pages/home'
  455. });
  456. }
  457. },
  458. // 返回
  459. onBack() {
  460. var that = this;
  461. // if(that.backoff==true){
  462. // that.$mUtil.toast("已生成待付款订单")
  463. // console.log(7777)
  464. // }
  465. this.$emit('btnBack')
  466. // tabbar 页面
  467. if (that.conf.backTabPage) {
  468. uni.switchTab({
  469. url: that.conf.backTabPage
  470. });
  471. } else if (that.conf.backPage) {
  472. // 普通页面
  473. uni.redirectTo({
  474. url: that.conf.backPage
  475. });
  476. } else if (getCurrentPages().length > 1) {
  477. uni.navigateBack();
  478. } else {
  479. // #ifdef H5
  480. history.back();
  481. // #endif
  482. }
  483. },
  484. onClickBtn(e) {
  485. this.$emit('clickBtn', e)
  486. },
  487. pageScroll(e) {
  488. var that = this;
  489. const st = parseFloat(e.scrollTop.toFixed(2));
  490. // 滑动距离
  491. let slideHeight = that.conf.slideHeight;
  492. // 过度颜色数组用到的整数滑动距离
  493. let a = Math.round(st);
  494. if (a > 0) {
  495. a -= 1
  496. } else {
  497. a = 0
  498. }
  499. // 文字颜色滑动变色
  500. if (that.conf.color && typeof that.conf.color == 'object' && that.conf.color.length == 2) {
  501. let colorArr = that.colorArr;
  502. let colorData = [];
  503. let rgb = (a <= colorArr.length - 1) ? colorArr[a] : colorArr[colorArr.length - 1];
  504. that.txtColor = rgb;
  505. // if (st <= slideHeight) {
  506. // that.txtColor = that.conf.color[0];
  507. // } else {
  508. // that.txtColor = that.conf.color[1];
  509. // }
  510. }
  511. that.slotSwitchOpacity = that.transHandle(st, slideHeight, 1, 0)
  512. // --------------------- 状态栏文字滑动变色 ----------------------------
  513. // 参数为数组的时候生效
  514. if (that.conf.statusBarFontColor && typeof that.conf.statusBarFontColor == 'object' && that.conf
  515. .statusBarFontColor
  516. .length == 2) {
  517. // 滑动前 状态栏文字颜色
  518. if (st <= slideHeight) {
  519. uni.setNavigationBarColor({
  520. frontColor: that.conf.statusBarFontColor[0],
  521. backgroundColor: '#ffffff'
  522. });
  523. } else {
  524. uni.setNavigationBarColor({
  525. frontColor: that.conf.statusBarFontColor[1],
  526. backgroundColor: '#ffffff'
  527. });
  528. }
  529. }
  530. // 状态栏背景颜色
  531. if (that.conf.statusBarBackground && typeof that.conf.statusBarBackground == 'object' && that.conf
  532. .statusBarBackground
  533. .length == 2) {
  534. if (st <= slideHeight) {
  535. that.statusBarBackground = that.conf.statusBarBackground[0];
  536. } else {
  537. that.statusBarBackground = that.conf.statusBarBackground[1];
  538. }
  539. }
  540. // --------------------- 状态栏滑动变色 END --------------------------
  541. //--------------------- 背景图片 ---------------------------
  542. let BI = that.conf.backgroundImg;
  543. if (that.conf.backgroundImg && typeof that.conf.backgroundImg == 'object' && BI.length > 1) {
  544. let BIL = BI.length
  545. that.bgTransparent = BIL <= 3 ? 1 : that.transHandle(st, slideHeight, BI[2], BI[3]);
  546. that.bgImgTransparent[0] = BIL <= 3 ? 1 : that.transHandle(st, slideHeight, BI[2], 0);
  547. that.bgImgTransparent[1] = BI[3];
  548. let img = '';
  549. if (st <= slideHeight) {
  550. img = BI[0];
  551. } else {
  552. img = BI[1];
  553. }
  554. that.backgroundImage = that.bgImgStringHandle(BI[0]);
  555. that.backgroundImageEnd = that.bgImgStringHandle(BI[1])
  556. }
  557. //--------------------- 背景颜色 ---------------------------
  558. if (that.conf.slideBackgroundColor) {
  559. let bgArr = that.bgArr;
  560. var bgData = [];
  561. for (var i in that.bgArr) {
  562. let rgb = (a <= bgArr[i].length - 1) ? bgArr[i][a] : bgArr[i][bgArr[i].length - 1];
  563. bgData.push(rgb.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(","));
  564. }
  565. // 透明度
  566. let transparentStart = that.conf.backgroundColor[0];
  567. let transparentEnd = that.conf.slideBackgroundColor[0];
  568. let transparent = transparentEnd;
  569. if (st <= slideHeight) {
  570. // 透明度差值
  571. let cVal = Math.abs(transparentEnd - transparentStart);
  572. // 每1像素的透明度
  573. let tVal = parseFloat(cVal / slideHeight).toFixed(4);
  574. // 滑动后透明度的插值
  575. let curVal = parseFloat(tVal * st).toFixed(2);
  576. transparent = transparentStart > transparentEnd ? (transparentStart - curVal) : transparentStart +
  577. curVal;
  578. transparent = parseFloat(transparent).toFixed(2);
  579. //if(transparent>0 && transparent<1){transparent = transparent.toFixed(2)}
  580. }
  581. let backgroundEnd = that.conf.slideBackgroundColor[1];
  582. let rgbStr = '';
  583. if (typeof backgroundEnd == 'object' && backgroundEnd.length > 1) {
  584. rgbStr = "linear-gradient(" + that.conf.backgroundColorLinearDeg + ",";
  585. let l = bgData.length;
  586. for (var i in bgData) {
  587. let c = bgData[i];
  588. rgbStr += "rgba(" + c[0] + "," + c[1] + "," + c[2] + "," + transparent + ")";
  589. if (l != (i * 1) + 1) {
  590. rgbStr += ",";
  591. }
  592. }
  593. rgbStr += ")";
  594. } else {
  595. rgbStr = "rgba(" + bgData[0][0] + "," + bgData[0][1] + "," + bgData[0][2] + "," + transparent +
  596. ")";
  597. }
  598. that.bgTransparent = transparent;
  599. that.backgroundColorRgba = rgbStr;
  600. }
  601. //---------------------- 背景颜色 EDN -------------------------
  602. },
  603. // 透明度计算,
  604. // 起始位置,结束位置,起始透明度,目标透明度
  605. transHandle(hStart, hEnd, tStart, tEnd) {
  606. let transparent = tEnd;
  607. if (hStart <= hEnd) {
  608. // 透明度差值
  609. let cVal = Math.abs(tEnd - tStart);
  610. // 每1像素的透明度
  611. let tVal = parseFloat(cVal / hEnd).toFixed(4);
  612. // 滑动后透明度的插值
  613. let curVal = parseFloat(tVal * hStart).toFixed(2);
  614. transparent = tStart > tEnd ? (tStart - curVal) : tStart + curVal;
  615. transparent = parseFloat(transparent).toFixed(2)
  616. //if(transparent>0 && transparent<1){transparent = transparent.toFixed(2)}
  617. }
  618. return transparent;
  619. },
  620. // 起始颜色,结束颜色,过渡数量
  621. gradientColor(startColor, endColor, step) {
  622. var that = this;
  623. let startRGB = that.colorRgb(startColor); //转换为rgb数组模式
  624. let startR = startRGB[0];
  625. let startG = startRGB[1];
  626. let startB = startRGB[2];
  627. let endRGB = that.colorRgb(endColor);
  628. let endR = endRGB[0];
  629. let endG = endRGB[1];
  630. let endB = endRGB[2];
  631. let sR = (endR - startR) / step; //总差值
  632. let sG = (endG - startG) / step;
  633. let sB = (endB - startB) / step;
  634. let colorArr = [];
  635. for (let i = 0; i < step; i++) {
  636. //计算每一步的hex值
  637. var str = 'rgb(' + parseInt((sR * i + startR)) + ',' + parseInt((sG * i + startG)) + ',' + parseInt((
  638. sB * i +
  639. startB)) + ')';
  640. let hex = that.colorHex(str);
  641. colorArr.push(hex);
  642. }
  643. return colorArr;
  644. },
  645. // 转换函数
  646. colorRgb(sColor) {
  647. var that = this;
  648. var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  649. var sColor = sColor.toLowerCase();
  650. if (sColor && reg.test(sColor)) {
  651. if (sColor.length === 4) {
  652. var sColorNew = "#";
  653. for (var i = 1; i < 4; i += 1) {
  654. sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
  655. }
  656. sColor = sColorNew;
  657. }
  658. //处理六位的颜色值
  659. var sColorChange = [];
  660. for (var i = 1; i < 7; i += 2) {
  661. sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));
  662. }
  663. return sColorChange;
  664. } else {
  665. return sColor;
  666. }
  667. },
  668. colorHex(rgb) {
  669. var that = this;
  670. var _this = rgb;
  671. var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  672. if (/^(rgb|RGB)/.test(_this)) {
  673. var aColor = _this.replace(/(?:(|)|rgb|RGB)*/g, "").split(",");
  674. var strHex = "#";
  675. for (var i = 0; i < aColor.length; i++) {
  676. var hex = Number(aColor[i]).toString(16);
  677. hex = hex < 10 ? 0 + '' + hex : hex; // 保证每个rgb的值为2位
  678. if (hex === "0") {
  679. hex += hex;
  680. }
  681. strHex += hex;
  682. }
  683. if (strHex.length !== 7) {
  684. strHex = _this;
  685. }
  686. return strHex;
  687. } else if (reg.test(_this)) {
  688. var aNum = _this.replace(/#/, "").split("");
  689. if (aNum.length === 6) {
  690. return _this;
  691. } else if (aNum.length === 3) {
  692. var numHex = "#";
  693. for (var i = 0; i < aNum.length; i += 1) {
  694. numHex += (aNum[i] + aNum[i]);
  695. }
  696. return numHex;
  697. }
  698. } else {
  699. return _this;
  700. }
  701. },
  702. //背景颜色初始化
  703. // 透明度,背景颜色string ,array
  704. setBgColor(background, transparent) {
  705. var that = this;
  706. //如果存在背景图片则背景颜色失效
  707. // if(that.backgroundImg){
  708. // that.backgroundColorRgba = "url(" + that.backgroundImg + ") ";
  709. // return;
  710. // }
  711. //背景颜色
  712. if (typeof background == 'object' && background.length > 0) {
  713. let rgbStr = "linear-gradient(" + that.conf.backgroundColorLinearDeg + ",";
  714. let c = null;
  715. for (var i in background) {
  716. c = background[i];
  717. let o = that.colorRgb(c);
  718. rgbStr += `rgba(${o[0]}, ${o[1]}, ${o[2]}, ${transparent})`;
  719. if (background.length != (i * 1) + 1) {
  720. rgbStr += ",";
  721. }
  722. }
  723. rgbStr += ")";
  724. that.backgroundColorRgba = rgbStr;
  725. } else {
  726. let c = background;
  727. let o = that.colorRgb(c);
  728. that.backgroundColorRgba = `rgba(${o[0]}, ${o[1]}, ${o[2]}, ${transparent})`;
  729. }
  730. },
  731. bgImgStringHandle(img) {
  732. return img;
  733. // return `url(${img}) bottom / 100% no-repeat`;
  734. },
  735. // 搜索框,点击完成时触发
  736. searchConfirm(event) {
  737. this.$emit('searchConfirm', event.detail);
  738. },
  739. searchBlur(event) {
  740. this.$emit('searchBlur', event.detail);
  741. },
  742. // 搜索框点击事件
  743. searchClick(event) {
  744. this.$emit('searchClick', true);
  745. }
  746. }
  747. }
  748. </script>
  749. <style lang="scss">
  750. /* #ifndef APP-PLUS-NVUE */
  751. @font-face {
  752. font-family: 'hxicon';
  753. /* project id 2009392 */
  754. src: url(data:font/truetype;charset=utf-8;base64,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) format('truetype');
  755. }
  756. @font-face {
  757. font-family: 'iconfont';
  758. /* project id 2070236 */
  759. src: url('//at.alicdn.com/t/font_2070236_id1ac7qapa.eot');
  760. src: url('//at.alicdn.com/t/font_2070236_id1ac7qapa.eot?#iefix') format('embedded-opentype'),
  761. url('//at.alicdn.com/t/font_2070236_id1ac7qapa.woff2') format('woff2'),
  762. url('//at.alicdn.com/t/font_2070236_id1ac7qapa.woff') format('woff'),
  763. url('//at.alicdn.com/t/font_2070236_id1ac7qapa.ttf') format('truetype'),
  764. url('//at.alicdn.com/t/font_2070236_id1ac7qapa.svg#iconfont') format('svg');
  765. }
  766. /* #endif */
  767. $nav-height: 44px;
  768. .font {
  769. font-family: "iconfont" !important;
  770. font-size: 30rpx;
  771. font-style: normal;
  772. -webkit-font-smoothing: antialiased;
  773. -webkit-text-stroke-width: 0.2px;
  774. -moz-osx-font-smoothing: grayscale;
  775. }
  776. .hxicon {
  777. font-family: hxicon;
  778. font-size: 20px;
  779. font-style: normal;
  780. /* #ifndef APP-PLUS-NVUE */
  781. -webkit-font-smoothing: antialiased;
  782. -webkit-text-stroke-width: 0.2px;
  783. -moz-osx-font-smoothing: grayscale;
  784. /* #endif */
  785. }
  786. .hd {
  787. overflow: hidden;
  788. }
  789. //防止其他ui影响
  790. // .hx-navbar uni-view,
  791. // .hx-navbar uni-scroll-view,
  792. // .hx-navbar uni-swiper,
  793. // .hx-navbar uni-button,
  794. // .hx-navbar uni-input,
  795. // .hx-navbar uni-textarea,
  796. // .hx-navbar uni-label,
  797. // .hx-navbar uni-navigator,
  798. // .hx-navbar uni-image {
  799. // box-sizing: unset;
  800. // }
  801. // image{will-change: transform}
  802. /* #ifndef APP-NVUE */
  803. [class*="hx-navbar__"] {
  804. display: flex;
  805. }
  806. /* #endif */
  807. .hx-navbar {
  808. position: relative;
  809. padding-top: 0;
  810. overflow: hidden;
  811. flex: 1;
  812. &__stretch {
  813. align-items: stretch;
  814. }
  815. &__status {
  816. position: relative;
  817. z-index: 3;
  818. }
  819. &__icon {
  820. position: relative;
  821. top: 1px;
  822. //transition: all 0.2s;
  823. }
  824. &__icontran {
  825. border-radius: 100% !important;
  826. // background-color: rgba(0, 0, 0, .5) !important;
  827. width: 30px !important;
  828. height: 30px !important;
  829. line-height: 30px !important;
  830. text-align: center !important;
  831. color: #ffffff !important;
  832. transition: color, background 0.2s !important;
  833. }
  834. &__btntran {
  835. padding: 0 !important;
  836. margin-left: 6px !important;
  837. border-radius: 100% !important;
  838. background-color: rgba(0, 0, 0, .5) !important;
  839. width: 30px !important;
  840. height: 30px !important;
  841. line-height: 30px !important;
  842. text-align: center !important;
  843. color: #ffffff !important;
  844. transition: color, background 0.2s !important;
  845. }
  846. &__content {
  847. position: relative;
  848. flex: 1;
  849. z-index: 1;
  850. width: 100%;
  851. flex-direction: column;
  852. &__imgctn {
  853. position: absolute;
  854. left: 0;
  855. top: 0;
  856. right: 0;
  857. bottom: 0;
  858. z-index: 2;
  859. //transition: all 0.2s;
  860. &__img {}
  861. }
  862. &__main {
  863. position: relative;
  864. z-index: 3;
  865. flex: 1;
  866. flex-direction: row;
  867. align-items: center;
  868. padding: 0;
  869. &_back {
  870. flex-direction: row;
  871. align-items: center;
  872. height: 100%;
  873. padding: 0 13px;
  874. margin: 0;
  875. position: relative;
  876. z-index: 2;
  877. line-height: $nav-height;
  878. }
  879. &_search {
  880. position: relative;
  881. flex-direction: row;
  882. align-items: center;
  883. flex: 1;
  884. height: 100%;
  885. &_hxicon {
  886. position: absolute;
  887. left: 24px;
  888. font-size: 18px;
  889. color: #dbdbdb;
  890. }
  891. &_input {
  892. height: 30px;
  893. flex: 1;
  894. border-radius: 40px;
  895. background-color: rgba(32, 32, 32, .35);
  896. padding: 0 16px 0 36px;
  897. }
  898. }
  899. &_right {
  900. position: relative;
  901. z-index: 2;
  902. flex-direction: row;
  903. align-items: center;
  904. height: 100%;
  905. padding: 0 13px 0 9px;
  906. margin: 0;
  907. &_txt {
  908. max-width: 60px;
  909. lines: 1;
  910. text-overflow: ellipsis;
  911. }
  912. &_btn {
  913. justify-content: center;
  914. align-items: center;
  915. flex-direction: row;
  916. align-items: center;
  917. height: 100%;
  918. padding: 0 5px;
  919. }
  920. &_icon {
  921. justify-content: center;
  922. align-items: center;
  923. text-align: center;
  924. }
  925. }
  926. &_center {
  927. flex-direction: row;
  928. flex: 1;
  929. //height: 100%;
  930. align-items: stretch;
  931. /* #ifdef MP */
  932. width: 0;
  933. justify-content: left;
  934. /* #endif */
  935. /* #ifndef MP */
  936. position: absolute;
  937. top: 0;
  938. left: 0;
  939. right: 0;
  940. bottom: 0;
  941. z-index: 0;
  942. justify-content: center;
  943. /* #endif */
  944. &_txt {
  945. flex-direction: row;
  946. /* #ifndef MP */
  947. flex: 60;
  948. /* #endif */
  949. /* #ifdef APP-NVUE */
  950. lines: 1;
  951. /* #endif */
  952. /* #ifndef APP-NVUE */
  953. display: block;
  954. white-space: nowrap;
  955. overflow: hidden;
  956. /* #endif */
  957. height: $nav-height;
  958. justify-content: center;
  959. align-items: center;
  960. text-align: center;
  961. text-overflow: ellipsis;
  962. line-height: $nav-height;
  963. // overflow: hidden;
  964. }
  965. &_flex {
  966. /* #ifndef MP */
  967. flex: 32;
  968. /* #endif */
  969. /* #ifdef MP */
  970. width: 0;
  971. /* #endif */
  972. }
  973. }
  974. &_left {
  975. position: relative;
  976. z-index: 1;
  977. flex-direction: row;
  978. align-items: center;
  979. height: 100%;
  980. padding: 0 9px 0 13px;
  981. margin: 0;
  982. &_txt {
  983. width: 60px;
  984. lines: 1;
  985. text-overflow: ellipsis;
  986. }
  987. &_btn {
  988. flex-direction: row;
  989. align-items: center;
  990. height: 100%;
  991. padding: 0 5px;
  992. }
  993. // &_btn:first-child{
  994. // margin-left:-4px !important;
  995. // }
  996. }
  997. }
  998. }
  999. &__fixed {
  1000. position: fixed;
  1001. top: 0;
  1002. z-index: 99;
  1003. }
  1004. &__shadow {
  1005. box-shadow: 0 2upx 12upx #ccc;
  1006. }
  1007. &__border:after {
  1008. position: absolute;
  1009. z-index: 3;
  1010. bottom: 0;
  1011. left: 0;
  1012. right: 0;
  1013. height: 1px;
  1014. transform: scaleY(.5);
  1015. background-color: #efefef;
  1016. }
  1017. &__icon {
  1018. top: 0 !important;
  1019. font-size: 20px;
  1020. }
  1021. }
  1022. .hx_font_size {
  1023. font-size: 18px;
  1024. }
  1025. .hx_text_overflow {
  1026. /* #ifdef APP-NVUE */
  1027. flex: 1;
  1028. lines: 1;
  1029. justify-content: center;
  1030. align-items: center;
  1031. /* #endif */
  1032. /* #ifndef APP-NVUE */
  1033. display: block;
  1034. white-space: nowrap;
  1035. overflow: hidden;
  1036. /* #endif */
  1037. text-overflow: ellipsis;
  1038. text-align: center; //center
  1039. }
  1040. .title-center {
  1041. margin-left: 50%;
  1042. }
  1043. .hide__view {
  1044. display: none;
  1045. }
  1046. .hx-navbar__content__main_lefticon_txt {
  1047. font-size: 28rpx;
  1048. margin-left: 5rpx;
  1049. }
  1050. </style>