2 lines
2.2 KiB
JavaScript
2 lines
2.2 KiB
JavaScript
import{b9 as y,d as L,ba as N,bb as $,T as w,bc as A,q as l,h as b,N as p,L as B,bd as I,X as M,be as f,bf as R,bg as U,bh as X}from"./index-bXlTbVTS.js";const[Y,r,q]=y("pull-refresh"),D=50,C=["pulling","loosing","success"],F={disabled:Boolean,modelValue:Boolean,headHeight:f(D),successText:String,pullingText:String,loosingText:String,loadingText:String,pullDistance:N,successDuration:f(500),animationDuration:f(300)};var G=L({name:Y,props:F,emits:["change","refresh","update:modelValue"],setup(s,{emit:d,slots:o}){let u;const g=b(),T=b(),x=$(g),e=p({status:"normal",distance:0,duration:0}),i=U(),H=()=>{if(s.headHeight!==D)return{height:`${s.headHeight}px`}},h=()=>e.status!=="loading"&&e.status!=="success"&&!s.disabled,P=t=>{const a=+(s.pullDistance||s.headHeight);return t>a&&(t<a*2?t=a+(t-a)/2:t=a*1.5+(t-a*2)/4),Math.round(t)},n=(t,a)=>{const c=+(s.pullDistance||s.headHeight);e.distance=t,a?e.status="loading":t===0?e.status="normal":t<c?e.status="pulling":e.status="loosing",d("change",{status:e.status,distance:t})},m=()=>{const{status:t}=e;return t==="normal"?"":s[`${t}Text`]||q(t)},k=()=>{const{status:t,distance:a}=e;if(o[t])return o[t]({distance:a});const c=[];return C.includes(t)&&c.push(l("div",{class:r("text")},[m()])),t==="loading"&&c.push(l(B,{class:r("loading")},{default:m})),c},E=()=>{e.status="success",setTimeout(()=>{n(0)},+s.successDuration)},v=t=>{u=R(x.value)===0,u&&(e.duration=0,i.start(t))},V=t=>{h()&&v(t)},_=t=>{if(h()){u||v(t);const{deltaY:a}=i;i.move(t),u&&a.value>=0&&i.isVertical()&&(I(t),n(P(a.value)))}},S=()=>{u&&i.deltaY.value&&h()&&(e.duration=+s.animationDuration,e.status==="loosing"?(n(+s.headHeight,!0),d("update:modelValue",!0),M(()=>d("refresh"))):n(0))};return w(()=>s.modelValue,t=>{e.duration=+s.animationDuration,t?n(+s.headHeight,!0):o.success||s.successText?E():n(0,!1)}),A("touchmove",_,{target:T}),()=>{var t;const a={transitionDuration:`${e.duration}ms`,transform:e.distance?`translate3d(0,${e.distance}px, 0)`:""};return l("div",{ref:g,class:r()},[l("div",{ref:T,class:r("track"),style:a,onTouchstartPassive:V,onTouchend:S,onTouchcancel:S},[l("div",{class:r("head"),style:H()},[k()]),(t=o.default)==null?void 0:t.call(o)])])}}});const z=X(G);export{z as P};
|