美文网首页
11 - 画布滚动,滚轮缩放,小地图

11 - 画布滚动,滚轮缩放,小地图

作者: skoll | 来源:发表于2022-06-01 10:51 被阅读0次

    简介

    1 .使画面具备滚动,平移,居中,缩放等能力,这些都必须是scroller之后才会有的效果

    scroller:{
                      enabled:true,
                      pannable:{
                          enabled:true,
                          eventTypes:['rightMouseDown','leftMouseDown'],
                          //决定了左键和右键都可以拖
                      },
                      modifiers:['alt'],
                      //在之前的基础上,必须有alt才能拖动
    autoResize:true,
    //是否自动缩放
                  }
    

    2 .

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src="https://unpkg.com/@antv/x6/dist/x6.js"></script>
        <style>
            .snapline-prefix-cls {
                position: absolute;
                top: 0;
                right: 0;
                bottom: 0;
                left: 0;
                pointer-events: none;
            }
        </style>
    </head>
    <body>
        <div id="container">
    
        </div>
        <button id="copy">复制</button>   
        <button id="paste">粘贴</button>
        <button id="cut">剪切</button> 
        <button id="undo">回退</button>  
        <button id="redo">前进</button>
        <script>
            const copy=document.querySelector('#copy')
            const paste=document.querySelector('#paste')
            const cut=document.querySelector('#cut')
            const undo=document.querySelector('#undo')
            const redo=document.querySelector('#redo')
    
            const graph=new X6.Graph({
                container:document.getElementById('container'),
                width:800,
                height:600,
                background:{
                    color:'#fffbe6',
                },
                scroller:{
                    enabled:true,
                    className:'my-csroller',
                    //附加样式名,用于定义样式,默认为undefined
                    width:500,
                    height:300,
                    //画布的宽度和高度,这里是除了上面的,自己这边还能加
                    pannable:{
                        enabled:true,
                        eventTypes:['leftMouseDown','rightMouseDown']
                        //支持左键和右键平移
                    },
                    //空白地方启用画布平移能力
                    modifiers:'ctrl',
                    //修饰键,现在必须ctrl+左键才会
                    cursor:"grab",
                    //鼠标样式
                    padding:20,
                    //画布四周的padding边距.保证画布在滚动时,在宽度和高度方向至少有minVisibleWidth和minVisibleHeight大小的画布可见
                    pageVisible:true,
                    //是否分页
                    pageBreak:true,
                    pageHeight:150,
                }
                
                
            })
            const rectA=graph.addNode({
                x:60,
                y:50,
                width:180,
                height:100,
                label:"default",
            })
    
    
           const rectB= graph.addNode({
                x:160,
                y:200,
                width:100,
                height:50,
                label:"Rect with Ports",  
            })
    
            
        </script>
    </body>
    </html>
    

    2 .然后就是一堆移动视图的方法,把某个点,某个矩形移动到

    1 .之前用scrollBetter,仅仅有一个移动到某个位置scrollTo()这种的
    2 .https://x6.antv.vision/zh/docs/tutorial/basic/scroller#cursor
    3 .目前用过的只有画布到中间,某个节点到中间.用于在动画的时候聚焦节点
    4 .graph.scrollToPoint(x?: number, y?: number, options?: ScrollOptions) 将某个点滚动到视野中间
    5 .graph.scrollToContent(options?: ScrollOptions) 使画布的内容中心滚动到视口中间
    6 .graph.scrollToCell(cell: Cell, options?: ScrollOptions) 滚动画布,使节点/边的中心位于画布的视口中心。
    7 .centerCell(options?: CenterOptions) 将节点/边的中心与视口中心对齐。如果不能通过滚动来对齐,则自动为 Scroller 的容器增加一定的 padding 边距来强制对齐 
    8 .老实说.这么多看着差不多的,有点不知道区别是什么..
    

    滚轮缩放

    1 .鼠标滚轮的默认行为是滚动页面,启用Scroller后用域滚动画布 ,某些情况下我们需要用滚轮来缩放画布,为了避免交互冲突,通常配合修饰符来实现滚轮缩放画布
    2 .滚轮主要是用来缩放操作

    mousewheel:{
      enabled:true,
      modifiers:['ctrl','meta'],
      global:true,
    //是否是全局事件
    factor:1.1,
    
    }
    

    小地图

    1 .小地图是完整画布的预览,支持通过平移缩放小地图的视口来平移缩放画布,需要搭配scroller使用
    2 .

    全部代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src="https://unpkg.com/@antv/x6/dist/x6.js"></script>
        <style>
            .snapline-prefix-cls {
                position: absolute;
                top: 0;
                right: 0;
                bottom: 0;
                left: 0;
                pointer-events: none;
            }
        </style>
    </head>
    <body>
        <div id="container">
    
        </div>
        <div id="mini-container">
    
        </div>
        <button id="copy">复制</button>   
        <button id="paste">粘贴</button>
        <button id="cut">剪切</button> 
        <button id="undo">回退</button>  
        <button id="redo">前进</button>
        <script>
            const copy=document.querySelector('#copy')
            const paste=document.querySelector('#paste')
            const cut=document.querySelector('#cut')
            const undo=document.querySelector('#undo')
            const redo=document.querySelector('#redo')
    
            const graph=new X6.Graph({
                container:document.getElementById('container'),
                width:800,
                height:600,
                background:{
                    color:'#fffbe6',
                },
                scroller:{
                    enabled:true,
                    className:'my-csroller',
                    //附加样式名,用于定义样式,默认为undefined
                    width:500,
                    height:300,
                    //画布的宽度和高度,这里是除了上面的,自己这边还能加
                    pannable:{
                        enabled:true,
                        eventTypes:['leftMouseDown','rightMouseDown']
                        //支持左键和右键平移
                    },
                    //空白地方启用画布平移能力
                    modifiers:'alt',
                    //修饰键,现在必须ctrl+左键才会
                    cursor:"grab",
                    //鼠标样式
                    padding:20,
                    //画布四周的padding边距.保证画布在滚动时,在宽度和高度方向至少有minVisibleWidth和minVisibleHeight大小的画布可见
                    pageVisible:true,
                    //是否分页
                    pageBreak:true,
                    pageHeight:150,
                },
                mousewheel:{
                    enabled:true,
                    modifiers:['alt'],
                    global:true,
                    //是否为全局事件:如果是全局事件,就绑定在document上面,否则绑定在画布容器上
                    factor:1,
                    //缩放比例
                    minScale:0.5,
                    //最小缩放比
                    maxScale:2,
                    zoomAtMousePosition:true,
                    //是否见鼠标作为位置中心进行缩放
                  modifiers:'alt|ctrl&shift'
    //同时按下alt+shift,或者ctrl+shift
                },
                minimap:{
                    enabled:true,
                    container:document.getElementById('mini-container'),
                    width:100,
                    height:100,
                    scalable:false,
                    //小地图是否可以缩放
                    minScale:0.1,
                    //最小缩放比
                    maxScale:2,
                    //最大缩放比
                    graphOptions:{
                        //自定义小地图的Graph的选项
                        async:true,
                        getCellView(cell){
                            if(cell.isNode){
                                return SimpleNodeView
                            }
                        },
                        createCellView(cell){
                            if(cell.isEdge){
                                return cell
                            }
                        }
                    }
                }
                
                
            })
            const rectA=graph.addNode({
                x:60,
                y:50,
                width:180,
                height:100,
                label:"default",
            })
    
    
           const rectB= graph.addNode({
                x:160,
                y:200,
                width:100,
                height:50,
                label:"Rect with Ports",  
            })
    
            
        </script>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:11 - 画布滚动,滚轮缩放,小地图

          本文链接:https://www.haomeiwen.com/subject/qcbnzltx.html