首页 > 其他分享 >js画布封装之平铺(排版)

js画布封装之平铺(排版)

时间:2023-02-04 20:55:57浏览次数:53  
标签:cic 平铺 ci renderCI UTILS random js 画布 scrollCI

 

实现代码:

 1 import { UTILS } from "./Utils.js";
 2 import { CanvasImageDraw, CanvasEvent, CanvasImageScroll, CanvasImageCustom } from "./ElementUtils.js";
 3 
 4 /* 测试封装 canvas
 5     下载地址(无提取码, 2023.2.4 更新): https://www.123pan.com/s/ylTuVv-SfhpH
 6 */
 7 function main(){
 8 
 9     //CanvasImage 的渲染器
10     const renderCI = new CanvasImageDraw({width: innerWidth, height: innerHeight}),
11 
12     //CanvasImageDraw 的滚动条
13     scrollCI = new CanvasImageScroll(renderCI, {scrollSize: 8}),
14     
15     //CanvasImage 的事件运行类
16     eventCI = new CanvasEvent(renderCI),
17 
18     shadow = {blur: 5, color: "#666666", offsetX: 2, offsetY: 5},
19 
20     onup = v => {
21         if(v.delta < 600){
22             v.target.clear().fill("#333333").fillText(String(renderCI.list.indexOf(v.target)), "#cccccc");
23             renderCI.redraw();
24             cic.removeEventListener("up", onup);
25         }
26     }
27 
28     //批量创建 CanvasImage
29     for(let i = 0; i < 10000; i++){
30         const cic = new CanvasImageCustom()
31         .size(UTILS.random(10, 100), UTILS.random(10, 100))
32         .fillRect(`rgb(${UTILS.random(0,255)}, ${UTILS.random(0,255)}, ${UTILS.random(0,255)})`)
33         .fillText(String(i), "#000000");
34         cic.opacity = UTILS.random(0, 1);
35         cic.shadow = shadow;
36 
37         //scrollCI.bindScroll(ci: CanvasImage) 方法可以使滚动条(scrollCI)能够监听ci的位置和ci.visible属性的变化来更新滚动条
38         //scrollCI.changeCIAdd(ci: CanvasImage) 方法根据ci主动更新一次滚动条
39         scrollCI.bindScroll(cic);
40         scrollCI.changeCIAdd(cic);
41 
42         //加入到渲染器(renderCI)队列
43         renderCI.list[i] = cic;
44 
45         //添加鼠标事件
46         cic.addEventListener("up", onup);
47     }
48 
49     //平铺排序(向下看齐)和添加至dom树
50     renderCI.sortCIPos(null, {disX: 10, disY: 10, lineHeight: "bottom"})
51     .render(document.body);
52 
53     //退出:
54     //scrollCI.unbindEvent();
55     //canvasEvent.unbindEvent();
56     //renderCI.exit();
57     console.log(renderCI, scrollCI);
58 
59 }
60 
61 main();

 

结果视图:

 

 

下载地址(无提取码, 2023.2.4 更新): https://www.123pan.com/s/ylTuVv-SfhpH

运行 GoServer.exe 然后打开浏览器输入 http://localhost:8080/ 

标签:cic,平铺,ci,renderCI,UTILS,random,js,画布,scrollCI
From: https://www.cnblogs.com/weihexinCode/p/17092363.html

相关文章

  • vuejs从入门到精通——watch侦听器
    watch侦听器https://cn.vuejs.org/guide/essentials/watchers.html虽然计算属性在大多数情况下更适合,但有时也需要一个自定义的侦听器。 这就是为什么vue通过watch......
  • vuejs从入门到精通——计算属性缓存 vs 方法
    计算属性缓存vs方法https://cn.vuejs.org/guide/essentials/computed.html#basic-exampletemplate:<p>{{calculateBooksMessage()}}</p>js://组件中fun......
  • vuejs从入门到精通——可写计算属性
    可写计算属性https://cn.vuejs.org/guide/essentials/computed.html#basic-example 计算属性默认是只读的。当你尝试修改一个计算属性时,你会收到一个运行时警告。只在......
  • nodejs---执行任意js文件
    nodejs---执行任意js文件keywords:直接运行javascripttypescriptjstshello.jsconsole.log('HelloWorld!')命令行执行:nodehello.jstypescript文件(比如hello.......
  • Cesium 加载GeoJson数据,看不到实体效果
    问题我真的不知道为什么几乎每次要用Cesium加什么东西,不管是点线面还是图层,总是不顺利要加载一个GeoJson数据,数据包含几个点,需要展示点的位置和标签名称。用以下代码,打印......
  • vuejs从入门到精通——计算属性
    计算属性https://cn.vuejs.org/guide/essentials/computed.html模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。......
  • JSBridge:混合开发中的双向通信
    什么是WebViewWebView是移动端中的一个控件,它为JS运行提供了一个沙箱环境。WebView能够加载指定的url,拦截页面发出的各种请求等各种页面控制功能,JSB的实现就依赖于We......
  • Java实现JSONObject对象与Json字符串互相转换
    Java实现JSONObject对象与Json字符串互相转换JSONObject转JSON字符串Java代码: JSONObjectjsonObject=newJSONObject();jsonObject.put("name","wjw")......
  • vue/ts 新建项目时好用的配置 【vite.config.ts、tsconfig.json、】
    创建完项目后的基础配置用vite创建初始vue项目后,会生成一个默认的vite.config.ts文件创建完的内容import{defineConfig}from'vite'importvuefrom'@vitejs/plu......
  • js中导入本地图片资源
    如果图片不在本地,在某个服务器上,如http://www.xxx.com/1.pngjs中直接使用<script> data(){ return{url:'http://www.xxx.com/1.png'}......