|
@ -1,15 +1,15 @@ |
|
|
import {onMounted, ref} from "vue"; |
|
|
import {onMounted, ref} from "vue"; |
|
|
|
|
|
|
|
|
export function OnRefresh(hookEvent) { |
|
|
export function OnRefresh(hookEvent:()=>{}) { |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
export function OnLoadMore(hookEvent) { |
|
|
export function OnLoadMore(hookEvent:()=>{}) { |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
export default function (el) { |
|
|
export default function (el:string) { |
|
|
let exportData = {} |
|
|
let exportData:any = {} |
|
|
let ELoading = { |
|
|
let ELoading = { |
|
|
NORMAL: 0, |
|
|
NORMAL: 0, |
|
|
LOADING: 1, |
|
|
LOADING: 1, |
|
@ -26,19 +26,19 @@ export default function (el) { |
|
|
exportData.isRefresh = isRefresh; |
|
|
exportData.isRefresh = isRefresh; |
|
|
exportData.isLoading = isLoading; |
|
|
exportData.isLoading = isLoading; |
|
|
|
|
|
|
|
|
let refreshArray = []; |
|
|
let refreshArray:((done:Function)=>{})[] = []; |
|
|
exportData.RefreshEvent = (hook) => { |
|
|
exportData.RefreshEvent = (hook:()=>{}) => { |
|
|
refreshArray.push(hook) |
|
|
refreshArray.push(hook) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
let loadMoreArray = []; |
|
|
let loadMoreArray:((done:Function)=>{})[] = []; |
|
|
exportData.LoadMoreEvent = (hook) => { |
|
|
exportData.LoadMoreEvent = (hook:()=>{}) => { |
|
|
loadMoreArray.push(hook) |
|
|
loadMoreArray.push(hook) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
let list = null |
|
|
let list:HTMLElement|null = null |
|
|
|
|
|
|
|
|
function Refreshing(needAnim) { |
|
|
function Refreshing(needAnim?:boolean) { |
|
|
if (!list) { |
|
|
if (!list) { |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
@ -50,6 +50,9 @@ export default function (el) { |
|
|
let done = ()=>{ |
|
|
let done = ()=>{ |
|
|
isRefresh.value = ERefresh.END |
|
|
isRefresh.value = ERefresh.END |
|
|
setTimeout(() => { |
|
|
setTimeout(() => { |
|
|
|
|
|
if (!list) { |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
list.style.transform = `translateY(${0}px)`; |
|
|
list.style.transform = `translateY(${0}px)`; |
|
|
setTimeout(() => { |
|
|
setTimeout(() => { |
|
|
isRefresh.value = ERefresh.NORMAL |
|
|
isRefresh.value = ERefresh.NORMAL |
|
@ -68,7 +71,7 @@ export default function (el) { |
|
|
loadMoreArray.forEach(v => v(done)) |
|
|
loadMoreArray.forEach(v => v(done)) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
exportData.Refreshing = (type, needAnim) => { |
|
|
exportData.Refreshing = (type:string, needAnim:boolean) => { |
|
|
setTimeout(() => { |
|
|
setTimeout(() => { |
|
|
if (type == undefined) { |
|
|
if (type == undefined) { |
|
|
Refreshing() |
|
|
Refreshing() |
|
@ -77,7 +80,7 @@ export default function (el) { |
|
|
Refreshing(needAnim) |
|
|
Refreshing(needAnim) |
|
|
} |
|
|
} |
|
|
if (!type) { |
|
|
if (!type) { |
|
|
LoadMoreing(needAnim) |
|
|
LoadMoreing() |
|
|
} |
|
|
} |
|
|
},0) |
|
|
},0) |
|
|
} |
|
|
} |
|
@ -90,14 +93,14 @@ export default function (el) { |
|
|
let zu = .2 |
|
|
let zu = .2 |
|
|
let pageHeight = window.innerHeight; // 屏幕高度
|
|
|
let pageHeight = window.innerHeight; // 屏幕高度
|
|
|
let moreHeight = 50; |
|
|
let moreHeight = 50; |
|
|
let parentNode = list.parentNode |
|
|
let parentNode = list!.parentNode |
|
|
let recordPoint = true // 是否可以记录起始点(下拉加载用)
|
|
|
let recordPoint = true // 是否可以记录起始点(下拉加载用)
|
|
|
let canRefresh = true // 是否可以刷新(下拉加载用)
|
|
|
let canRefresh = true // 是否可以刷新(下拉加载用)
|
|
|
let canLoading = true //
|
|
|
let canLoading = true //
|
|
|
let lastScrollTop = 0 |
|
|
let lastScrollTop = 0 |
|
|
parentNode.addEventListener("scroll", (e) => { |
|
|
parentNode!.addEventListener("scroll", (e) => { |
|
|
let listHeight = list.offsetHeight; // 列表高度
|
|
|
let listHeight = list!.offsetHeight; // 列表高度
|
|
|
let top = parentNode.scrollTop; |
|
|
let top = (<HTMLElement>parentNode)!.scrollTop; |
|
|
if (top <= 50) { |
|
|
if (top <= 50) { |
|
|
//下拉刷新
|
|
|
//下拉刷新
|
|
|
canRefresh = true |
|
|
canRefresh = true |
|
@ -110,10 +113,10 @@ export default function (el) { |
|
|
} |
|
|
} |
|
|
lastScrollTop = top |
|
|
lastScrollTop = top |
|
|
}) |
|
|
}) |
|
|
list.addEventListener("touchstart", (e) => { |
|
|
list!.addEventListener("touchstart", (e) => { |
|
|
isMove = true |
|
|
isMove = true |
|
|
}) |
|
|
}) |
|
|
list.addEventListener("touchmove", (e) => { |
|
|
list!.addEventListener("touchmove", (e) => { |
|
|
if (!isMove || !canRefresh || |
|
|
if (!isMove || !canRefresh || |
|
|
(isRefresh.value != ERefresh.NORMAL |
|
|
(isRefresh.value != ERefresh.NORMAL |
|
|
&& isRefresh.value != ERefresh.PRELOADING |
|
|
&& isRefresh.value != ERefresh.PRELOADING |
|
@ -128,8 +131,8 @@ export default function (el) { |
|
|
} |
|
|
} |
|
|
let y = (touch.clientY - startY) * zu; |
|
|
let y = (touch.clientY - startY) * zu; |
|
|
if (y > 0) { |
|
|
if (y > 0) { |
|
|
list.style.transform = `translateY(${y}px)` |
|
|
list!.style.transform = `translateY(${y}px)` |
|
|
list.style.transition = '' |
|
|
list!.style.transition = '' |
|
|
if (y > 70) { |
|
|
if (y > 70) { |
|
|
isRefresh.value = ERefresh.PRELOADING |
|
|
isRefresh.value = ERefresh.PRELOADING |
|
|
} else { |
|
|
} else { |
|
@ -138,18 +141,18 @@ export default function (el) { |
|
|
} |
|
|
} |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
list.addEventListener("touchend", (e) => { |
|
|
list!.addEventListener("touchend", (e) => { |
|
|
isMove = false |
|
|
isMove = false |
|
|
recordPoint = true |
|
|
recordPoint = true |
|
|
if (isRefresh.value == ERefresh.LOADING) { |
|
|
if (isRefresh.value == ERefresh.LOADING) { |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
list.style.transition = `transform .4s ease`; |
|
|
list!.style.transition = `transform .4s ease`; |
|
|
if (isRefresh.value == ERefresh.PRELOADING) { |
|
|
if (isRefresh.value == ERefresh.PRELOADING) { |
|
|
Refreshing() |
|
|
Refreshing() |
|
|
} else { |
|
|
} else { |
|
|
isRefresh.value = ERefresh.NORMAL |
|
|
isRefresh.value = ERefresh.NORMAL |
|
|
list.style.transform = `translateY(${0})`; |
|
|
list!.style.transform = `translateY(${0})`; |
|
|
} |
|
|
} |
|
|
}) |
|
|
}) |
|
|
|
|
|
|