|
|
|
<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>
|