solid-alive 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("solid-js/web"),o=require("solid-js/store"),t=require("solid-js"),l=t.createContext({elements:{},insertElement:()=>{},onDeactivated:()=>{},onActivated:()=>{},removeAliveElement:()=>{},saveScrollTop:()=>{},setCurrentComponentId:()=>{}});let n,r=100;exports.AliveProvider=function(t){var[n,r]=o.createStore();let c=Symbol("close"),a=c,s=new Map,i=new Map;var d=e=>{let o=e.id,t=s.get(o),l=i.get(o);s.delete(o),i.delete(o),r([o],{...e,onActivated:t,onDeactivated:l})},v=e=>{if(Reflect.has(n,e)){var o=n[e]?.children;o?.forEach((o=>o!==e&&v(o))),r((o=>(o[e].onDeactivated?.(),o[e].component=null,o[e].dispose?.(),o[e].dispose=null,o[e].owner=null,o[e].onActivated=null,o[e].onDeactivated=null,o[e].scrollTop=0,o[e].id="",o[e].children=null,o[e]=null,delete o[e],{...o})))}},u=e=>{if(null==e)for(const e of Object.values(n))v(e.id);else v(e)},m=e=>{a=e},p=(e,o)=>{Reflect.has(n,e)&&r((t=>(t[e].scrollTop=o??0,t)))},T=e=>{a!==c&&s.set(a,e)},A=e=>{a!==c&&i.set(a,e)};return e.createComponent(l.Provider,{get value(){return{saveBodyScrollTop:t.saveBodyScrollTop,elements:n,closeSymbol:c,onActivated:T,onDeactivated:A,insertElement:d,saveScrollTop:p,removeAliveElement:u,setCurrentComponentId:m}},get children(){return t.children}})},exports.AliveTransfer=function(o,c,a){var{elements:s,saveBodyScrollTop:i,closeSymbol:d,insertElement:v,saveScrollTop:u,setCurrentComponentId:m}=t.useContext(l);Reflect.has(s,c)||(m(c),t.createRoot((l=>{v({id:c,dispose:l,component:e.createComponent(o,{}),onDeactivated:null,onActivated:null,owner:t.getOwner,scrollTop:0,children:Array.isArray(a)?a:null})})));var p=e=>{if(i)if("cacheScroll"===e){var o=document.documentElement.scrollTop||document.body.scrollTop||0;s[c]?.scrollTop!==o&&u(c,o)}else"scrollTo"===e&&(clearTimeout(n),n=setTimeout((()=>{var e;e=s[c]?.scrollTop,document.documentElement.scrollTop=document.body.scrollTop=e||0,r=0}),r))};return t.createEffect((()=>{s[c]?.onActivated?.(),p("scrollTo")})),t.onCleanup((()=>{m(d??""),s[c]?.onDeactivated?.(),p("cacheScroll")})),s[c]?.owner&&t.runWithOwner(s[c].owner,(()=>s[c]?.component))},exports.useAlive=function(){var{onActivated:e,onDeactivated:o,removeAliveElement:n}=t.useContext(l);return{onActivated:e,onDeactivated:o,removeAliveElement:n}};
1
+ "use strict";var e=require("solid-js/web"),l=require("solid-js/store"),o=require("solid-js"),t=o.createContext({elements:{},closeSymbol:Symbol("close"),insertElement:()=>{},onDeactivated:()=>{},onActivated:()=>{},removeAliveElement:()=>{},saveScroll:()=>{},setCurrentComponentId:()=>{},saveElScroll:()=>{},resetElScroll:()=>!0,removeScrollEl:()=>!0});var r={appear:"index-module_appear__MaHzX",_appear:"index-module__appear__7KeRW",toLeft:"index-module_toLeft__s1PDL",_toLeft:"index-module__toLeft__SD-Zp"};let n=0,i=0,a=null;exports.AliveProvider=function(o){var[r,n]=l.createStore();let i=Symbol("close"),a=i,s=new Map,c=new Map,v=new Map;var d=e=>{let l=e.id,o=s.get(l),t=c.get(l),r=v.get(l);s.delete(l),c.delete(l),v.delete(l),n([l],Object.assign(Object.assign({},e),{onActivated:o,onDeactivated:t,domList:r}))},u=e=>{var l;if(Reflect.has(r,e)){var o=null===(l=r[e])||void 0===l?void 0:l.children;null==o||o.forEach((l=>l!==e&&u(l))),n((l=>{var o,t,r,n;return null===(t=(o=l[e]).onDeactivated)||void 0===t||t.call(o),l[e].component=null,null===(n=(r=l[e]).dispose)||void 0===n||n.call(r),l[e].dispose=null,l[e].owner=null,l[e].onActivated=null,l[e].onDeactivated=null,l[e].scroll=null,l[e].id="",l[e].children=null,l[e].domList=null,l[e]=null,delete l[e],l}))}},m=e=>{if(null==e)for(const e of Object.values(r))u(e.id);else u(e)},f=e=>{a=e},p=(e,o)=>{Reflect.has(r,e)&&n(l.produce((l=>{l[e].scroll=Object.assign({},o)})))},E=e=>{a!==i&&s.set(a,e)},L=e=>{a!==i&&c.set(a,e)},S=(e,l)=>{var o,t;if(a!==i){var r=(null!==(o=v.get(a))&&void 0!==o?o:new Map([])).set(e,{top:0,left:0});v.set(a,r),null===(t=null==l?void 0:l())||void 0===t||t(e)}},h=e=>{var l;for(const o of Object.values(r))if(null===(l=o.domList)||void 0===l?void 0:l.has(e))return o.domList.delete(e),e.scrollTop=0,e.scrollLeft=0,!0;return!1},A=e=>{var l;for(const o of Object.values(r))if(null===(l=o.domList)||void 0===l?void 0:l.has(e))return o.domList.set(e,{top:0,left:0}),e.scrollTop=0,e.scrollLeft=0,!0;return!1};return e.createComponent(t.Provider,{get value(){return{scrollId:o.scrollId,behavior:o.behavior,transitionEnterName:o.transitionEnterName,elements:r,closeSymbol:i,onActivated:E,onDeactivated:L,insertElement:d,saveScroll:p,removeAliveElement:m,setCurrentComponentId:f,saveElScroll:S,resetElScroll:A,removeScrollEl:h}},get children(){return o.children}})},exports.AliveTransfer=function(l,s,c){var v,{behavior:d,elements:u,scrollId:m,closeSymbol:f,transitionEnterName:p,insertElement:E,saveScroll:L,setCurrentComponentId:S}=o.useContext(t);Reflect.has(u,s)||(S(s),o.createRoot((t=>{E({id:s,dispose:t,component:e.createComponent(l,{}),onDeactivated:null,onActivated:null,owner:o.getOwner,scroll:{top:0,left:0},children:Array.isArray(c)?c:null,domList:null})})));var h=e=>{var l;if(m&&a)if("cacheScroll"===e){var o="alwaysTop"===d?{top:0,left:0}:{top:a.scrollTop,left:a.scrollLeft};L(s,o)}else{var t=Date.now();if(t-n>200){const{top:e=0,left:o=0}=(null===(l=u[s])||void 0===l?void 0:l.scroll)||{};a.scrollTop=e,a.scrollLeft=o,n=t}}};if(p&&(null===(v=u[s])||void 0===v?void 0:v.owner)&&Date.now()-i>200){i=Date.now();let e=()=>{var e;return null===(e=u[s])||void 0===e?void 0:e.component},l=null==e?void 0:e();if("function"==typeof l&&(l=null==l?void 0:l()),l instanceof HTMLElement){var A=r[p]||p;l.classList.add(A);const e=()=>{l.classList.remove(A),l.removeEventListener("animationend",e)};l.addEventListener("animationend",e)}}return o.createEffect((()=>{var e,l,o;m&&!a&&(a=document.getElementById(m),!a&&console.error(`[solid-alive] scrollId: ${m} is null `)),null===(l=(e=u[s]).onActivated)||void 0===l||l.call(e),h("scrollTo"),null===(o=u[s].domList)||void 0===o||o.forEach(((e,l)=>{l.scrollTop=e.top,l.scrollLeft=e.left}))})),o.onCleanup((()=>{var e,l,o;S(f),null===(l=(e=u[s]).onDeactivated)||void 0===l||l.call(e),h("cacheScroll"),null===(o=u[s].domList)||void 0===o||o.forEach(((e,l,o)=>o.set(l,{top:l.scrollTop,left:l.scrollLeft})))})),o.runWithOwner(u[s].owner,(()=>u[s].component))},exports.useAlive=function(){var{onActivated:e,onDeactivated:l,removeAliveElement:r,saveElScroll:n,resetElScroll:i,removeScrollEl:a}=o.useContext(t);return{onActivated:e,onDeactivated:l,removeAliveElement:r,directiveSaveScroll:n,resetElScroll:i,removeScrollEl:a}};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{createComponent as e}from"solid-js/web";import{createStore as o}from"solid-js/store";import{createContext as l,useContext as t,createRoot as n,getOwner as r,createEffect as c,onCleanup as a,runWithOwner as i}from"solid-js";var s=l({elements:{},insertElement:()=>{},onDeactivated:()=>{},onActivated:()=>{},removeAliveElement:()=>{},saveScrollTop:()=>{},setCurrentComponentId:()=>{}});function d(l){var[t,n]=o();let r=Symbol("close"),c=r,a=new Map,i=new Map;var d=e=>{let o=e.id,l=a.get(o),t=i.get(o);a.delete(o),i.delete(o),n([o],{...e,onActivated:l,onDeactivated:t})},v=e=>{if(Reflect.has(t,e)){var o=t[e]?.children;o?.forEach((o=>o!==e&&v(o))),n((o=>(o[e].onDeactivated?.(),o[e].component=null,o[e].dispose?.(),o[e].dispose=null,o[e].owner=null,o[e].onActivated=null,o[e].onDeactivated=null,o[e].scrollTop=0,o[e].id="",o[e].children=null,o[e]=null,delete o[e],{...o})))}},m=e=>{if(null==e)for(const e of Object.values(t))v(e.id);else v(e)},u=e=>{c=e},p=(e,o)=>{Reflect.has(t,e)&&n((l=>(l[e].scrollTop=o??0,l)))},T=e=>{c!==r&&a.set(c,e)},f=e=>{c!==r&&i.set(c,e)};return e(s.Provider,{get value(){return{saveBodyScrollTop:l.saveBodyScrollTop,elements:t,closeSymbol:r,onActivated:T,onDeactivated:f,insertElement:d,saveScrollTop:p,removeAliveElement:m,setCurrentComponentId:u}},get children(){return l.children}})}let v,m=100;function u(o,l,d){var{elements:u,saveBodyScrollTop:p,closeSymbol:T,insertElement:f,saveScrollTop:A,setCurrentComponentId:h}=t(s);Reflect.has(u,l)||(h(l),n((t=>{f({id:l,dispose:t,component:e(o,{}),onDeactivated:null,onActivated:null,owner:r,scrollTop:0,children:Array.isArray(d)?d:null})})));var S=e=>{if(p)if("cacheScroll"===e){var o=document.documentElement.scrollTop||document.body.scrollTop||0;u[l]?.scrollTop!==o&&A(l,o)}else"scrollTo"===e&&(clearTimeout(v),v=setTimeout((()=>{var e;e=u[l]?.scrollTop,document.documentElement.scrollTop=document.body.scrollTop=e||0,m=0}),m))};return c((()=>{u[l]?.onActivated?.(),S("scrollTo")})),a((()=>{h(T??""),u[l]?.onDeactivated?.(),S("cacheScroll")})),u[l]?.owner&&i(u[l].owner,(()=>u[l]?.component))}function p(){var{onActivated:e,onDeactivated:o,removeAliveElement:l}=t(s);return{onActivated:e,onDeactivated:o,removeAliveElement:l}}export{d as AliveProvider,u as AliveTransfer,p as useAlive};
1
+ import{createComponent as e}from"solid-js/web";import{createStore as l,produce as o}from"solid-js/store";import{createContext as t,useContext as n,createRoot as r,getOwner as i,createEffect as a,onCleanup as s,runWithOwner as c}from"solid-js";var d=t({elements:{},closeSymbol:Symbol("close"),insertElement:()=>{},onDeactivated:()=>{},onActivated:()=>{},removeAliveElement:()=>{},saveScroll:()=>{},setCurrentComponentId:()=>{},saveElScroll:()=>{},resetElScroll:()=>!0,removeScrollEl:()=>!0});function v(t){var[n,r]=l();let i=Symbol("close"),a=i,s=new Map,c=new Map,v=new Map;var u=e=>{let l=e.id,o=s.get(l),t=c.get(l),n=v.get(l);s.delete(l),c.delete(l),v.delete(l),r([l],Object.assign(Object.assign({},e),{onActivated:o,onDeactivated:t,domList:n}))},m=e=>{var l;if(Reflect.has(n,e)){var o=null===(l=n[e])||void 0===l?void 0:l.children;null==o||o.forEach((l=>l!==e&&m(l))),r((l=>{var o,t,n,r;return null===(t=(o=l[e]).onDeactivated)||void 0===t||t.call(o),l[e].component=null,null===(r=(n=l[e]).dispose)||void 0===r||r.call(n),l[e].dispose=null,l[e].owner=null,l[e].onActivated=null,l[e].onDeactivated=null,l[e].scroll=null,l[e].id="",l[e].children=null,l[e].domList=null,l[e]=null,delete l[e],l}))}},f=e=>{if(null==e)for(const e of Object.values(n))m(e.id);else m(e)},p=e=>{a=e},E=(e,l)=>{Reflect.has(n,e)&&r(o((o=>{o[e].scroll=Object.assign({},l)})))},L=e=>{a!==i&&s.set(a,e)},S=e=>{a!==i&&c.set(a,e)},h=(e,l)=>{var o,t;if(a!==i){var n=(null!==(o=v.get(a))&&void 0!==o?o:new Map([])).set(e,{top:0,left:0});v.set(a,n),null===(t=null==l?void 0:l())||void 0===t||t(e)}},_=e=>{var l;for(const o of Object.values(n))if(null===(l=o.domList)||void 0===l?void 0:l.has(e))return o.domList.delete(e),e.scrollTop=0,e.scrollLeft=0,!0;return!1},b=e=>{var l;for(const o of Object.values(n))if(null===(l=o.domList)||void 0===l?void 0:l.has(e))return o.domList.set(e,{top:0,left:0}),e.scrollTop=0,e.scrollLeft=0,!0;return!1};return e(d.Provider,{get value(){return{scrollId:t.scrollId,behavior:t.behavior,transitionEnterName:t.transitionEnterName,elements:n,closeSymbol:i,onActivated:L,onDeactivated:S,insertElement:u,saveScroll:E,removeAliveElement:f,setCurrentComponentId:p,saveElScroll:h,resetElScroll:b,removeScrollEl:_}},get children(){return t.children}})}var u={appear:"index-module_appear__MaHzX",_appear:"index-module__appear__7KeRW",toLeft:"index-module_toLeft__s1PDL",_toLeft:"index-module__toLeft__SD-Zp"};let m=0,f=0,p=null;function E(l,o,t){var v,{behavior:E,elements:L,scrollId:S,closeSymbol:h,transitionEnterName:_,insertElement:b,saveScroll:A,setCurrentComponentId:D}=n(d);Reflect.has(L,o)||(D(o),r((n=>{b({id:o,dispose:n,component:e(l,{}),onDeactivated:null,onActivated:null,owner:i,scroll:{top:0,left:0},children:Array.isArray(t)?t:null,domList:null})})));var w=e=>{var l;if(S&&p)if("cacheScroll"===e){var t="alwaysTop"===E?{top:0,left:0}:{top:p.scrollTop,left:p.scrollLeft};A(o,t)}else{var n=Date.now();if(n-m>200){const{top:e=0,left:t=0}=(null===(l=L[o])||void 0===l?void 0:l.scroll)||{};p.scrollTop=e,p.scrollLeft=t,m=n}}};if(_&&(null===(v=L[o])||void 0===v?void 0:v.owner)&&Date.now()-f>200){f=Date.now();let e=()=>{var e;return null===(e=L[o])||void 0===e?void 0:e.component},l=null==e?void 0:e();if("function"==typeof l&&(l=null==l?void 0:l()),l instanceof HTMLElement){var g=u[_]||_;l.classList.add(g);const e=()=>{l.classList.remove(g),l.removeEventListener("animationend",e)};l.addEventListener("animationend",e)}}return a((()=>{var e,l,t;S&&!p&&(p=document.getElementById(S),!p&&console.error(`[solid-alive] scrollId: ${S} is null `)),null===(l=(e=L[o]).onActivated)||void 0===l||l.call(e),w("scrollTo"),null===(t=L[o].domList)||void 0===t||t.forEach(((e,l)=>{l.scrollTop=e.top,l.scrollLeft=e.left}))})),s((()=>{var e,l,t;D(h),null===(l=(e=L[o]).onDeactivated)||void 0===l||l.call(e),w("cacheScroll"),null===(t=L[o].domList)||void 0===t||t.forEach(((e,l,o)=>o.set(l,{top:l.scrollTop,left:l.scrollLeft})))})),c(L[o].owner,(()=>L[o].component))}function L(){var{onActivated:e,onDeactivated:l,removeAliveElement:o,saveElScroll:t,resetElScroll:r,removeScrollEl:i}=n(d);return{onActivated:e,onDeactivated:l,removeAliveElement:o,directiveSaveScroll:t,resetElScroll:r,removeScrollEl:i}}export{v as AliveProvider,E as AliveTransfer,L as useAlive};
@@ -0,0 +1,30 @@
1
+ .index-module_appear__MaHzX {
2
+ animation: index-module__appear__7KeRW .5s ease;
3
+ }
4
+
5
+ @keyframes index-module__appear__7KeRW {
6
+ 0% {
7
+ opacity: 0;
8
+ }
9
+
10
+ 100% {
11
+ opacity: 1;
12
+ }
13
+ }
14
+
15
+
16
+ .index-module_toLeft__s1PDL {
17
+ animation: index-module__toLeft__SD-Zp .5s ease;
18
+ }
19
+
20
+ @keyframes index-module__toLeft__SD-Zp {
21
+ 0% {
22
+ opacity: 0;
23
+ transform: translateX(30px);
24
+ }
25
+
26
+ 100% {
27
+ opacity: 1;
28
+ transform: translateX(0);
29
+ }
30
+ }
@@ -2,7 +2,8 @@ import { ProveiderProps } from './default';
2
2
  /**
3
3
  * @description Alive
4
4
  * @param children jsx.element
5
- * @param { boolean } saveBodyScrollTop true/false, 默认false, 不会记住body的scrollTop高度
6
- * @returns jsx.element
5
+ * @param { string } [scrollId] id,如 'root' 会在切换组件时的动作,默认saveScrollTop
6
+ * @param { 'alwaysTop'|'saveScroll' } [behavior] dom元素滚动条会如何保持
7
+ * @param { 'appear'|'toLeft' } [transitionEnterName] 路由切换动画, 可以自己加
7
8
  */
8
9
  export default function AliveProvider(props: ProveiderProps): import("solid-js").JSX.Element;
@@ -1,2 +1,8 @@
1
1
  import { JSX } from 'solid-js';
2
- export default function AliveTransfer(Component: () => JSX.Element, id: string, children?: Array<string>): JSX.Element;
2
+ /**
3
+ * @description Alive 组件用的 转换函数
4
+ * @param { string } Componet,
5
+ * @param { string } id string,自己的id 值,一定要唯一
6
+ * @param { Array<string> } [children] [string,...], 子组件的 id值 可不传,这样默认销毁时不会去干掉子组件,
7
+ */
8
+ export default function AliveTransfer(Component: () => JSX.Element, id: string, children?: Array<string> | null): JSX.Element;
@@ -1,34 +1,50 @@
1
- import { getOwner } from 'solid-js/web'
2
1
  import { JSX } from 'solid-js'
3
2
 
4
- export interface ProveiderProps {
3
+ declare module 'solid-js' {
4
+ namespace JSX {
5
+ interface Directives {
6
+ directiveSaveScroll: ((dom: Element) => void) | boolean
7
+ }
8
+ }
9
+ }
10
+
11
+ export interface pub {
12
+ scrollId?: string // 保存
13
+ behavior?: 'alwaysTop' | 'saveScroll'
14
+ transitionEnterName?: 'appear' |'toLeft'
15
+ }
16
+
17
+ export interface ProveiderProps extends pub {
5
18
  children: JSX.Element
6
- saveBodyScrollTop?: boolean
7
19
  }
8
20
 
9
21
  export interface NodeInfo {
10
22
  id: string
11
23
  component: JSX.Element
24
+ owner: Owner | null
25
+ scroll: {top:number,left:number} | null
26
+ domList: Map<Element, {top:number,left:number }> | null
27
+ children?: Array<string> | null
28
+ selfDom?:Element
12
29
  dispose: (() => void) | null
13
- owner: getOwner | null
14
30
  onActivated: null | (() => void)
15
31
  onDeactivated: null | (() => void)
16
- scrollTop: number
17
- children?: Array<string> | null
18
32
  }
19
33
 
20
34
  export interface StoreProps {
21
35
  [propsName: string]: NodeInfo
22
36
  }
23
37
 
24
- export interface ContextProps {
38
+ export interface ContextProps extends pub {
25
39
  elements: StoreProps
40
+ closeSymbol: symbol
26
41
  insertElement: (d: NodeInfo) => void
27
42
  onActivated: (cb: () => void) => void
28
43
  onDeactivated: (cb: () => void) => void
29
44
  removeAliveElement: (id?: string) => void
30
- saveScrollTop: (id: string, height: number) => void
45
+ saveScroll: (id: string, s:{top:number,left:number}) => void
31
46
  setCurrentComponentId: (id: string | symbol) => void
32
- saveBodyScrollTop?: boolean
33
- closeSymbol?: symbol
47
+ saveElScroll: (dom: Element) => void // 用来 保存 某一个dom, 暂时用来保存scroll
48
+ resetElScroll: (dom: Element) => boolean // 重置高度, 变成0
49
+ removeScrollEl: (dom: Element) => boolean // 删除 保存的 滚动条 元素
34
50
  }
@@ -1,6 +1,17 @@
1
+ /**
2
+ * @returns onActivated 激活缓存组件时触发,
3
+ * @returns onDeactivated 退出缓存组件时触发,
4
+ * @returns removeAliveElement 删除缓存组件,
5
+ * @returns directiveSaveScroll 这个是指令, 缓存组件中需要存的 滚动条, use:directiveSaveScroll, ts 中加 //@ts-ignore
6
+ * @returns resetElScroll 将缓存组件中 某个滚动条的scrollTop scrollLeft 变成 0
7
+ * @returns removeScrollEl 将缓存组件中 某个滚动条dom元素删除了
8
+ */
1
9
  declare function useAlive(): {
2
10
  onActivated: (cb: () => void) => void;
3
11
  onDeactivated: (cb: () => void) => void;
4
12
  removeAliveElement: (id?: string | undefined) => void;
13
+ directiveSaveScroll: (dom: Element) => void;
14
+ resetElScroll: (dom: Element) => boolean;
15
+ removeScrollEl: (dom: Element) => boolean;
5
16
  };
6
17
  export default useAlive;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-alive",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "description": "solid-alive",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -38,9 +38,11 @@
38
38
  "@rollup/plugin-json": "^6.1.0",
39
39
  "@rollup/plugin-node-resolve": "^15.2.3",
40
40
  "@rollup/plugin-typescript": "^11.1.6",
41
+ "@types/css-modules": "^1.0.5",
42
+ "autoprefixer": "^10.4.19",
41
43
  "rollup": "^4.14.0",
42
44
  "rollup-plugin-cleanup": "^3.2.1",
43
- "rollup-plugin-css-only": "^4.5.2",
45
+ "rollup-plugin-postcss": "^4.0.2",
44
46
  "rollup-plugin-serve": "^1.1.1",
45
47
  "rollup-plugin-terser": "^7.0.2",
46
48
  "rollup-plugin-typescript2": "^0.36.0",
package/readme.md CHANGED
@@ -8,16 +8,18 @@
8
8
  - removeAliveElement: 函数, 可传一个参数, 不传就删除所有缓存 :
9
9
  removeAliveElement('/home')
10
10
  - onActivated / onDeactivated: 函数,只能传一个函数,多次调用只有最一个会调用.
11
- onActivated(()=> console.log('actived') )
12
- - 可记住body的高度,但要在 AliveProvider 中加 saveBodyScrollTop参数,但组件内部的滚动条问题自己解决
11
+ onActivated(()=> console.log('actived'))
12
+ - directiveSaveScroll 保存滚动条指令, 不过能不用就不用, 但组件不能使用,只能标签
13
+ - 可记住指定元素, 但要在 AliveProvider 中加 saveScrollElement 参数, 最好唯一. 但组件内部的滚动条问题 有个指令函数,
13
14
  - 子父 缓存/删除 问题
14
15
  - 如果某组件下有子组件,在父的 AliveTransfer中,
15
- 第三个参数,为数组 写上子组件的唯一id: ['/childrenId','asf',...]
16
- - 使用见下图, 也可用 removeAliveElement 删除
16
+ 第三个参数,为对象 写上子组件的唯一id: {children:['/childrenId','asf',...]}
17
+ - 使用见下图, 也可用 -removeAliveElement 删除
18
+
17
19
 
18
20
 
19
21
  ### 使用(use)
20
- 1 /index.tsx,AliveProvider将app 包裹, saveBodyScrollTop : 记住body滚动高度
22
+ 1 /index.tsx,AliveProvider将app 包裹, scrollId : 记住 你传的元素name 的滚动高度,我用 的 getElementById, behavior : alwaysTop 保持置顶, saveScroll ,保持离开的位置
21
23
  ```jsx
22
24
  import { render } from 'solid-js/web'
23
25
  import App from './App'
@@ -25,7 +27,8 @@ import { AliveProvider } from 'solid-alive'
25
27
  const root = document.getElementById('root')
26
28
 
27
29
  render(() =>
28
- <AliveProvider saveBodyScrollTop>
30
+ {/* save id is client scroll, */}
31
+ <AliveProvider behavior="alwaysTop" scrollId='client' transitionEnterName='appear'>
29
32
  <App />
30
33
  </AliveProvider>
31
34
  , root!)
@@ -43,7 +46,6 @@ import Team from './views/Blog/Team';
43
46
  import Blog from './views/Blog';
44
47
  import Single from './views/Blog/Single';
45
48
 
46
- // 单个
47
49
  const AboutTsf = () => AliveTransfer(About, '/about');
48
50
 
49
51
  // 当Blog 下有子组件时, 第三个参数一定要, 与子组件的
@@ -84,11 +86,17 @@ export default function Blog(props: any) {
84
86
  ```
85
87
 
86
88
  - 子 /views/Blog/Single/index.tsx 中
87
- ```jsx
89
+ ```tsx
88
90
  import { useAlive } from "solid-alive"
89
91
 
90
92
  export default function Single() {
91
- const { onActivated,onDeactivated,removeAliveElement } = useAlive()
93
+ const {
94
+ onActivated,onDeactivated,
95
+ removeAliveElement,
96
+ //@ts-ignore
97
+ directiveSaveScroll,
98
+ resetElScroll,
99
+ } = useAlive()
92
100
 
93
101
  const click = () => {
94
102
  removeAliveElement('/about') // delete '/about'; 删除 /about
@@ -111,7 +119,31 @@ export default function Single() {
111
119
  return (
112
120
  <div>
113
121
  <h2>Single</h2>
114
- <input type="text" style={{border:'2px solid red'}} />
122
+ <input type="text" style={{ border: '2px solid red' }} />
123
+ <button
124
+ onClick={() => {
125
+ // divRef && resetElScroll(divRef)
126
+ divRef && removeScrollEl(divRef)
127
+ }}
128
+ >
129
+ reset directiveSaveScroll
130
+ </button>
131
+ <div
132
+ style={{ height: '500px', width: '200px',border:'1px solid green',overflow:'auto'}}
133
+ {/* 可以不用参数 ,*/}
134
+ {/* use:directiveSaveScroll={dom => ((divRef as Element) = dom)} */}
135
+ use:directiveSaveScroll
136
+ >
137
+ <div style="height:900px;border:1px solid red">
138
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Veniam earum
139
+ aspernatur omnis, fugiat doloremque repellat facilis fugit nisi magni
140
+ provident hic aliquid nostrum reiciendis, dolores rem, quasi dolor
141
+ officia? Quidem? Sit alias tempore ab provident ea aliquid nostrum
142
+ quaerat? Natus aut dignissimos, illo nisi officiis adipisci ipsam
143
+ totam quasi ratione laboriosam eius recusandae asperiores nobis quis
144
+ assumenda odio consectetur animi. Debitis architecto mollitia sapiente
145
+ </div>
146
+ </div>
115
147
  </div>
116
148
  )
117
149
  }
@@ -1,2 +0,0 @@
1
- export declare function getScrollTop(): number;
2
- export declare function setScrollTop(h: number): void;