hx-navbar.nvue 43 KB

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