You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							140 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							140 lines
						
					
					
						
							3.2 KiB
						
					
					
				| <html>
 | |
| <head>
 | |
|   <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
 | |
|   <title>Document</title>
 | |
|   <script src="konva.min.js"></script>
 | |
| </head>
 | |
| <body>
 | |
| <div id="map"></div>
 | |
| <script>
 | |
|   //todo 滚动条
 | |
|   //todo 可见范围渲染
 | |
|   //
 | |
|   window.onload=function (){
 | |
|     const width=window.innerWidth*0.996;
 | |
|     const height=window.innerHeight*.983
 | |
|     const stage = new Konva.Stage({
 | |
|       container: 'map',   // id of container <div> *包裹舞台的DIV元素的ID
 | |
|       width: width,
 | |
|       height: height
 | |
|     });
 | |
| 
 | |
|     const layer = new Konva.Layer();
 | |
| 
 | |
|     console.time()
 | |
|     const cellWidth=94;
 | |
|     const mountGroup=new Konva.Group({
 | |
|       x:0,
 | |
|       y:0,
 | |
|       clip:{
 | |
|         x:0,
 | |
|         y:0,
 | |
|         width:width,
 | |
|         height:height
 | |
|       }
 | |
|     })
 | |
|     const totalRow=100
 | |
|     for (let row=0;row<totalRow;row++){
 | |
|       //不在可视范围内隐藏显示
 | |
|       const group = new Konva.Group({
 | |
|         // visible:row>height/25?false:true,
 | |
|       });
 | |
|       group.setAttr('customData',{
 | |
|         czbh:'c16-'+row
 | |
|       })
 | |
|       for (let col=0;col<20;col++){
 | |
|         const cell=new Konva.Rect({
 | |
|           x:col*cellWidth,
 | |
|           y:row*25,
 | |
|           width:cellWidth,
 | |
|           height:25,
 | |
|           stroke:'black',
 | |
|           strokeWidth:1,
 | |
|         })
 | |
|         const text=new Konva.Text({
 | |
|           x:col*cellWidth,
 | |
|           y:row*25,
 | |
|           width:cellWidth,
 | |
|           height:25,
 | |
|           lineHeight:2.5,
 | |
|           stroke:'black',
 | |
|           strokeWidth:0.1,
 | |
|           text:col*row,
 | |
|           align:'center',
 | |
|         })
 | |
|         group.add(cell)
 | |
|         group.add(text)
 | |
|       }
 | |
|       group.on('click', function(evt) {
 | |
|         console.log(evt.target)
 | |
|         console.log('room obj', evt.target.parent.getAttr("customData"));
 | |
|       });
 | |
|       mountGroup.add(group)
 | |
|     }
 | |
|     console.log(mountGroup)
 | |
|     console.timeEnd();
 | |
|     // const clip=mountGroup.clip({
 | |
|     //   x:0,
 | |
|     //   y:height,
 | |
|     //   width:width,
 | |
|     //   height:height
 | |
|     // })
 | |
|     mountGroup.setAttr('height',totalRow*25)
 | |
|     layer.add(mountGroup);
 | |
| 
 | |
|     // //添加滚动条
 | |
|     // if (totalRow*25>height){
 | |
|     //   const group = new Konva.Group({
 | |
|     //     x:width-12,
 | |
|     //     y:0,
 | |
|     //     stroke:'gray',
 | |
|     //     strokeWidth:0.2,
 | |
|     //   });
 | |
|     //   const scroll=new Konva.Rect({
 | |
|     //     width:10,
 | |
|     //     height:height/(totalRow*25)*10,
 | |
|     //     fill:'gray'
 | |
|     //   })
 | |
|     //   group.add(scroll)
 | |
|     //   layer.add(group)
 | |
|     // }
 | |
|     //
 | |
|     layer.on('wheel',(evt)=>{
 | |
|       const ey=-evt.evt.deltaY
 | |
|       const my=ey>0?10:-10
 | |
|       for (let i=0;i<Math.abs(100);i+=10){
 | |
|         const {x,y}=mountGroup.getAbsolutePosition()
 | |
|         if (y>=0&&ey>0){
 | |
|           break
 | |
|         }
 | |
|         mountGroup.move({
 | |
|           y:my
 | |
|         })
 | |
|       }
 | |
| 
 | |
|     })
 | |
|     // // create our shape *创建我们的形状
 | |
|     // const circle = new Konva.Circle({
 | |
|     //   x: stage.getWidth() / 2,
 | |
|     //   y: stage.getHeight() / 2,
 | |
|     //   radius: 70,
 | |
|     //   fill: 'red',
 | |
|     //   stroke: 'black',
 | |
|     //   strokeWidth: 4
 | |
|     // });
 | |
|     //
 | |
|     // // add the shape to the layer *将形状添加到图层上
 | |
|     // layer.add(circle);
 | |
| 
 | |
|     // add the layer to the stage *将图层添加到舞台上
 | |
|     stage.add(layer);
 | |
| 
 | |
|     setTimeout(()=>{
 | |
|       // layer.remove()
 | |
|     },2000)
 | |
| 
 | |
|   }
 | |
| </script>
 | |
| </body>
 | |
| </html>
 |