vue-color-ui 0.0.36 → 0.0.38

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/README.md CHANGED
@@ -575,3 +575,144 @@ import TTopBar from './components/TTopBar.vue';
575
575
  import TTopBar from './components/TTopBar.vue';
576
576
  </script>
577
577
  ```
578
+
579
+ ## TVirtualScrollSlide 组件使用文档
580
+
581
+ `TVirtualScrollSlide` 是一个用于显示虚拟滚动滑动列表的 Vue 组件,支持触摸滑动事件处理和动态加载内容。
582
+
583
+ ### 基本用法
584
+
585
+ ```vue
586
+ <template>
587
+ <TVirtualScrollSlide
588
+ :virtualTotal="3"
589
+ :list="elements"
590
+ :render="renderItem"
591
+ @slideLeft="handleSlideLeft"
592
+ @slideRight="handleSlideRight"
593
+ />
594
+ </template>
595
+
596
+ <script setup lang="ts">
597
+ import { ref, h } from "vue";
598
+ import TVirtualScrollSlide from "@/components/TVirtualScrollSlide.vue";
599
+ import TNavCard from "@/components/TNavCard.vue";
600
+
601
+ const elements = ref([
602
+ { title: "布局", name: "layout", color: "cyan", cuIcon: "newsfill" },
603
+ { title: "背景", name: "background", color: "blue", cuIcon: "colorlens" },
604
+ { title: "文本", name: "text", color: "purple", cuIcon: "font" },
605
+ { title: "图标", name: "icon", color: "mauve", cuIcon: "cuIcon" },
606
+ { title: "按钮", name: "button", color: "pink", cuIcon: "btn" },
607
+ { title: "标签", name: "tag", color: "brown", cuIcon: "tagfill" },
608
+ { title: "头像", name: "avatar", color: "red", cuIcon: "myfill" },
609
+ { title: "进度条", name: "progress", color: "orange", cuIcon: "icloading" },
610
+ { title: "边框阴影", name: "shadow", color: "olive", cuIcon: "copy" },
611
+ { title: "加载", name: "loading", color: "green", cuIcon: "loading2" },
612
+ ]);
613
+
614
+ const renderItem = (item: any, index: number) => {
615
+ return h(TNavCard, { items: [item] });
616
+ };
617
+
618
+ const handleSlideLeft = (item: any, index: any) => {
619
+ console.log("Slide Left:", item, index);
620
+ };
621
+
622
+ const handleSlideRight = (item: any, index: any) => {
623
+ console.log("Slide Right:", item, index);
624
+ };
625
+ </script>
626
+ ```
627
+
628
+ ### 属性
629
+
630
+ `TVirtualScrollSlide` 组件支持以下属性:
631
+
632
+ | 属性名 | 类型 | 默认值 | 描述 |
633
+ | -------------- | ----------------------------------- | ------ | ------------------ |
634
+ | `virtualTotal` | `number` | - | 虚拟显示的总数量 |
635
+ | `render` | `(item: any, index: number) => any` | - | 渲染每个项目的函数 |
636
+ | `list` | `any[]` | - | 数据列表 |
637
+
638
+ ### 事件
639
+
640
+ `TVirtualScrollSlide` 组件支持以下事件:
641
+
642
+ | 事件名 | 描述 |
643
+ | ------------ | ----------------------------------------------------------- |
644
+ | `slideLeft` | 当向左滑动时触发,回调参数为 `{ item: any, index: number }` |
645
+ | `slideRight` | 当向右滑动时触发,回调参数为 `{ item: any, index: number }` |
646
+
647
+ ### 示例
648
+
649
+ #### 基本使用
650
+
651
+ ```vue
652
+ <template>
653
+ <TVirtualScrollSlide
654
+ :virtualTotal="3"
655
+ :list="elements"
656
+ :render="renderItem"
657
+ @slideLeft="handleSlideLeft"
658
+ @slideRight="handleSlideRight"
659
+ />
660
+ </template>
661
+
662
+ <script setup lang="ts">
663
+ import { ref, h } from "vue";
664
+ import TVirtualScrollSlide from "@/components/TVirtualScrollSlide.vue";
665
+ import TNavCard from "@/components/TNavCard.vue";
666
+
667
+ const elements = ref([
668
+ { title: "布局", name: "layout", color: "cyan", cuIcon: "newsfill" },
669
+ { title: "背景", name: "background", color: "blue", cuIcon: "colorlens" },
670
+ { title: "文本", name: "text", color: "purple", cuIcon: "font" },
671
+ { title: "图标", name: "icon", color: "mauve", cuIcon: "cuIcon" },
672
+ { title: "按钮", name: "button", color: "pink", cuIcon: "btn" },
673
+ { title: "标签", name: "tag", color: "brown", cuIcon: "tagfill" },
674
+ { title: "头像", name: "avatar", color: "red", cuIcon: "myfill" },
675
+ { title: "进度条", name: "progress", color: "orange", cuIcon: "icloading" },
676
+ { title: "边框阴影", name: "shadow", color: "olive", cuIcon: "copy" },
677
+ { title: "加载", name: "loading", color: "green", cuIcon: "loading2" },
678
+ ]);
679
+
680
+ const renderItem = (item: any, index: number) => {
681
+ return h(TNavCard, { items: [item] });
682
+ };
683
+
684
+ const handleSlideLeft = (item: any, index: any) => {
685
+ console.log("Slide Left:", item, index);
686
+ };
687
+
688
+ const handleSlideRight = (item: any, index: any) => {
689
+ console.log("Slide Right:", item, index);
690
+ };
691
+ </script>
692
+ ```
693
+
694
+ ### 触摸滑动事件
695
+
696
+ 组件支持触摸滑动事件处理:
697
+
698
+ - 向左滑动触发 `slideLeft` 事件
699
+ - 向右滑动触发 `slideRight` 事件
700
+ - 向上滑动加载下一项
701
+ - 向下滑动加载上一项
702
+
703
+ ### 自定义渲染
704
+
705
+ 通过 `render` 属性,可以自定义每个项目的渲染方式:
706
+
707
+ ```vue
708
+ <script setup lang="ts">
709
+ import { h } from "vue";
710
+ import TNavCard from "@/components/TNavCard.vue";
711
+
712
+ const renderItem = (item: any, index: number) => {
713
+ return h(TNavCard, { items: [item] });
714
+ };
715
+ </script>
716
+ ```
717
+
718
+ 以上就是 `TVirtualScrollSlide` 组件的使用文档,详细介绍了组件的基本用法、属性、事件和示例。希望对您使用该组件有所帮助。
package/lib/style.css CHANGED
@@ -1 +1 @@
1
- .nav-list{display:flex;flex-wrap:wrap;padding:0 20px;justify-content:space-between}.nav-li{padding:15px;border-radius:6px;width:45%;margin:0 2.5% 20px;background-size:cover;background-position:center;position:relative;z-index:1;cursor:pointer}.nav-li:after{content:"";position:absolute;z-index:-1;background-color:inherit;width:100%;height:100%;left:0;bottom:-10%;border-radius:5px;opacity:.2;transform:scale(.9)}.nav-li.cur{color:#fff;background:#5eb95e;box-shadow:2px 2px 3px #5eb95e66}.nav-title{font-size:16px;font-weight:300}.nav-title:first-letter{font-size:20px;margin-right:2px}.nav-name{font-size:14px;text-transform:Capitalize;margin-top:10px;position:relative}.nav-name:before{content:"";position:absolute;display:block;width:20px;height:3px;background:#fff;bottom:0;right:0;opacity:.5}.nav-name:after{content:"";position:absolute;display:block;width:50px;height:1px;background:#fff;bottom:0;right:20px;opacity:.3}.nav-name:first-letter{font-weight:700;font-size:18px;margin-right:1px}.nav-li text{position:absolute;right:15px;top:15px;font-size:26px;width:30px;height:30px;text-align:center;line-height:30px}.text-light{font-weight:300}@keyframes show{0%{transform:translateY(-50px)}60%{transform:translateY(20px)}to{transform:translateY(0)}}@-webkit-keyframes show{0%{transform:translateY(-50px)}60%{transform:translateY(20px)}to{transform:translateY(0)}}.cu-card-cover[data-v-bbdb83ff]{width:100%}.cu-card .content img[data-v-bbdb83ff]{width:33%;object-fit:cover}.cu-card-cover{width:100%}.cu-card .content img{width:33%;object-fit:cover}.string-list[data-v-c7a21a1c]{width:100%;display:block;list-style:none;background-color:#fff;padding:2px 5px;margin:0;box-shadow:0 4px 8px #0000001a}.string-list li[data-v-c7a21a1c]{line-height:1.5rem;padding:8px 12px;border-bottom:1px solid #eee;transition:background-color .3s,color .3s}.string-list li[data-v-c7a21a1c]:last-child{border-bottom:none}.string-list li[data-v-c7a21a1c]:hover{background-color:#f0f0f0;color:#333;cursor:pointer;border-radius:4px}.emoji-panel[data-v-e9a4aa4d]{background-color:#fff;border:1px solid #ccc;padding:10px;display:flex;flex-wrap:wrap;z-index:1000;height:280px;overflow-y:auto}.emoji-panel span[data-v-e9a4aa4d]{cursor:pointer;font-size:24px;margin:5px}.function-panel-container[data-v-1fefca20]{background-color:#fff;box-sizing:border-box;width:100vw;border-top:1px solid #66666631}.function-panel[data-v-1fefca20]{display:flex;flex-wrap:wrap;background-color:#fff;padding:10px;z-index:1000;max-width:360px;gap:18px;margin:0 auto}.function-item[data-v-1fefca20]{display:flex;flex-direction:column;align-items:center;margin:10px 0;cursor:pointer;width:70px;height:70px;background-color:#f9f9f9;border-radius:10px;justify-content:center;transition:background-color .3s}.function-item[data-v-1fefca20]:hover{background-color:#e6e6e6}.function-item span[data-v-1fefca20]{margin-top:5px;font-size:14px;color:#333;text-align:center}input[data-v-7b4ca731]:focus{outline:none}.tab-content{padding:10px 16px;background:#fff}canvas[data-v-022c82bd]{margin:0 auto}
1
+ .nav-list{display:flex;flex-wrap:wrap;padding:0 20px;justify-content:space-between}.nav-li{padding:15px;border-radius:6px;width:45%;margin:0 2.5% 20px;background-size:cover;background-position:center;position:relative;z-index:1;cursor:pointer}.nav-li:after{content:"";position:absolute;z-index:-1;background-color:inherit;width:100%;height:100%;left:0;bottom:-10%;border-radius:5px;opacity:.2;transform:scale(.9)}.nav-li.cur{color:#fff;background:#5eb95e;box-shadow:2px 2px 3px #5eb95e66}.nav-title{font-size:16px;font-weight:300}.nav-title:first-letter{font-size:20px;margin-right:2px}.nav-name{font-size:14px;text-transform:Capitalize;margin-top:10px;position:relative}.nav-name:before{content:"";position:absolute;display:block;width:20px;height:3px;background:#fff;bottom:0;right:0;opacity:.5}.nav-name:after{content:"";position:absolute;display:block;width:50px;height:1px;background:#fff;bottom:0;right:20px;opacity:.3}.nav-name:first-letter{font-weight:700;font-size:18px;margin-right:1px}.nav-li text{position:absolute;right:15px;top:15px;font-size:26px;width:30px;height:30px;text-align:center;line-height:30px}.text-light{font-weight:300}@keyframes show{0%{transform:translateY(-50px)}60%{transform:translateY(20px)}to{transform:translateY(0)}}@-webkit-keyframes show{0%{transform:translateY(-50px)}60%{transform:translateY(20px)}to{transform:translateY(0)}}.cu-card-cover[data-v-bbdb83ff]{width:100%}.cu-card .content img[data-v-bbdb83ff]{width:33%;object-fit:cover}.cu-card-cover{width:100%}.cu-card .content img{width:33%;object-fit:cover}.string-list[data-v-c7a21a1c]{width:100%;display:block;list-style:none;background-color:#fff;padding:2px 5px;margin:0;box-shadow:0 4px 8px #0000001a}.string-list li[data-v-c7a21a1c]{line-height:1.5rem;padding:8px 12px;border-bottom:1px solid #eee;transition:background-color .3s,color .3s}.string-list li[data-v-c7a21a1c]:last-child{border-bottom:none}.string-list li[data-v-c7a21a1c]:hover{background-color:#f0f0f0;color:#333;cursor:pointer;border-radius:4px}.emoji-panel[data-v-e9a4aa4d]{background-color:#fff;border:1px solid #ccc;padding:10px;display:flex;flex-wrap:wrap;z-index:1000;height:280px;overflow-y:auto}.emoji-panel span[data-v-e9a4aa4d]{cursor:pointer;font-size:24px;margin:5px}.function-panel-container[data-v-1fefca20]{background-color:#fff;box-sizing:border-box;width:100vw;border-top:1px solid #66666631}.function-panel[data-v-1fefca20]{display:flex;flex-wrap:wrap;background-color:#fff;padding:10px;z-index:1000;max-width:360px;gap:18px;margin:0 auto}.function-item[data-v-1fefca20]{display:flex;flex-direction:column;align-items:center;margin:10px 0;cursor:pointer;width:70px;height:70px;background-color:#f9f9f9;border-radius:10px;justify-content:center;transition:background-color .3s}.function-item[data-v-1fefca20]:hover{background-color:#e6e6e6}.function-item span[data-v-1fefca20]{margin-top:5px;font-size:14px;color:#333;text-align:center}input[data-v-7b4ca731]:focus{outline:none}.tab-content{padding:10px 16px;background:#fff}canvas[data-v-022c82bd]{margin:0 auto}.slide-wrapper[data-v-8600af8d]{overflow:hidden;position:relative;width:100vw;height:100vh}.slide-list[data-v-8600af8d]{position:absolute;width:100%;transition:transform .3s ease}.slide-item[data-v-8600af8d]{position:absolute;width:100%}