記錄一下開發公共元件的流程。
背景:pc端使用element-ui框架,本身是有返回頂部的元件的。現在需要在移動端使用。照著葫蘆畫瓢弄乙個。
記錄如何將公共元件通過install的方式,註冊為全域性的元件使用。
components目錄下,新建bacttop資料夾,內部包含乙個index.js檔案和乙個src資料夾。
src資料夾內放backtop.vue元件檔案。
|
--components
|--index.js
|-- backtop
|--index.js
|--src
|--backtop.vue
backtop下的index.js負責安裝,backtop.vue內部寫具體的元件**
index.js檔案內容:
// index.js
import backtop from
"./src/backtop"
;// 引入元件
// 配置安裝方法
/* istanbul ignore next */
backtop.
install
=function
(vue)
;// 匯出模組
export
default backtop;
backtop.vue檔案內容:
<
!-- xl-backtop樣式名,需要自己在樣式檔案中定義這個樣式內容 --
>
v-if=
"visible"
@click.stop=
"handleclick"
:style=""
class
="xl-backtop"
>
<
!-- 這裡是返回頂部的圖示 --
>
"arrow-up"
/>
<
/slot>
<
/div>
<
/template>
// 這裡引入了節流函式
import
from
"@/utils"
;const
cubic
=(value)
=> math.
pow(value,3)
;const
easeinoutcubic
=(value)
=>
value <
0.5?
cubic
(value *2)
/2:1
-cubic((
1- value)*2
)/2;
export
default
, target:
[string]
, right:
, bottom:,}
,data()
;}, computed:
px`;},
styleright()
px`;},
},mounted()
, methods:`)
;}this
.container =
this
.el;}}
,onscroll()
,handleclick
(e),
scrolltotop()
else};
raf(framefunc);}
,},beforedestroy()
,};<
/script>
返回頂部的樣式內容:
// 返回頂部
.xl-backtop
為了一次性註冊多個自己寫的功能元件,我們在components資料夾下面寫乙個index.js
components下的index負責一次性組合多個
// components/index.js
import backtop from
"./backtop"
;// 引入我們的返回頂部元件。其他的類似的一起寫在這裡
const components =
[backtop]
;// 其他的元件以陣列形式繼續寫
const
install
=function
(vue, opts =))
;};/* istanbul ignore if */if(
typeof window !==
"undefined"
&& window.vue)
// 組合匯出安裝方法
const exportsresult =
;object.
assign
(exportsresult, components)
;export
default exportsresult;
最後在專案的main.js安裝
// the vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import vue from
"vue";;
import store from
"./store"
;import router from
"./router"
;// 自己封裝的公共安裝元件
import xlcomponent from
"@/components"
;vue.
use(xlcomponent)
;import
"@/styles/index.less"
;// 全域性 css
vue.config.productiontip =
false
;/* eslint-disable no-new */
newvue()
;
原因是document.documentelement.scrolltop在安卓端始終是0;只有pc端和ios端才是正常的。
改寫backtop元件中的**,完成相容。
"van-fade"
>
v-if=
"visible"
@click.stop=
"handleclick"
:style=""
class
="xl-backtop"
>
"arrow-up" color=
"#13b7f6"
/>
<
/slot>
<
/div>
<
/transition>
<
/template>
import
from
"@/utils"
;const
cubic
=(value)
=> math.
pow(value,3)
;const
easeinoutcubic
=(value)
=>
value <
0.5?
cubic
(value *2)
/2:1
-cubic((
1- value)*2
)/2;
export
default
, target:
[string]
, right:
, bottom:,}
,data()
;}, computed:
px`;},
styleright()
px`;},
},mounted()
, methods:`)
;}this
.container =
this
.el;}}
,onscroll()
,handleclick
(e),
scrolltotop()
else};
raf(framefunc);}
,},beforedestroy()
,};<
/script>
vue練習 返回頂部
先來乙個小小的圖示按鈕 scroll click totop v show showtop 複製 總體定義基本狀態 data 複製 監聽當前滾動條的位置 mounted 複製 實現滾動效果 methods this.scrollstate 1 e.preventdefault let this th...
vue元件開發之元件插槽
作用 父元件向子元件傳遞內容 插槽位置 vue.component alert box 具名插槽定義 就是有名字的插槽 定義name header slot 內容solt header 內容h1 沒有名稱的話就匹配到沒有name屬性的插槽中 還可以使用template標籤進行使用 template只...
元件化開發之vue
今天寫了寫vue的元件化開發demo,有些小的心得。分享一下。元件化意味著 可以復用,呼叫元件就可以了。然後可以通過元件呼叫元件的相關能力。例如以前我做元件化開發的乙個小專案 原生js元件的實現 這就是乙個 了,分割成以頁面為一級單位,元件為二級單位的乙個格局,然後呼叫addpage addcomp...