Twaver-HTML5基础学习(28)工具条(添加自定义按钮_自定义事件)

简介: 这篇文章介绍了如何在Twaver-HTML5中创建工具条,添加自定义按钮,并绑定自定义事件,包括放大、缩小、占满屏幕和重置画布大小的功能。

工具条(添加自定义按钮_自定义事件)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

react代码

/*
 * @Descripttion: 
 * @version: 
 * @Author: ZhangJunQing
 * @Date: 2022-04-18 14:44:05
 * @LastEditors: ZhangJunQing
 * @LastEditTime: 2022-04-29 15:27:48
 */
import React, {
    useEffect, useState } from 'react'
import {
   
    returnElementBoxAndNetworkFun,
    returnNodeFun,
    returnLineFun,
    returnRegisterImage,
    returnGroupFun
} from './utils'
const twaver = require('twaver');
// const demo = require('demo');
const Demo = () => {
   
    const [network, setnetwork] = useState({
   })
    const init = () => {
   
        const [box, network] = returnElementBoxAndNetworkFun()
        setnetwork(_ => network)
        network.invalidateElementUIs();
        document.getElementById("testID").appendChild(network.getView());
        // 设置最初的大小
        network.adjustBounds({
    x: 0, y: 0, width: 800, height: 800 });
        // network.getView().style.backgroundColor = "#fff"
        network.getView().style.border = "2px solid #ccc"
        var toolbar = document.createElement('div');

        const initNetwork=() =>{
   
            var networkPane = new twaver.controls.BorderPane(network, toolbar);
            networkPane.setTopHeight(50);
            var view = networkPane.getView();
            view.style.left = '0px';
            view.style.top = '0px';
            view.style.right = '0px';
            view.style.bottom = '0px';

            document.getElementById("testID").appendChild(view);
            window.onresize = function () {
   
                networkPane.invalidate();
                };
        }

        const   initToolbar=()=> {
   
            //自定义事件
            addButton(toolbar, '自定义事件', function () {
   
                alert('哈哈哈')
            });
                    //zoom in放大 
            addButton(toolbar, '放大', function () {
   
                    network.zoomIn();
            });
            // zoom out缩小
                addButton(toolbar, '缩小',  function () {
   
                    network.zoomOut();
            });
            // 沾满当前视图
                addButton(toolbar, '占满屏幕',  function () {
   
                    network.zoomOverview();
            });
            // 重置到默认大小
                addButton(toolbar, '重置',  function () {
   
                    network.zoomReset();
            });
}

        function addButton(toolbar, label,  handler) {
   
            var button = document.createElement('input');
            button.value = label;
            button.onclick = handler;
            // button.setAttribute('type', src ? 'image' : 'button');
            button.setAttribute('type', 'button');
            button.setAttribute('style', 'padding-left:20px;line-height:50px;cursor:pointer;');
            button.value = label; 
            toolbar.appendChild(button); 
        } 
        function initBox() {
   
            var from = new twaver.Node(); 
            from.setName('From');
            from.setLocation(100, 100); 
            box.add(from); 
            var to = new twaver.Node(); 
            to.setName('To'); 
            to.setLocation(300, 300); 
            box.add(to); 
            var link = new twaver.Link(from, to); 
            link.setName('Link');
            box.add(link);
            }
        init()
                function init() {
   
                initToolbar();
                initNetwork();
                initBox();
        }

    }
    useEffect(init, [])
    return (
        <>
            <p style={
   {
    fontSize: "20px", paddingLeft: "50px", poaddingTop: "50px" }}>tips: </p>
            <ul style={
   {
    fontSize: "20px", paddingLeft: "50px" }}>
                <li>过滤器</li>
            </ul>
            {
   /* 画布元素需要开启定位 不然生成的图元坐标点会偏移 */}
            <div id="testID" style={
   {
    width: "800px", height: "800px", border: "1px solid #ccc", position: "relative", margin: "0 auto" }}></div>
        </>
    )
}
export default Demo

1.创建BorderPane
2.定位
3.var toolbar = document.createElement(‘div’);中添加按钮元素,添加click事件

network.zoomIn();放大
network.zoomOut();缩小
network.zoomOverview();占满屏幕
network.zoomReset();重置画布大小

学习参考:TWaver Documents

目录
相关文章
|
10月前
|
存储 自然语言处理 前端开发
抖音快手小红书虚拟评论截图生成器,模拟对话制作工具,html+js+css
这是一款纯前端实现的多平台虚拟评论生成器,支持抖音、快手、小红书风格,适用于产品演示与UI设计。采用Vanilla JS与Flexbox布局,利用IndexedDB存储数据,CSS Variables切换主题。
|
10月前
|
前端开发 JavaScript
个人征信电子版无痕修改, 个人信用报告pdf修改,js+html+css即可实现【仅供学习用途】
本代码展示了一个信用知识学习系统的前端实现,包含评分计算、因素分析和建议生成功能。所有数据均为模拟生成
|
12月前
精美按钮式广告代码HTML分享
精美按钮式广告代码HTML分享
287 4
在线检测显示屏坏点html工具源码
在线检测显示屏坏点html工具源码
281 20
|
10月前
|
存储 前端开发 安全
病历单生成器在线制作,病历单生成器app,HTML+CSS+JS恶搞工具
本项目为医疗病历模拟生成器,旨在为医学教学和软件开发测试提供数据支持,严格遵守《医疗机构病历管理规定》。
|
10月前
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
10月前
|
前端开发
个人征信PDF无痕修改软件,个人征信模板可编辑,个人征信报告p图神器【js+html+css仅供学习用途】
这是一款信用知识学习系统,旨在帮助用户了解征信基本概念、信用评分计算原理及信用行为影响。系统通过模拟数据生成信用报告,涵盖还款记录
|
数据采集 存储 调度
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
在Python网页抓取领域,BeautifulSoup和Scrapy是两款备受推崇的工具。BeautifulSoup易于上手、灵活性高,适合初学者和简单任务;Scrapy则是一个高效的爬虫框架,内置请求调度、数据存储等功能,适合大规模数据抓取和复杂逻辑处理。两者结合使用可以发挥各自优势,例如用Scrapy进行请求调度,用BeautifulSoup解析HTML。示例代码展示了如何在Scrapy中设置代理IP、User-Agent和Cookies,并使用BeautifulSoup解析响应内容。选择工具应根据项目需求,简单任务选BeautifulSoup,复杂任务选Scrapy。
376 1
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
利用html2canvas插件自定义生成名片信息并保存图片
这是一个利用html2canvas插件自定义生成名片信息并保存图片,自定义上传头像,自定义输入个人信息内容,自定义图片名称,并将生成的图片保存到本地
232 1
利用html2canvas插件自定义生成名片信息并保存图片
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
4228 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具