@soei/flyweight 0.2.2 → 0.2.5
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/Flyweight.cjs +1 -1
- package/Flyweight.js +152 -129
- package/README.md +94 -2
- package/package.json +4 -2
- package/style.css +1 -1
package/Flyweight.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const c=require("@soei/util"),i=require("vue");let F=/(\d+|[+\-\*/]|%)/g,E={"+":(e,t)=>e+t,"-":(e,t)=>e-t,"*":(e,t)=>e*t,"/":(e,t)=>e/t,"%":(e,t,s)=>parseFloat(e)/100*s},x=(e,t)=>{let s;if(s=c.runer("match",e,F)){let n=s.length,r,l=0,h,o=[];for(;n--;)l=s.shift(),l in E?(r&&o.push(r),l==="%"&&(o.length=2),h=l):+l&&o.push(+l),o.length==2&&(o.push(t),r=E[h].apply(null,o),o.length=0);+r||(r=+o.pop()),e=r>>0}return e},N=e=>(e+"").replace(/\w+\((.*)\)/g,"$1").replace(/(?=\s+|^)(\d+(\.\d+)*)(?!(?:\.)*\d|%|\w)/g,"$1px");const H=(e,t)=>{const s=e.__vccOpts||e;for(const[n,r]of t)s[n]=r;return s};let C=e=>e==null||e==null,W=(...e)=>{console.info("::::FLYWEIGHT",...e)};const I={name:"Flyweight",props:{flys:{type:Array,default:()=>[]},width:{type:Number,default:0},height:{type:Number,default:100},offset:{type:Array,default:()=>[0,0]},lazy:{type:Number,default:100},view:{type:Object,default:()=>({id:0})},index:{type:Number,default:0},top:{type:Number,default:!1},left:{type:Number,default:!1},auto:{type:[Boolean,String],default:!1},space:{type:Object,default:()=>null},padding:{type:Boolean,default:!1}},computed:{flyweight(){return this.$refs.flyweight}},data(){return{flyweights:[],actice:!1,Size:null,column:1,row:1,spacex:10,count:0,task:[],realW:0,realH:0}},watch:{flys(e){this.count=e.length,this.rebuild();let t=this.task.shift();t&&this.$nextTick(()=>{this.setview(t)})},view:{handler(e){this.setview(e)},immediate:!0,deep:!0},index(e){this.setindex(e)},top(e){this.flyweight.scrollTop=e},left(e){this.flyweight.scrollLeft=e}},mounted(){this.flyweights=[],this.$set||(this.$set=(e,t,s)=>{e[t]=s}),this.setindex(this.index);try{new ResizeObserver(()=>{this.rebuild(),this.$emit("resize")}).observe(this.flyweight)}catch(e){W(e)}this.scrollx=c.runer("hasAttribute",this.flyweight,"scroll-x"),this.BoxRule=this.scrollx?"clientHeight=>width,clientWidth=>height":"clientHeight=>height,clientWidth=>width",this.direction=this.scrollx?"scrollLeft":"scrollTop"},methods:{exec:N,trigger(e,t){this.lazyrun(()=>{c.isArray(e)||(e=[[e,t]]),c.each(e,(s,n)=>{this.$emit(n[0],C(n[1])?!0:n[1])})})},cheackflys(e){if(!this.flys.length)return e&&this.task.push(e),!0},setview(e){c.runer([this.cheackflys,t=>{t=t||{};let s=t.index||c.each(this.flys,(n,r,l,h)=>{if(r[l]==h)return n},t.picker,t.id);C(s)||this.setindex(s)}],this,e)},setindex(e){c.runer([this.cheackflys,({index:t})=>{this.selectIndex=t,this.$nextTick(()=>{let s=t/this.column>>0,n=this.spacex;(this.flyweight[this.direction]/n>>0)+this.row-s-1>0||(this.flyweight[this.direction]=s*n,this.scroll())})}],this,{index:e})},lazyrun(e,t){clearTimeout(this.time),this.time=setTimeout(()=>{c.runer(e)},t||this.lazy)},run(e){let t=[],s=c.picker(e.target,this.scrollx?"scrollLeft=>top":"scrollTop=>top");c.merge(s,{height:this.realH,width:this.realW,index:s.top/this.spacex>>0},this.space,"mix"),e.from||t.push(["onscroll",s]);let n=!1;c.each(this.flyweights,(r,l,h,o,f,p,u,d,a)=>{if(h=r/f>>0,d=h+o*(+(h<p%o)+(p/o>>0)),a=d*f+r%f,a>=this.count){n||(t.push(["onend"]),n=!0);return}l.index=d,l.i=a,l.data=this.flys[a];let g=[d*this.spacex+l.x,l.space];u&&g.reverse(),l.top=g[0],l.left=g[1]},null,this.row,this.column,s.index,this.scrollx),this.trigger(t),t=null},scroll(e){this.run(e||{target:this.flyweight,from:"space"})},rebuild(){let e=this.count||this.flys.length,t=this.flyweights;if(!e)return t.length=e;this.count=e;let s=this.scrollx,n=this.flyweight,r=c.picker(n,this.BoxRule);this.$nextTick(()=>{let l=/true/.test(this.auto),[h,o]=this.offset,f=r.width,p=r.height,u=(x(this.width,f)||f)+h,d=x(this.height,p)+o,a=f/(s?d:u)>>0||1,g=p/(s?u:d)>>0,_=this.padding;this.row=g+2,this.column=a;let m,S=0,k,b,z;s?(m=0,u=x(this.width,p)||p,b=u,k=u-h,z=y=>y*d+(y+1)*o,d=x(this.height,f)||f,d+=o):(l?(u=(f-h*(a+2*_-1))/a,m=!_*h,S=_*h):(m=0,S=(f%u+h*a)/(a+1)>>0,u-=h),z=y=>y*(u+m)+(y+1)*S,k=u,b=d),this.realH=d-o,this.realW=k,this.spacex=b,this.Size=Math.ceil(e/a)*this.spacex;let T=Math.min(e,a*this.row),w=T-1,v,$=0;for(;T-- >0;)v=w-T,$=v%a,this.$set(t,v,{x:h,y:o,width:u,height:d-o,space:z($),data:{}});t.length=w+1;let B=[];p/this.spacex>w/a&&B.push(["onend"]),this.flyweight[this.direction]=0,this.$nextTick(()=>{this.setindex(this.selectIndex||0)}),this.scroll(),B.push(["update:space",{row:(w/a>>0)+1,column:a,showrow:this.row,showcolumn:this.column}]),this.trigger(B)})}}},R={class:"flyweight-all"};function V(e,t,s,n,r,l){return i.openBlock(),i.createElementBlock("div",{ref:"flyweight",class:i.normalizeClass(["flyweight",{"flyweight-active":r.actice}]),style:i.normalizeStyle({"--width":l.exec(r.realW),"--height":l.exec(r.realH),"--flyweight-content":l.exec(r.Size)}),onScroll:t[0]||(t[0]=(...h)=>l.scroll&&l.scroll(...h))},[i.createElementVNode("div",R,[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(r.flyweights,(h,o)=>(i.openBlock(),i.createElementBlock("div",{key:o,style:i.normalizeStyle({top:h.top+"px",left:h.left+"px"})},[i.renderSlot(e.$slots,"default",i.mergeProps({ref_for:!0},h),void 0,!0)],4))),128))]),r.flyweights.length?i.renderSlot(e.$slots,"end",{key:0},void 0,!0):i.createCommentVNode("",!0)],38)}const L=H(I,[["render",V],["__scopeId","data-v-00424b62"]]);const j={name:"Card",props:{offset:{type:[String,Array],default:()=>[0,0,0,0]},background:{type:String,default:""},border:{type:String,default:"1px"},height:{type:String,default:"100%"},width:{type:String,default:"100%"},show:{type:String,default:""},close:{type:Object,default:null},title:{type:String,default:""}},data(){return{closecss:{},style:{},default:{top:"0px",right:"0px",bottom:"0px",left:"0px",height:"100%",width:"100%",background:"",border:"1px"}}},computed:{style(){let e={};return this.margin(this.offset),c.each(["BackGround","BordeR","Height","Width","Top","Right","Bottom","Left"],(t,s)=>{this.css(e,s)}),e}},watch:{close:{handler(e){this.change(e)},deep:!0},offset:{handler(e){this.margin(e)},deep:!0}},methods:{exec:N,isEmpty:c.isEmpty,isSimplyType:c.isSimplyType,tolower(e,t){return t&&(e=e.replace(/[a-z]/g,"")),e.toLowerCase()},css(e,t){let s=this.tolower(t),n=this[s]||this.default[s];!n||this.default[s]==n||(e["--"+this.tolower(t,!0)]=N(n))},change(e){c.isSimplyType(e)||(this.closecss=c.picker(e,"color=>--s-card-close-color,*"))},margin(e){c.merge(this,c.picker(c.isString(e)?e.split(/\s*(?:,|\s+)\s*/):e,"0=>top,1|0=>right,2|0=>bottom,3|1|0=>left",!0),!0)}},mounted(){this.change(this.close)}},A={class:"card-title"},M={class:"card-content"};function q(e,t,s,n,r,l){return i.openBlock(),i.createElementBlock("div",{class:"card",style:i.normalizeStyle(l.style)},[i.renderSlot(e.$slots,"default",{},()=>[i.renderSlot(e.$slots,"title",{},()=>[i.createElementVNode("div",A,[i.createTextVNode(i.toDisplayString(s.show||s.title)+" ",1),i.createElementVNode("div",{class:i.normalizeClass(["card-close",{hide:l.isSimplyType(s.close)?!s.close:!1}]),style:i.normalizeStyle(r.closecss),onClick:t[0]||(t[0]=h=>e.$emit("close"))},null,6)])],!0),i.renderSlot(e.$slots,"content",{},()=>[i.createElementVNode("div",M,[i.renderSlot(e.$slots,"inner",{},void 0,!0)])],!0)],!0)],4)}const O=H(j,[["render",q],["__scopeId","data-v-def66c95"]]),G=[L,O],P={install(e){G.forEach(t=>{e.component("S"+t.name,t),e.component(t.name+"S",t)})}};exports.Card=O;exports.Flyweight=L;exports.default=P;
|
package/Flyweight.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { runer as
|
|
2
|
-
import { openBlock as
|
|
3
|
-
let
|
|
1
|
+
import { runer as y, isArray as G, each as _, picker as z, merge as A, isEmpty as M, isSimplyType as I, isString as D } from "@soei/util";
|
|
2
|
+
import { openBlock as b, createElementBlock as k, normalizeClass as j, normalizeStyle as T, createElementVNode as S, Fragment as P, renderList as U, renderSlot as f, mergeProps as X, createCommentVNode as Y, createTextVNode as q, toDisplayString as J } from "vue";
|
|
3
|
+
let K = /(\d+|[+\-\*/]|%)/g, R = {
|
|
4
4
|
"+": (e, t) => e + t,
|
|
5
5
|
"-": (e, t) => e - t,
|
|
6
6
|
"*": (e, t) => e * t,
|
|
7
7
|
"/": (e, t) => e / t,
|
|
8
8
|
"%": (e, t, s) => parseFloat(e) / 100 * s
|
|
9
|
-
},
|
|
9
|
+
}, x = (e, t) => {
|
|
10
10
|
let s;
|
|
11
|
-
if (s =
|
|
12
|
-
let
|
|
13
|
-
for (;
|
|
14
|
-
i = s.shift(), i in
|
|
15
|
-
+l || (l = +
|
|
11
|
+
if (s = y("match", e, K)) {
|
|
12
|
+
let h = s.length, l, i = 0, r, n = [];
|
|
13
|
+
for (; h--; )
|
|
14
|
+
i = s.shift(), i in R ? (l && n.push(l), i === "%" && (n.length = 2), r = i) : +i && n.push(+i), n.length == 2 && (n.push(t), l = R[r].apply(null, n), n.length = 0);
|
|
15
|
+
+l || (l = +n.pop()), e = l >> 0;
|
|
16
16
|
}
|
|
17
17
|
return e;
|
|
18
|
-
},
|
|
19
|
-
const
|
|
18
|
+
}, W = (e) => (e + "").replace(/\w+\((.*)\)/g, "$1").replace(/(?=\s+|^)(\d+(\.\d+)*)(?!(?:\.)*\d|%|\w)/g, "$1px");
|
|
19
|
+
const V = (e, t) => {
|
|
20
20
|
const s = e.__vccOpts || e;
|
|
21
|
-
for (const [
|
|
22
|
-
s[
|
|
21
|
+
for (const [h, l] of t)
|
|
22
|
+
s[h] = l;
|
|
23
23
|
return s;
|
|
24
24
|
};
|
|
25
|
-
let
|
|
25
|
+
let E = (e) => e == null || e == null, Q = (...e) => {
|
|
26
26
|
console.info("::::FLYWEIGHT", ...e);
|
|
27
27
|
};
|
|
28
|
-
const
|
|
28
|
+
const Z = {
|
|
29
29
|
name: "Flyweight",
|
|
30
30
|
props: {
|
|
31
31
|
flys: {
|
|
@@ -86,10 +86,10 @@ const J = {
|
|
|
86
86
|
return {
|
|
87
87
|
flyweights: [],
|
|
88
88
|
actice: !1,
|
|
89
|
-
|
|
89
|
+
Size: null,
|
|
90
90
|
column: 1,
|
|
91
91
|
row: 1,
|
|
92
|
-
|
|
92
|
+
spacex: 10,
|
|
93
93
|
count: 0,
|
|
94
94
|
task: [],
|
|
95
95
|
realW: 0,
|
|
@@ -98,7 +98,7 @@ const J = {
|
|
|
98
98
|
},
|
|
99
99
|
watch: {
|
|
100
100
|
flys(e) {
|
|
101
|
-
this.count = e.length, this.
|
|
101
|
+
this.count = e.length, this.rebuild();
|
|
102
102
|
let t = this.task.shift();
|
|
103
103
|
t && this.$nextTick(() => {
|
|
104
104
|
this.setview(t);
|
|
@@ -127,17 +127,19 @@ const J = {
|
|
|
127
127
|
}), this.setindex(this.index);
|
|
128
128
|
try {
|
|
129
129
|
new ResizeObserver(() => {
|
|
130
|
-
this.
|
|
130
|
+
this.rebuild(), this.$emit("resize");
|
|
131
131
|
}).observe(this.flyweight);
|
|
132
132
|
} catch (e) {
|
|
133
|
-
|
|
133
|
+
Q(e);
|
|
134
134
|
}
|
|
135
|
+
this.scrollx = y("hasAttribute", this.flyweight, "scroll-x"), this.BoxRule = this.scrollx ? "clientHeight=>width,clientWidth=>height" : "clientHeight=>height,clientWidth=>width", this.direction = this.scrollx ? "scrollLeft" : "scrollTop";
|
|
135
136
|
},
|
|
136
137
|
methods: {
|
|
138
|
+
exec: W,
|
|
137
139
|
trigger(e, t) {
|
|
138
140
|
this.lazyrun(() => {
|
|
139
|
-
|
|
140
|
-
this.$emit(
|
|
141
|
+
G(e) || (e = [[e, t]]), _(e, (s, h) => {
|
|
142
|
+
this.$emit(h[0], E(h[1]) ? !0 : h[1]);
|
|
141
143
|
});
|
|
142
144
|
});
|
|
143
145
|
},
|
|
@@ -146,124 +148,133 @@ const J = {
|
|
|
146
148
|
return e && this.task.push(e), !0;
|
|
147
149
|
},
|
|
148
150
|
setview(e) {
|
|
149
|
-
|
|
151
|
+
y([this.cheackflys, (t) => {
|
|
150
152
|
t = t || {};
|
|
151
|
-
let s = t.index ||
|
|
152
|
-
if (l[i] ==
|
|
153
|
-
return
|
|
153
|
+
let s = t.index || _(this.flys, (h, l, i, r) => {
|
|
154
|
+
if (l[i] == r)
|
|
155
|
+
return h;
|
|
154
156
|
}, t.picker, t.id);
|
|
155
|
-
|
|
157
|
+
E(s) || this.setindex(s);
|
|
156
158
|
}], this, e);
|
|
157
159
|
},
|
|
158
160
|
setindex(e) {
|
|
159
|
-
|
|
160
|
-
this.$nextTick(() => {
|
|
161
|
-
let s = t / this.column >> 0,
|
|
162
|
-
(this.flyweight.
|
|
161
|
+
y([this.cheackflys, ({ index: t }) => {
|
|
162
|
+
this.selectIndex = t, this.$nextTick(() => {
|
|
163
|
+
let s = t / this.column >> 0, h = this.spacex;
|
|
164
|
+
(this.flyweight[this.direction] / h >> 0) + this.row - s - 1 > 0 || (this.flyweight[this.direction] = s * h, this.scroll());
|
|
163
165
|
});
|
|
164
166
|
}], this, { index: e });
|
|
165
167
|
},
|
|
166
168
|
lazyrun(e, t) {
|
|
167
169
|
clearTimeout(this.time), this.time = setTimeout(() => {
|
|
168
|
-
|
|
170
|
+
y(e);
|
|
169
171
|
}, t || this.lazy);
|
|
170
172
|
},
|
|
171
173
|
run(e) {
|
|
172
|
-
let t = [], s =
|
|
173
|
-
|
|
174
|
+
let t = [], s = z(e.target, this.scrollx ? "scrollLeft=>top" : "scrollTop=>top");
|
|
175
|
+
A(s, {
|
|
174
176
|
height: this.realH,
|
|
175
177
|
width: this.realW,
|
|
176
178
|
/* 显示区域第一行的索引 */
|
|
177
|
-
index: s.top / this.
|
|
179
|
+
index: s.top / this.spacex >> 0
|
|
178
180
|
// ...this
|
|
179
181
|
}, this.space, "mix"), e.from || t.push(["onscroll", s]);
|
|
180
|
-
let
|
|
181
|
-
|
|
182
|
+
let h = !1;
|
|
183
|
+
_(
|
|
182
184
|
this.flyweights,
|
|
183
|
-
(l, i,
|
|
184
|
-
if (
|
|
185
|
-
(+(
|
|
186
|
-
|
|
185
|
+
(l, i, r, n, u, d, c, a, o) => {
|
|
186
|
+
if (r = l / u >> 0, a = r + n * /* 偏移量, 如果超出顶部 + 1轮,排列到列队后, 否则保持在当前*/
|
|
187
|
+
(+(r < d % n) + (d / n >> 0)), o = a * u + l % u, o >= this.count) {
|
|
188
|
+
h || (t.push(["onend"]), h = !0);
|
|
187
189
|
return;
|
|
188
190
|
}
|
|
189
|
-
i.index =
|
|
191
|
+
i.index = a, i.i = o, i.data = this.flys[o];
|
|
192
|
+
let p = [
|
|
193
|
+
/* top */
|
|
194
|
+
a * this.spacex + i.x,
|
|
195
|
+
/* left */
|
|
196
|
+
i.space
|
|
197
|
+
];
|
|
198
|
+
c && p.reverse(), i.top = p[0], i.left = p[1];
|
|
190
199
|
},
|
|
191
200
|
null,
|
|
192
201
|
this.row,
|
|
193
202
|
this.column,
|
|
194
203
|
/* 显示区域第一行的索引 */
|
|
195
|
-
s.index
|
|
204
|
+
s.index,
|
|
205
|
+
this.scrollx
|
|
196
206
|
), this.trigger(t), t = null;
|
|
197
207
|
},
|
|
198
208
|
scroll(e) {
|
|
199
209
|
this.run(e || { target: this.flyweight, from: "space" });
|
|
200
210
|
},
|
|
201
|
-
|
|
211
|
+
rebuild() {
|
|
202
212
|
let e = this.count || this.flys.length, t = this.flyweights;
|
|
203
213
|
if (!e)
|
|
204
214
|
return t.length = e;
|
|
205
215
|
this.count = e;
|
|
206
|
-
let s = this.flyweight,
|
|
216
|
+
let s = this.scrollx, h = this.flyweight, l = z(h, this.BoxRule);
|
|
207
217
|
this.$nextTick(() => {
|
|
208
|
-
let
|
|
209
|
-
this.
|
|
210
|
-
let
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
218
|
+
let i = /true/.test(this.auto), [r, n] = this.offset, u = l.width, d = l.height, c = (x(this.width, u) || u) + r, a = x(this.height, d) + n, o = u / (s ? a : c) >> 0 || 1, p = d / (s ? c : a) >> 0, v = this.padding;
|
|
219
|
+
this.row = p + 2, this.column = o;
|
|
220
|
+
let w, $ = 0, N, B, H;
|
|
221
|
+
s ? (w = 0, c = x(this.width, d) || d, B = c, N = c - r, H = (g) => (
|
|
222
|
+
/* 计算左偏移量 */
|
|
223
|
+
g * a + (g + 1) * n
|
|
224
|
+
), a = x(this.height, u) || u, a += n) : (i ? (c = (u - r * (o + 2 * v - 1)) / o, w = !v * r, $ = v * r) : (w = 0, $ = (u % c + r * o) / (o + 1) >> 0, c -= r), H = (g) => g * (c + w) + (g + 1) * $, N = c, B = a), this.realH = a - n, this.realW = N, this.spacex = B, this.Size = Math.ceil(e / o) * this.spacex;
|
|
225
|
+
let L = Math.min(e, o * this.row), m = L - 1, C, F = 0;
|
|
226
|
+
for (; L-- > 0; )
|
|
227
|
+
C = m - L, F = C % o, this.$set(t, C, {
|
|
228
|
+
x: r,
|
|
229
|
+
y: n,
|
|
230
|
+
width: c,
|
|
231
|
+
height: a - n,
|
|
232
|
+
space: H(F),
|
|
233
|
+
data: {}
|
|
221
234
|
});
|
|
222
|
-
t.length =
|
|
223
|
-
let
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
235
|
+
t.length = m + 1;
|
|
236
|
+
let O = [];
|
|
237
|
+
d / this.spacex > m / o && O.push(["onend"]), this.flyweight[this.direction] = 0, this.$nextTick(() => {
|
|
238
|
+
this.setindex(this.selectIndex || 0);
|
|
239
|
+
}), this.scroll(), O.push(["update:space", {
|
|
240
|
+
row: (m / o >> 0) + 1,
|
|
241
|
+
column: o,
|
|
227
242
|
showrow: this.row,
|
|
228
243
|
showcolumn: this.column
|
|
229
|
-
}]), this.trigger(
|
|
244
|
+
}]), this.trigger(O);
|
|
230
245
|
});
|
|
231
246
|
}
|
|
232
247
|
}
|
|
233
|
-
};
|
|
234
|
-
function
|
|
235
|
-
return
|
|
248
|
+
}, ee = { class: "flyweight-all" };
|
|
249
|
+
function te(e, t, s, h, l, i) {
|
|
250
|
+
return b(), k("div", {
|
|
236
251
|
ref: "flyweight",
|
|
237
|
-
class:
|
|
252
|
+
class: j(["flyweight", {
|
|
238
253
|
"flyweight-active": l.actice
|
|
239
254
|
}]),
|
|
240
|
-
style:
|
|
241
|
-
"--width": l.realW
|
|
242
|
-
"--height": l.realH
|
|
255
|
+
style: T({
|
|
256
|
+
"--width": i.exec(l.realW),
|
|
257
|
+
"--height": i.exec(l.realH),
|
|
258
|
+
"--flyweight-content": i.exec(l.Size)
|
|
243
259
|
}),
|
|
244
|
-
onScroll: t[0] || (t[0] = (...
|
|
260
|
+
onScroll: t[0] || (t[0] = (...r) => i.scroll && i.scroll(...r))
|
|
245
261
|
}, [
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
(_(!0), x(R, null, V(l.flyweights, (o, h) => (_(), x("div", {
|
|
253
|
-
key: h,
|
|
254
|
-
style: p({
|
|
255
|
-
top: o.top + "px",
|
|
256
|
-
left: o.left + "px"
|
|
262
|
+
S("div", ee, [
|
|
263
|
+
(b(!0), k(P, null, U(l.flyweights, (r, n) => (b(), k("div", {
|
|
264
|
+
key: n,
|
|
265
|
+
style: T({
|
|
266
|
+
top: r.top + "px",
|
|
267
|
+
left: r.left + "px"
|
|
257
268
|
})
|
|
258
269
|
}, [
|
|
259
|
-
|
|
270
|
+
f(e.$slots, "default", X({ ref_for: !0 }, r), void 0, !0)
|
|
260
271
|
], 4))), 128))
|
|
261
|
-
]
|
|
262
|
-
l.flyweights.length ?
|
|
272
|
+
]),
|
|
273
|
+
l.flyweights.length ? f(e.$slots, "end", { key: 0 }, void 0, !0) : Y("", !0)
|
|
263
274
|
], 38);
|
|
264
275
|
}
|
|
265
|
-
const
|
|
266
|
-
const
|
|
276
|
+
const se = /* @__PURE__ */ V(Z, [["render", te], ["__scopeId", "data-v-00424b62"]]);
|
|
277
|
+
const ie = {
|
|
267
278
|
name: "Card",
|
|
268
279
|
// inheritAttrs: false,
|
|
269
280
|
props: {
|
|
@@ -303,19 +314,24 @@ const X = {
|
|
|
303
314
|
data() {
|
|
304
315
|
return {
|
|
305
316
|
closecss: {},
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
317
|
+
style: {},
|
|
318
|
+
default: {
|
|
319
|
+
top: "0px",
|
|
320
|
+
right: "0px",
|
|
321
|
+
bottom: "0px",
|
|
322
|
+
left: "0px",
|
|
323
|
+
height: "100%",
|
|
324
|
+
width: "100%",
|
|
325
|
+
background: "",
|
|
326
|
+
border: "1px"
|
|
327
|
+
}
|
|
312
328
|
};
|
|
313
329
|
},
|
|
314
330
|
computed: {
|
|
315
331
|
style() {
|
|
316
332
|
let e = {};
|
|
317
|
-
return
|
|
318
|
-
|
|
333
|
+
return this.margin(this.offset), _(["BackGround", "BordeR", "Height", "Width", "Top", "Right", "Bottom", "Left"], (t, s) => {
|
|
334
|
+
this.css(e, s);
|
|
319
335
|
}), e;
|
|
320
336
|
}
|
|
321
337
|
},
|
|
@@ -328,63 +344,70 @@ const X = {
|
|
|
328
344
|
},
|
|
329
345
|
offset: {
|
|
330
346
|
handler(e) {
|
|
331
|
-
this.
|
|
347
|
+
this.margin(e);
|
|
332
348
|
},
|
|
333
349
|
deep: !0
|
|
334
350
|
}
|
|
335
351
|
},
|
|
336
352
|
methods: {
|
|
337
|
-
exec:
|
|
338
|
-
isEmpty:
|
|
339
|
-
isSimplyType:
|
|
353
|
+
exec: W,
|
|
354
|
+
isEmpty: M,
|
|
355
|
+
isSimplyType: I,
|
|
356
|
+
tolower(e, t) {
|
|
357
|
+
return t && (e = e.replace(/[a-z]/g, "")), e.toLowerCase();
|
|
358
|
+
},
|
|
359
|
+
css(e, t) {
|
|
360
|
+
let s = this.tolower(t), h = this[s] || this.default[s];
|
|
361
|
+
!h || this.default[s] == h || (e["--" + this.tolower(t, !0)] = W(h));
|
|
362
|
+
},
|
|
340
363
|
change(e) {
|
|
341
|
-
|
|
342
|
-
},
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
364
|
+
I(e) || (this.closecss = z(e, "color=>--s-card-close-color,*"));
|
|
365
|
+
},
|
|
366
|
+
margin(e) {
|
|
367
|
+
A(this, z(
|
|
368
|
+
D(e) ? e.split(/\s*(?:,|\s+)\s*/) : e,
|
|
369
|
+
"0=>top,1|0=>right,2|0=>bottom,3|1|0=>left",
|
|
370
|
+
!0
|
|
371
|
+
), !0);
|
|
349
372
|
}
|
|
350
373
|
},
|
|
351
374
|
mounted() {
|
|
352
|
-
this.change(this.close)
|
|
375
|
+
this.change(this.close);
|
|
353
376
|
}
|
|
354
|
-
},
|
|
355
|
-
function
|
|
356
|
-
return
|
|
377
|
+
}, le = { class: "card-title" }, re = { class: "card-content" };
|
|
378
|
+
function he(e, t, s, h, l, i) {
|
|
379
|
+
return b(), k("div", {
|
|
357
380
|
class: "card",
|
|
358
|
-
style:
|
|
381
|
+
style: T(i.style)
|
|
359
382
|
}, [
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
class:
|
|
366
|
-
style:
|
|
367
|
-
onClick: t[0] || (t[0] = (
|
|
383
|
+
f(e.$slots, "default", {}, () => [
|
|
384
|
+
f(e.$slots, "title", {}, () => [
|
|
385
|
+
S("div", le, [
|
|
386
|
+
q(J(s.show || s.title) + " ", 1),
|
|
387
|
+
S("div", {
|
|
388
|
+
class: j(["card-close", { hide: i.isSimplyType(s.close) ? !s.close : !1 }]),
|
|
389
|
+
style: T(l.closecss),
|
|
390
|
+
onClick: t[0] || (t[0] = (r) => e.$emit("close"))
|
|
368
391
|
}, null, 6)
|
|
369
392
|
])
|
|
370
393
|
], !0),
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
394
|
+
f(e.$slots, "content", {}, () => [
|
|
395
|
+
S("div", re, [
|
|
396
|
+
f(e.$slots, "inner", {}, void 0, !0)
|
|
374
397
|
])
|
|
375
398
|
], !0)
|
|
376
399
|
], !0)
|
|
377
400
|
], 4);
|
|
378
401
|
}
|
|
379
|
-
const
|
|
402
|
+
const ne = /* @__PURE__ */ V(ie, [["render", he], ["__scopeId", "data-v-def66c95"]]), oe = [se, ne], ue = {
|
|
380
403
|
install(e) {
|
|
381
|
-
|
|
404
|
+
oe.forEach((t) => {
|
|
382
405
|
e.component("S" + t.name, t), e.component(t.name + "S", t);
|
|
383
406
|
});
|
|
384
407
|
}
|
|
385
408
|
};
|
|
386
409
|
export {
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
410
|
+
ne as Card,
|
|
411
|
+
se as Flyweight,
|
|
412
|
+
ue as default
|
|
390
413
|
};
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# 享元模式 [](https://npmjs.com/package/@soei/flyweight) [](LICENSE.md) [](https://www.npmjs.com/package/@soei/flyweight) [](https://npmjs.com/package/@soei/flyweight)
|
|
4
4
|
|
|
5
|
-
[](https://npmjs.com/package/@soei/flyweight)
|
|
5
|
+
[](https://npmjs.com/package/@soei/flyweight)
|
|
6
6
|
|
|
7
7
|
```html
|
|
8
8
|
<div style="height:100px;width:300px;">
|
|
@@ -20,6 +20,98 @@ npm i @soei/flyweight
|
|
|
20
20
|
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
+
## `使用 <s-flyweight ...> `
|
|
24
|
+
|
|
25
|
+
```html
|
|
26
|
+
<!-- scroll-x 横向滚动, 无[scroll-x]属性这是上下滚动 -->
|
|
27
|
+
<s-flyweight scroll-x></s-flyweight>
|
|
28
|
+
|
|
29
|
+
<!-- hover-scroll 鼠标移入显示滚动条样式 -->
|
|
30
|
+
<s-flyweight hover-scroll class="your-class"></s-flyweight>
|
|
31
|
+
<s-card hover-scroll class="your-class"></s-card>
|
|
32
|
+
<style lang="scss">
|
|
33
|
+
.your-class {
|
|
34
|
+
/* 设置滚动条颜色 */
|
|
35
|
+
--scrollbar-color: red;
|
|
36
|
+
/* 设置滚动条宽度 */
|
|
37
|
+
--scrollbar-width: 10px;
|
|
38
|
+
}
|
|
39
|
+
</style>
|
|
40
|
+
|
|
41
|
+
<!-- 设置高度 -->
|
|
42
|
+
<s-flyweight height="100% - 10px"></s-flyweight>
|
|
43
|
+
|
|
44
|
+
<!-- 设置宽度 -->
|
|
45
|
+
<s-flyweight width="100% - 10px"></s-flyweight>
|
|
46
|
+
<s-flyweight :width="`100% - 10px`"></s-flyweight>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## `使用 <s-card ...> `
|
|
50
|
+
|
|
51
|
+
```html
|
|
52
|
+
<!-- auto-scroll 默认显示滚动条样式 -->
|
|
53
|
+
<s-card auto-scroll class="your-class"></s-card>
|
|
54
|
+
<!-- hover-scroll 鼠标移入显示滚动条样式 -->
|
|
55
|
+
<s-card hover-scroll class="your-class"></s-card>
|
|
56
|
+
<style lang="scss">
|
|
57
|
+
.your-class {
|
|
58
|
+
/* 设置滚动条颜色 */
|
|
59
|
+
--scrollbar-color: red;
|
|
60
|
+
/* 设置滚动条宽度 */
|
|
61
|
+
--scrollbar-width: 10px;
|
|
62
|
+
}
|
|
63
|
+
</style>
|
|
64
|
+
|
|
65
|
+
<!-- 设置高度 -->
|
|
66
|
+
<s-card height="100% - 10px"></s-card>
|
|
67
|
+
|
|
68
|
+
<!-- 设置边距 -->
|
|
69
|
+
<s-card offset="10px"></s-card>
|
|
70
|
+
<s-card :offset="[10]"></s-card>
|
|
71
|
+
|
|
72
|
+
<!-- 带删除的卡片 -->
|
|
73
|
+
<s-card :close="true" #content @close="close"></s-card>
|
|
74
|
+
<!-- 设置删除按钮颜色 -->
|
|
75
|
+
<s-card
|
|
76
|
+
:close="{
|
|
77
|
+
color: 'red'
|
|
78
|
+
}"
|
|
79
|
+
#content
|
|
80
|
+
@close="close"
|
|
81
|
+
></s-card>
|
|
82
|
+
|
|
83
|
+
<s-card :close="true" @close="close">
|
|
84
|
+
<template #content>呈现内容</template>
|
|
85
|
+
</s-card>
|
|
86
|
+
<script setup>
|
|
87
|
+
let close = () => {
|
|
88
|
+
console.log("close");
|
|
89
|
+
};
|
|
90
|
+
</script>
|
|
91
|
+
|
|
92
|
+
<!-- 设置标题 -->
|
|
93
|
+
<s-card
|
|
94
|
+
title="标题"
|
|
95
|
+
class="flyweight"
|
|
96
|
+
|
|
97
|
+
// ** 布局 **
|
|
98
|
+
flex row center column
|
|
99
|
+
|
|
100
|
+
// ** 边距 **
|
|
101
|
+
offset="20, 0, 10, 0"
|
|
102
|
+
|
|
103
|
+
// ** 是否显示关闭按钮 **
|
|
104
|
+
:close="true"
|
|
105
|
+
@close="close"
|
|
106
|
+
|
|
107
|
+
// ** 插槽 **
|
|
108
|
+
[#content, #inner, #default]
|
|
109
|
+
>
|
|
110
|
+
</s-card>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
````
|
|
114
|
+
|
|
23
115
|
`Vue3` 引入方式
|
|
24
116
|
|
|
25
117
|
```html
|
|
@@ -30,7 +122,7 @@ npm i @soei/flyweight
|
|
|
30
122
|
<style>
|
|
31
123
|
@import "@soei/flyweight/dist/style.css";
|
|
32
124
|
</style>
|
|
33
|
-
|
|
125
|
+
````
|
|
34
126
|
|
|
35
127
|
```javascript
|
|
36
128
|
// main.js
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@soei/flyweight",
|
|
3
3
|
"private": false,
|
|
4
4
|
"description": "Vue组件, 列表de享元模式~减少DOM节点 flyweight, Card组件",
|
|
5
|
-
"version": "0.2.
|
|
5
|
+
"version": "0.2.5",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "Flyweight.cjs",
|
|
8
8
|
"module": "Flyweight.js",
|
|
@@ -24,7 +24,9 @@
|
|
|
24
24
|
"Flyweight",
|
|
25
25
|
"享元模式",
|
|
26
26
|
"List",
|
|
27
|
-
"列表展示"
|
|
27
|
+
"列表展示",
|
|
28
|
+
"Card",
|
|
29
|
+
"卡片展示"
|
|
28
30
|
],
|
|
29
31
|
"author": "soei | alwbg@163.com",
|
|
30
32
|
"license": "ISC"
|
package/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
@charset "UTF-8";.flyweight[data-v-00424b62]{height:100%;width:100%;overflow:auto;position:relative}.flyweight[hover-scroll][data-v-00424b62]::-webkit-scrollbar-track,.flyweight[auto-scroll][data-v-00424b62]::-webkit-scrollbar-track{border-radius:10px}.flyweight[hover-scroll][data-v-00424b62]::-webkit-scrollbar-thumb,.flyweight[auto-scroll][data-v-00424b62]::-webkit-scrollbar-thumb{border-radius:10px;background-color:transparent}.flyweight[hover-scroll][data-v-00424b62]::-webkit-scrollbar,.flyweight[auto-scroll][data-v-00424b62]::-webkit-scrollbar{border-radius:10px;width:var(--scrollbar-width, 5px);height:var(--scrollbar-width, 5px)}.flyweight[hover-scroll][data-v-00424b62]:hover::-webkit-scrollbar-thumb,.flyweight[auto-scroll][data-v-00424b62]::-webkit-scrollbar-thumb{background-color:var(--scrollbar-color, #101010)}.flyweight[scroll-x] .flyweight-all[data-v-00424b62]{width:var(--flyweight-content);height:auto;min-height:100%}.flyweight[scroll-x] .flyweight-all[data-v-00424b62]+*{left:var(--flyweight-content);position:absolute;top:0;height:100%}.flyweight .flyweight-all[data-v-00424b62]{height:var(--flyweight-content)}.flyweight .flyweight-all[data-v-00424b62]>*{width:calc(var(--width));height:var(--height);position:absolute}.card[data-v-def66c95]{--t: 0px;--r: 0px;--b: 0px;--l: 0px;--h: 100%;--w: 100%;--br: 1px;position:relative;background-color:var(--bg, var(--card-background-color, #fff));padding:10px;border-radius:10px;box-sizing:border-box;border-style:solid;border-color:var(--card-border-color, #555);border-width:var(--br);justify-content:flex-start;margin:var(--t) var(--r) var(--b) var(--l);height:calc(var(--h) - var(--t) - var(--b));width:calc(var(--w) - var(--l) - var(--r));overflow:auto}.card[hover-scroll][data-v-def66c95]::-webkit-scrollbar-track,.card[auto-scroll][data-v-def66c95]::-webkit-scrollbar-track{border-radius:10px}.card[hover-scroll][data-v-def66c95]::-webkit-scrollbar-thumb,.card[auto-scroll][data-v-def66c95]::-webkit-scrollbar-thumb{border-radius:10px;background-color:transparent}.card[hover-scroll][data-v-def66c95]::-webkit-scrollbar,.card[auto-scroll][data-v-def66c95]::-webkit-scrollbar{border-radius:10px;width:var(--scrollbar-width, 5px);height:var(--scrollbar-width, 5px)}.card[hover-scroll][data-v-def66c95]:hover::-webkit-scrollbar-thumb,.card[auto-scroll][data-v-def66c95]::-webkit-scrollbar-thumb{background-color:var(--scrollbar-color, #101010)}.card[simply][data-v-def66c95],.card [simply][data-v-def66c95]{background-color:inherit;border:0!important}.card[flex][data-v-def66c95],.card [flex][data-v-def66c95]{display:flex}.card[column][data-v-def66c95],.card [column][data-v-def66c95]{flex-direction:column}.card[row][data-v-def66c95],.card [row][data-v-def66c95]{flex-direction:row}.card[center][data-v-def66c95],.card [center][data-v-def66c95]{justify-content:center}.card[vcenter][data-v-def66c95],.card [vcenter][data-v-def66c95]{align-items:center}.card .card-title[data-v-def66c95]{max-height:40px}.card .card-close[data-v-def66c95]{position:absolute;width:20px;height:20px;right:10px;top:10px;border-radius:10px;z-index:1;--s-transform: 45deg;--s-hover-transform: 35deg;--s-close-width: 11px;--s-close-height: 2px;cursor:pointer;background-color:var(--s-card-close-background-color, transparent);transition:all .3s ease}.card .card-close.hide[data-v-def66c95]{display:none}.card .card-close[data-v-def66c95]:before,.card .card-close[data-v-def66c95]:after{content:"";width:var(--s-close-width, 11px);height:var(--s-close-height, 2px);background-color:var(--s-card-close-color, #555);transform-origin:center;position:inherit;border-radius:10px;top:calc(50% - var(--s-close-height, 2px) / 2);left:calc(50% - var(--s-close-width, 11px) / 2)}.card .card-close[data-v-def66c95]:before{transform:rotate(var(--s-transform, 45deg))}.card .card-close[data-v-def66c95]:after{transform:rotate(calc(0deg - var(--s-transform, 45deg)))}.card .card-close[data-v-def66c95]:hover:before{transform:rotate(var(--s-hover-transform, 45deg))}.card .card-close[data-v-def66c95]:hover:after{transform:rotate(calc(0deg - var(--s-hover-transform, 45deg)))}.card .card-content[data-v-def66c95]{overflow:auto;height:100%}
|