web实现html页面思维导图效果

258 篇文章 12 订阅
订阅专栏

index.html内容:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Web思维导图</title>
    <link rel="stylesheet" href="css/prism.css">
    <link rel="stylesheet" href="css/common.css">
</head>
<body>
<h3>
    Web思维导图,梳理Hacker知识点为例:
</h3>
<div id="drawing" class="drawing">

</div>
<div class="modal" id="modal">
    <div class="modal-bg">
        <div class="modal-content">
            <div class="modal-cell">
                <pre class="modal-code">
                    <code class="language-html"></code>
                </pre>
            </div>
        </div>
        <div class="modal-close">

        </div>
    </div>
    <div class="modal-mask"></div>
</div>
<iframe class="code_iframe" id="html_code" src="bs_introduction/code_container.html"></iframe>
<script src="js/d3_flex_tree.js"></script>
<script src="js/mind_mapping.js"></script>
<script src="js/prism.js"></script>
</body>
</html>

CSS文件夹

common.css:

body{
    height: 100%;
    margin: 0;
    overflow: hidden;
}

.clear-fix:before,.clear-fix:after{
    display: table;
    content: '';
    clear: both;
}

.code_iframe{
    display: none;
}

.drawing{
    visibility: hidden;
    font-weight: bold;
    border: 1px solid #ccc;
    animation: drawingframe;
    animation-duration: 1s;
    animation-timing-function: linear;
    animation-delay: 1s;
    -webkit-animation: drawingframe 1s linear 1s;
}
@keyframes drawingframe
{
    from {opacity: 0;}
    to {opacity: 1;}
}
@-webkit-keyframes drawingframe
{
    from {opacity: 0;}
    to {opacity: 1;}
}

.node g{
    cursor: pointer;
}

.node circle {
    fill: #fff;
    stroke: steelblue;
    stroke-width: 1.5px;
}

.node line{
    fill: #fff;
    stroke: steelblue;
    stroke-width: 1.5px;
}

.link {
    fill: none;
    stroke: #ccc;
    stroke-width: 1.5px;
}

.modal{
    display: none;
    position: fixed;
    z-index: 9999;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    text-align: left;
}
.modal-mask{
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    background-color: black;
    opacity: 0.5;
}
.modal-bg{
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 9999;
}
.modal-content{
    display: table;
    position: relative;
    height: 100%;
    width: 100%;
}
.modal-cell{
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}
.modal-cell img{
    max-height: 95%;
}
.modal-code{
    display: none;
    margin: 0 auto !important;
}
.modal-close{
    display: inline-block;
    position: absolute;
    top: 20px;
    right: 20px;
    width: 48px;
    height: 48px;
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABYlBMVEUAAABUbnpUbnpUbnpUbnpUbnpMZG9MZG9MZG9MZG9MZG9UbnpUbnpUbnpUbnpUbnpUbnpUbnpMZG9MZG9MZG9MZG9MZG9MZG9MZG9UbnpUbnpUbnpUbnpUbnpUbnpUbnpUbnpMZG9MZG9MZG9MZG9MZG9MZG9MZG9MZG9UbnpUbnpUbnpUbnpUbnpUbnpMZG9MZG9MZG9MZG9MZG9MZG9UbnpUbnpUbnpUbnpUbnpUbnpUbnpMZG9MZG9MZG9MZG9MZG9MZG9MZG9UbnpUbnpUbnpUbnpMZG9MZG9MZG9MZG9UbnpUbnpUbnpMZG9MZG9MZG9UbnpMZG9UbnpWcHxKYm1MZG9UbnpUbnlMZG9MZG9UbnpTbHhNZXBMZG9UbnpUbnpUbnpUbnpTbHhNZXBMZG9MZG9MZG9MZG9UbnpUbnpUbnpUbnpUbnpMZG9MZG9MZG9MZG9MZG9TbHhNZXD///9kx6K7AAAAc3RSTlMAAAAAAAAAAAAAAAAAAAsGAAAAAAYLAAAAAAAao3gGAAAAAAZ4oxoAAACr//Z3BQV39v+rAAD///V3BQAABXf1//8A///1d3f1//8A/wAAAHcFBXf1e3v1//r6/3f19XcABXv6///6ewUAJoszcwAAAAFiS0dEdahqmPsAAAAHdElNRQfeDAoPOSkJx4hxAAABVUlEQVRIx2NgGAWDDDAyMbOwYgqzsXNwcmFTz83Dy8cvIIguLCQsIiomLoGpXpJHSlpGVk5eAVVYUUlZRVVNXVwDQ4Mmr7SWto6unjyKHUJK+gaGRsZqYiYYGkz5ZLTNzC0srayRdAjZ2NrZOzgaqYo6YWhg4ZfVMXd2cXWzQrhKUcnW3cPTy8FQRYQdQwOrt5yuhYuPr6sl3FVA99h5+Pl72hsoB7Bh+lpQXs/S1dfHBe4qsHs8/f087PSVhLCFq4K8lZurC9xVUPd4erjbKilijzlBaytLuKvg7rGztRFiwAGQXBUYRMA9aK4KDgkNI+AeVFeFR0RGEXIPiquiY2LjCLoH7qr4hMSk5JTUtPQMAu6B2pGZlZ2TW1ySl19QWETQfDI0kOokUj1NarCSGnGkJg1SEx+pyZvUDERyFiW5ECC5mCG5ICO5qCS5MCa9uB8FAwkA1tqHz8dmcxMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDktMTdUMTU6MjE6MjUrMDg6MDBOsysLAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTEyLTEwVDE1OjU3OjQxKzA4OjAwNdJKeAAAAE10RVh0c29mdHdhcmUASW1hZ2VNYWdpY2sgNy4wLjEtNiBRMTYgeDg2XzY0IDIwMTYtMDktMTcgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmfd2aVOAAAAGHRFWHRUaHVtYjo6RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAGHRFWHRUaHVtYjo6SW1hZ2U6OkhlaWdodAAxMjhDfEGAAAAAF3RFWHRUaHVtYjo6SW1hZ2U6OldpZHRoADEyONCNEd0AAAAZdEVYdFRodW1iOjpNaW1ldHlwZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6TVRpbWUAMTQxODE5ODI2MfKdw1kAAAAQdEVYdFRodW1iOjpTaXplADk0NEK36UZEAAAAX3RFWHRUaHVtYjo6VVJJAGZpbGU6Ly8vaG9tZS93d3dyb290L3NpdGUvd3d3LmVhc3lpY29uLm5ldC9jZG4taW1nLmVhc3lpY29uLmNuL3NyYy8xMTgxNy8xMTgxNzU3LnBuZ7UlySMAAAAASUVORK5CYII=");
}

tspan{
    font-size: 14px;
}
text{
    dominant-baseline: middle;
}

prism.css:

code[class*="language-"],
pre[class*="language-"] {
	color: black;
	background: none;
	text-shadow: 0 1px white;
	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
	text-align: left;
	white-space: pre;
	word-spacing: normal;
	word-break: normal;
	word-wrap: normal;
	line-height: 1.5;

	-moz-tab-size: 4;
	-o-tab-size: 4;
	tab-size: 4;

	-webkit-hyphens: none;
	-moz-hyphens: none;
	-ms-hyphens: none;
	hyphens: none;
}

pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
	text-shadow: none;
	background: #b3d4fc;
}

pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
code[class*="language-"]::selection, code[class*="language-"] ::selection {
	text-shadow: none;
	background: #b3d4fc;
}

@media print {
	code[class*="language-"],
	pre[class*="language-"] {
		text-shadow: none;
	}
}

/* Code blocks */
pre[class*="language-"] {
	padding: 1em;
	margin: .5em 0;
	overflow: auto;
}

:not(pre) > code[class*="language-"],
pre[class*="language-"] {
	background: #f5f2f0;
}

/* Inline code */
:not(pre) > code[class*="language-"] {
	padding: .1em;
	border-radius: .3em;
	white-space: normal;
}

.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
	color: slategray;
}

.token.punctuation {
	color: #999;
}

.namespace {
	opacity: .7;
}

.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
	color: #905;
}

.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
	color: #690;
}

.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
	color: #a67f59;
	background: hsla(0, 0%, 100%, .5);
}

.token.atrule,
.token.attr-value,
.token.keyword {
	color: #07a;
}

.token.function {
	color: #DD4A68;
}

.token.regex,
.token.important,
.token.variable {
	color: #e90;
}

.token.important,
.token.bold {
	font-weight: bold;
}
.token.italic {
	font-style: italic;
}

.token.entity {
	cursor: help;
}

mind_mapping.js代码:

var engine,
    duration = 750;
var margin = {
        top: 20,
        right: 120,
        bottom: 20,
        left: 120
    },
    width = 960 - margin.right - margin.left,
    height = 800 - margin.top - margin.bottom;
d3.json('bs_introduction/bs_introduction.json', function (err, tree) {

    engine = d3.layout.tree().setNodeSizes(true);

    // sizing
    engine.nodeSize(function (t) {
        return [t.x_size, t.y_size];
    });
    // gap
    engine.spacing(function (a, b) {
        return a.parent == b.parent ?
            5 : engine.rootXSize();
    });
     
    tree.x0 = height / 2;
    tree.y0 = 0; 
    function collapse(d) {
        if (d.children) {
            d._children = d.children;
            d._children.forEach(collapse);
            d.children = null;
        }
    }

    var $iframe_doc = document.getElementById('html_code').contentWindow.document;
    
    var $modal = d3.select('#modal'),
        $modal_cell = $modal.select('.modal-cell'),
        $modal_pre = $modal.select('.modal-code'),
        $modal_code = $modal_pre.select('code');
    $modal.on("click.mask", function(){
        if(d3.event.target.className !== 'modal-cell'){
            return false;
        }
        $modal.style('display', 'none');
        $modal.selectAll('img').style('display', 'none');
        $modal_pre.style('display', 'none')
    });

    var client_width = document.documentElement.clientWidth,
        client_height = document.documentElement.clientHeight;
    var svg = d3.select("#drawing").append('svg').attr("width", client_width).attr("height", client_height);
    var svg_g = svg.append("g");
     
    svg.call(d3.behavior.zoom().scaleExtent([0.5,3]).on("zoom", redraw));

    update(tree);
    tree.children.forEach(collapse);
    update(tree, function(){
        setTimeout(function(){
            d3.select("#drawing").style({'visibility': "visible"});
            d3.selectAll(".node").each(function(d, i){
                i > 0 && (d3.select(this).select(".vertical-line").style('display', 'block'));
            });
        },1000);
    });

    function update(source, callback){
        
        var nodes = d3.layout.hierarchy()(tree);
        var last_id = 0;
         
        var node = svg_g.selectAll(".node")
            .data(nodes, function (d) {
                return d.id || (d.id = ++last_id);
            });
         
        var nodeEnter = node.enter().append("g")
            .attr("class", "node")
            .attr("transform", function (d) {
                var x_size = source.x_size ? source.x_size : 0;
                return "translate(" + source.y0 + "," + (source.x0 - x_size / 2) + ")";
            });
            //.on("click", click);
         
        var text_elements = nodeEnter.append("text")
            .attr({
                id: function (d) {
                    return d.id;
                },
                fill: 'black',
                dy: "0.35em"
            }).each(function(d){
                parseText(this, d);
            });
        
        engine.nodeSize(function (d) {
            var ele = document.getElementById(d.id),
                ele_size = ele.getBBox();
            return [ele_size["height"] + 30, ele_size["width"] + 14];
        });

        
        nodes = engine.nodes(tree);

        
        function node_extents(n) {
            return [n.x - n.x_size / 2, n.y,
                n.x + n.x_size / 2, n.y + n.y_size];
        }

        var root_extents = node_extents(nodes[0]);
        var xmin = root_extents[0],
            ymin = root_extents[1],
            xmax = root_extents[2],
            ymax = root_extents[3],
            area_sum = (xmax - xmin) * (ymax - ymin),
            x_size_min = nodes[0].x_size,
            y_size_min = nodes[0].y_size;

        nodes.slice(1).forEach(function (n) {
            var ne = node_extents(n);
            xmin = Math.min(xmin, ne[0]);
            ymin = Math.min(ymin, ne[1]);
            xmax = Math.max(xmax, ne[2]);
            ymax = Math.max(ymax, ne[3]);
            area_sum += (ne[2] - ne[0]) * (ne[3] - ne[1]);
            x_size_min = Math.min(x_size_min, n.x_size);
            y_size_min = Math.min(y_size_min, n.y_size);
        });
        var scale = 1;
 
        function svg_x(node_y) {
            return (node_y - ymin) * scale;
        }
        function svg_y(node_x) {
            return (node_x - xmin) * scale;
        }
        
        var nodebox_right_margin = Math.min(x_size_min * scale, 10),
            nodebox_vertical_margin = Math.min(y_size_min * scale, 3);

        
        function rand() {
            return 80 + Math.floor(Math.random() * 100);
        }
        var filler = function () {
            return "fill-opacity: 0; stroke:rgb(" + rand() + "," + rand() + "," + rand() + ")"
        };
         
        node.transition()
            .duration(duration)
            .attr("transform", function (d) {
                if(d.parent && d.parent.y0 && d.parent.y_size){
                    d.y = d.parent.y0 + d.parent.y_size + 100;
                } else {
                    d.y = d.depth * 180;
                }
                return "translate(" + svg_x(d.y) + "," + (svg_y(d.x)-(d.x_size * scale - nodebox_vertical_margin) / 2) + ")";
            });
        nodeEnter.append("rect")
            .attr({
                x: 0,
                rx: 6,
                ry: 6,
                width: function (d) {
                    return d.y_size * scale - nodebox_right_margin;
                },
                height: function (d) {
                    return d.x_size * scale - nodebox_vertical_margin;
                },
                style: function(d){
                    return d.filler = filler();
                }
            })
            .attr('next', function(d){
                if(d.children || d._children){
                    var $g = d3.select(this.parentNode).append('g').attr({
                        transform: 'translate(' + (d.y_size - 6) +  ',' + (d.x_size/2 - 5) + ')'
                    }).on("click", click);
                    $g.append('circle').attr({
                        r: '7',
                        cx: 3.5,
                        cy: 3.5,
                        style: 'stroke:' + d.filler
                    });
                    $g.append('line').attr({
                        x1: 0,
                        y1: 3.5,
                        x2: 7,
                        y2: 3.5,
                        style: 'stroke:' + d.filler
                    });
                    var $vertical_line =  $g.append('line').attr({
                        x1: 3.5,
                        y1: 0,
                        x2: 3.5,
                        y2: 7,
                        style: 'stroke:' + d.filler
                    }).classed('vertical-line', true);
                    if(d._children){
                        $vertical_line.style('display', 'block');
                    } else {
                        $vertical_line.style('display', 'none');
                    }
                    return true
                }
                return false
        });
        node.exit().transition()
            .duration(duration)
            .attr("transform", function (d) {
                return "translate(" + (source.y) + "," + (svg_y(source.x)-(source.x_size * scale - nodebox_vertical_margin)/2) + ")";
            })
            .remove();

       
        var diagonal = d3.svg.diagonal()
            .source(function (d, i) {
                var s = d.source;
                return {
                    x: s.x,
                    y: s.y + s.y_size - nodebox_right_margin / scale
                };
            })
            .projection(function (d) {
                return [svg_x(d.y), svg_y(d.x)];
            })
            ;
        var enter_diagonal = d3.svg.diagonal()
            .source(function (d, i) {
                var s = d.source;
                return {
                    x: s.x,
                    y: s.y + s.y_size - nodebox_right_margin / scale
                };
            })
            .projection(function (d) {
                return [d.y, d.x];
            });
        var links = engine.links(nodes);
        var link = svg_g.selectAll("path.link")
            .data(links, function (d) {
                return d.target.id;
            });

        link.enter().insert("path", "g")
            .attr("class", "link")
            .attr("d", function (d) {
                var o = {
                    x: source.x0,
                    y: source.y0,
                    y_size: source.y_size
                };
                return enter_diagonal({
                    source: o,
                    target: o
                });
            });
        
        link.transition()
            .duration(duration)
            .attr("d", diagonal);
         
        link.exit().transition()
            .duration(duration)
            .attr("d", function (d) {
                var o = {
                    x: source.x,
                    y: source.y,
                    y_size: source.y_size
                };
                return diagonal({
                    source: o,
                    target: o
                });
            })
            .remove();
        
        nodes.forEach(function (d) {
            d.x0 = svg_y(d.x);
            d.y0 = svg_x(d.y);
        });
        callback && callback();
    }

   
    function redraw() {
        svg_g.attr("transform",
            "translate(" + d3.event.translate + ")"
            + " scale(" + d3.event.scale + ")");
    }
    
    function click(d) {
        if (d.children) {
            d3.select(this).select('.vertical-line').style('display', 'block');
            d._children = d.children;
            d.children = null;
        } else {
            d3.select(this).select('.vertical-line').style('display', 'none');
            d.children = d._children;
            d._children = null;
        }
        update(d);
    }
    
    function parseText(text_tag, d){
        var $text = d3.select(text_tag),
            content = d.content;
        if(typeof content === 'string'){
            if(/^(\.\/)?img\//.test(content)){
                var img_id = content.replace(/[\/\.]/g, '');
                if($modal_cell.select('#' + img_id)[0][0] === null){
                    $modal_cell.append('img').attr('id', img_id).attr('src', content).attr('style', 'display:none');
                }
                $text.append('tspan').attr({x: '2', dy: '1.5em', path: content}).text('点击查看图片');
                d3.select(text_tag.parentNode).attr('img_id', img_id).on("click.show", function(){
                    $modal.select('#' + d3.select(this).attr('img_id')).attr("style", "display:inline-block");
                    $modal.attr("style", "display: block");
                });
            } else {
                var len = 0, split_str = '', reg = /[^\x00-\xff]/;
                var split_arr = content.split(''),
                    split_arr_len = split_arr.length - 1;
                split_arr.forEach(function(val, i){
                    if(reg.test(val)){
                        len += 2;
                    } else {
                        len += 1;
                    }
                    split_str += val;
                    if(len >= 30 || i >= split_arr_len){
                        $text.append('tspan').attr({x: '2', dy: '1.5em'}).text(split_str);
                        len = 0;
                        split_str = '';
                    }
                });
            }
        } else {
            if(content.type === 'html_code'){
                $modal_code.attr('class', 'language-html');
            } else if(content.type === 'js_code'){
                $modal_code.attr('class', 'language-javascript');
            }
            $text.append('tspan').attr({x: '2', dy: '1.5em'}).text('点击查看代码');
            d3.select(text_tag.parentNode).attr('code_id', content.id).on("click.show", function(){
                var code = $iframe_doc.getElementById(d3.select(this).attr('code_id')).innerHTML;
                $modal_code.text(code);
                $modal_pre.style('display', 'inline-block');
                Prism.highlightAll();
                $modal.style('display', 'block');
            });
        }
    }
});

bs_introduction.json

{
"content":"如何学习黑客",
"children":
[
    { 
      "content":"预备知识" , 
        "children":
        [
                {"content":"HTML & CSS" },
                {"content":"JavaScript" },
                {"content":"Linux" },
                {"content":"SQL" }
        ] 
      },
      
    { 
        "content":"安装" , 
        "children":
        [
            {
                "content":"记事本软件",
                "children":
                [
                    {"content":"VIM"},
                    {"content":"EditPlus"},
                    {"content":"Sublime Text"}
                ]
            },
            {
                "content":"服务器软件",
                "children":
                [
                    {"content":"Apache Http Server"},
                    {"content":"Tomcat"},
					{"content":"IIS"}
                ]
            },
            {"content":"下载NMAP"},
			{"content":"下载WIRESHARK"}
        ] 
    },
    
    { 
        "content":"入门",
        "children":
        [
            {
                "content":"入侵",
                "children":
                [
                    {"content":"select"},
                    {"content":"selectAll"}
                ]
            },
            {
                "content":"sql注入",
                "children":
                [
                    {"content":"shell"},
                    {"content":"data"}
                ]
            },
            {"content":"跨站脚本"},
            {
                "content":"简单图形",
                "children":
                [
                    {"content":"柱形图"},
                    {"content":"折线图"},
                    {"content":"散点图"}
                ]
            },
            {"content":"比例尺"},
            {"content":"生成器"},
            {"content":"过渡"}
        ] 
    },
    
    { 
        "content":"进阶" , 
        "children":
        [
            {
                "content":"社会工程学的应用",
                "children":
                [
                    {"content":"饼状图"},
                    {"content":"树状图"},
                    {"content":"矩阵树图"}
                ]
            },
            {"content":"缓冲区溢出攻击"}
        ]
    }
]
}

运行结果如图:

在这里插入图片描述


这里写图片描述
代码下载链接

html5脑图_HTML5制作思维导图
weixin_39864682的博客
12-22 770
客户常常提到思维导图,喜欢它的结构展示方式,和交互的友好,从图论的角度看,思维导图本质上是一种树,有一个根节点(主题)出发,联想到其他话题,于是分支开花,再分支,有时候也会构成网络结构,由子分支联想到另一个已有分支,但通常不破坏原有结构,常见的思维导图如下XMind制作的思维导图制作思维导图应用Qunee组件本身支持树形布局,所以对于思维导图的大体结构是可以呈现的,到细节的地方就比较多了,包括线条...
web前端教程3之HTML标签思维导图
02-15
本资源特别适合初学者用于复习和整理资料,是一个系列的web前段开发学习的思维导图,内容包含HTML、CSS以及CSS3、JavaScript等。
我开源了一个思维导图
sinat_33488770的博客
07-22 346
在线地址:https://wanglin2.github.io/mind-map/#/index仓库地址:https://github.com/wanglin2/mind-map。
web----思维导图
weixin_57097732的博客
07-20 698
前端系列】20种 Button 样式
爱生活爱学习。
04-30 1100
前端开发中,按钮(Button)是网页交互中常见的元素之一,其样式的设计直接影响着用户体验和界面美观度。本文将介绍20种不同的 Button 样式,旨在帮助前端开发者丰富按钮设计思路,提高用户界面的吸引力和可用性。
Web思维导图实现的技术点分析(附完整源码)
sinat_33488770的博客
08-01 2119
简介 思维导图是一种常见的表达发散性思维的有效工具,市面上有非常多的工具可以用来画思维导图,有免费的也有收费的,此外也有一些可以用来帮助快速实现的JavaScript类库,如:jsMind、KityMinder。 本文会完整的介绍如何从头实现一个简易的思维导图,最终成果预览:https://wanglin2.github.io/mind-map/。 技术选型 这种图形类的绘制一般有两种选择:svg和canvas,因为思维导图主要是节点与线的连接,使用与html比较接近的svg比较容易操作,svg的类库在试用
网页设计语言html思维导图,web网页实现思维导图展示
weixin_39586915的博客
05-30 1293
【实例简介】【实例截图】【核心代码】jsmind├── LICENSE├── README.md├── docs│ ├── en│ │ ├── 1.usage.md│ │ ├── 2.options.md│ │ ├── 3.operation.md│ │ └── index.md│ └── zh│ ├── 1.usage.md│ ├─...
网页设计语言html思维导图,纯css3实现思维导图样式示例
weixin_31444279的博客
05-30 1660
思维导图又称之为脑图他大概是这个样子滴:网上大部分实现有用d3.js实现,有手动用svg实现,最近工作需要,本人很懒,在琢磨看看用css3能不能实现呢?答案是肯定的 下面上代码html代码node1node2node3node4node4node4node3node3node2node2css3代码.mainBody{display: -webkit-flex; /* Safari */displ...
WEB前端html标记语言思维导图(Xmind)
06-23
本人网页制作课程所用的思维导图,包含了所有web前端技术的概念和知识点,比较适合学生、初学者建立一个初步的思维模型,另外本人还有CSS样式表的思维导图,欢迎大家下载查看。
Web Scraper爬虫学习笔记&思维导图.html
05-15
Web Scraper是一款简单好用的谷歌插件,用于爬取网页数据。思维导图涵盖了爬取二级页面,表格,文本,翻页等基本爬虫的操作过程,适合入门学习。
Python-XPath+requests-html(思维导图
最新发布
05-27
requests_html`是一个Python库,用于从Web页面中提取数据。它提供了对HTML内容的解析和处理功能,使您可以轻松地从网页中提取文本、链接、图像和其他元素。 `requests_html`库建立在另一个流行的Python库`requests`...
HTML5知识点思维导图(手工整理)
10-16
HTML5学习思维导图,可以用来梳理学习的思维体系,使自己对HTML5知识体系产生更清晰的认知
HTML+CSS(思维导图emmx+网页版HTML).zip
07-23
本资源为个人学习网页开发中初识HTML和CSS的过程所写,思维导图记录非常整洁详细,且有思维导图emmx版本及其导出的HTML版本,非常轻便携带,没有适配的思维导图软件也不需要下载思维导图软件即可观看。
2023 年网络安全思维导图
01-25
这些内容是构建WEB页面的基础,也是实现网络信息发布和共享的关键。 然而,网络技术和WEB技术的发展,也带来了安全问题。网络安全问题主要涉及到网络攻击、网络病毒、网络钓鱼等内容。网络攻击主要是通过技术手段,...
8小时学会HTML网页开发
03-18
一说学网页,学编程,大家都下意识觉得要吃苦,熬夜,哪有那么复杂,一定是你看错了教程. 挑一个阳光的午后,关掉手机,用6个小时,看看十八哥如何把一个公司的保安教会HTML,Div,CSS的.课程共8小时,57小集,轻松一点,你将马上学会.
适合小白的HTML思维导图
m0_61307468的博客
02-10 1437
然后学习编程,有良好的逻辑架构非常的重要,下面分享一下我自己做的思维导图HTML作为前端的入门第一课,是很多小白接触前端的第一课。
HTML思维导图—表
周百万的博客
01-11 492
表 表格 作用 展示、存储数据 组成 <table> <tr> <td> 表格属性 border: 边框 cellspacing: 单元格与单元格边框的间距 cellpadding: 单元格内容与单元格边框的间距 width: 宽度 height...
前端HTML思维导图
GJW966288的博客
11-01 156
前端HTML思维导图
html网页设计课程的思维导图,html思维导图
weixin_31124869的博客
06-08 2041
主要由html结构、div布局、css样式、html标签,这四大模块构成。一.html结构HTML网页基础结构一般由:头部和主体构成,即head和body;还有doctype:strict、transtional、framset;head:title、metacharset;body:各种div及css样式,和js。二.div布局布局原则:上到下,左到右,大到小。盒模型:宽高(width和heig...
前端实现思维导图效果的拖拽逐渐
07-13
您好!要实现思维导图效果的拖拽功能,可以按照以下步骤进行操作: 1. 创建思维导图节点:首先,您需要创建思维导图的节点元素。可以使用HTML和CSS来定义节点的外观和样式。 2. 添加拖拽功能:通过JavaScript,您可以为每个节点元素添加拖拽功能。可以使用HTML5的拖放API来实现。在节点元素上添加拖动事件监听器,以便跟踪鼠标的位置变化。 3. 实现拖拽效果:在拖动事件的处理函数中,您可以更新节点元素的位置,以实现拖拽效果。通过更新节点元素的CSS属性,例如top和left,可以改变节点元素的位置。 4. 处理节点的连接关系:思维导图中的节点通常会有连接关系,您可能需要处理节点之间的连线。可以使用SVG或者Canvas来绘制连线,并通过JavaScript来处理连线的位置和样式。 5. 更新节点位置:当用户拖动节点时,您需要更新节点的位置信息。可以将节点的位置信息保存在数据结构中,例如数组或者对象中。 6. 保存和加载数据:为了能够保存和加载思维导图,您可以将节点的位置信息和其他相关数据保存在数据库或者本地存储中。当页面重新加载时,可以从存储中读取数据,并将节点重新定位到正确的位置。 通过以上步骤,您可以实现前端思维导图效果,并使节点能够拖拽逐渐。希望对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Android Studio 出现“Cannot resolve symbol” 解决办法 105360
  • GBK 编码 62047
  • SQLServer创建索引的5种方法 58727
  • 正则表达式(匹配第一个花括号) 52012
  • input[type=file] 获取上传文件的内容 50833

分类专栏

  • ASP.NET Core Web API 59篇
  • ASP.NET Core MVC | Blazor 228篇
  • .net平台下分布式开发技术 47篇
  • ASP.NET MVC4|MVC5 122篇
  • ASP.NET Webform 77篇
  • ASP.NET Web API 35篇
  • ADO.NET 和 Entity Framework 48篇
  • EF Core|SqlSugarCore|PetaPoco 23篇
  • NET Core API网关Ocelot 22篇
  • NET Core跨平台+CoreCLR+C# 196篇
  • .NET Framework+CLR+C#知识 213篇
  • LINQ|表达式树 94篇
  • .NET Winform/WPF 27篇
  • .NET WCF 8篇
  • 异步编程 26篇
  • 分布式开发技术 73篇
  • 分布式技术之ZooKeeper 27篇
  • 分布式内存对象缓存(Memcached) 8篇
  • 分布式文件系统(FastDFS|SeaWeedFs) 20篇
  • (Nginx|Haproxy)【IIS】 90篇
  • 消息队列【RocketMQ】
  • 消息队列【ActiveMQ】 4篇
  • 消息队列【kafka】 21篇
  • 消息队列【RabbitMQ】 45篇
  • Html+Javascript 258篇
  • Javascript编程知识 30篇
  • Javascript设计模式 37篇
  • Jquery源码系列 21篇
  • Jquery及其组件 147篇
  • HTML5+CSS|CSS3 153篇
  • SqlServer数据库 179篇
  • MySql数据库 31篇
  • Oracle数据库 162篇
  • Postgresql数据库 24篇
  • Sqlite数据库 6篇
  • 正则表达式 38篇
  • Java虚拟机(JVM) 10篇
  • JAVA技术 53篇
  • JAVA Tomcat服务器|Mycat中间件 15篇
  • Python开发 58篇
  • Python Django 12篇
  • Python Orm 6篇
  • 爬虫 22篇
  • ExtJS框架 7篇
  • 区块链 12篇
  • Andriod安卓技术 70篇
  • Andriod安卓项目 28篇
  • Nodejs+express+ejs 12篇
  • Nosql之Redis数据库 48篇
  • Nosql之Mongodb数据库 25篇
  • 大数据之Spark 11篇
  • 大数据之Hadoop 15篇
  • 大数据+云计算 17篇
  • IIS | Apache 服务器 29篇
  • 互联网 17篇
  • UI框架|WUI|UE|UX|ID|IXD|UID|UED 6篇
  • 算法 21篇
  • 代码优化+服务器优化 6篇
  • Autofac | AspectCore 框架 39篇
  • AutoMapper.NET框架 35篇
  • Aspose.Total框架 16篇
  • Dapper.NET框架 15篇
  • Lucene.NET框架 5篇
  • Log4Net框架 6篇
  • MyBatis.Net | MyBatis框架 24篇
  • Newtonsoft.Json框架 21篇
  • Nhibernate.NET框架 13篇
  • NPOI.NET和EPPlus框架 27篇
  • ODP.NET框架 3篇
  • Quartz.NET框架 16篇
  • StackExchange.Redis组件 14篇
  • ServiceStack.Redis和CSRedisCore 17篇
  • iTextSharp.NET框架 4篇
  • HtmlAgilityPack解析框架 10篇
  • ABP|ABP Vnext 79篇
  • JAVA Struts2框架 14篇
  • JAVA SpringBoot/SpringCloud框架 23篇
  • JAVA SpringMVC框架 23篇
  • JAVA Netty框架 5篇
  • 全文搜索引擎之ElasticSearch和Solr 50篇
  • 全文搜索引擎之Solr 15篇
  • 加密解密 50篇
  • 微信 | QQ 40篇
  • TypeScript 5篇
  • 支付 7篇
  • 生命周期 16篇
  • XML相关 6篇
  • Linux相关 29篇
  • 架构|领域驱动设计 82篇
  • Socket | Websocket | SignalR 12篇
  • 计算机网络 网络安全 8篇
  • LeetCode之算法(C#)| AhoCorasick 14篇
  • LeetCode之数据库(Mysql) 5篇
  • Python Tornado 4篇
  • Python Pandas 19篇
  • 文学+名言警句+其他 60篇
  • 人生 16篇
  • 知乎 29篇
  • 技术图片 9篇
  • 思维 207篇
  • 书籍 9篇
  • Markdown写作与集成 6篇
  • 编程安全|网站安全 6篇
  • 人工智能之深度学习(TensorFlow) 56篇
  • 百度地图 15篇
  • Vue.js(Vue 2/Vue 3) 88篇
  • Angular1.X | Angular4+ 41篇
  • ECharts.js | Highcharts.js 18篇
  • Knockout.js 7篇
  • Video.js 3篇
  • layer.js|sweetAlert2 库 16篇
  • Docker容器技术 73篇
  • HTTP协议 TCP|IP 27篇
  • hive数据仓库工具 12篇
  • 在线工具|软件工具 13篇
  • 搜索引擎 2篇
  • IOC框架之Unity | Castle Windsor 7篇
  • 设计模式 14篇
  • IdentityServer4|OAuth2.0协议 21篇
  • Bootstrap 框架 43篇
  • Wijmo5 Flexgrid 10篇
  • 浏览器 13篇
  • windows操作系统|cmd|批处理bat|dos| 14篇
  • C语言|C++语言 2篇
  • Visual Studio 2019|Resharper 18篇
  • 程序员健康知识 5篇
  • 微服务 93篇
  • Furion框架 1篇
  • AForge | Accord NET框架 4篇
  • MDN前端技术 29篇
  • Stackoverflow整理 7篇
  • FFmpeg视频处理 13篇
  • ImageProcessor.NET框架 1篇
  • Git 2篇
  • Photoshop知识
  • 面试之前端
  • 重构 28篇
  • MSDN官方文档|文章 24篇
  • UEditor.js|Quill.js|Summernote 18篇
  • 投资理财 36篇

最新评论

  • 使用 pdf.js 在网页中加载 pdf 文件

    hembleTu: 今天下载的现在都是mjs了会有影响吗

  • kubectl命令大全

    遨游在知识的海洋里无法自拔: 现在有方向了吗

  • PostgreSQL复杂嵌套查询SQL示例

    狂野鸭子: 楼主,user_posts 表的哪里

  • .NET Core的HttpClient连接池管理

    bicijinlian: 使用 百度 hao123之类的不行,自己搭建的可以。可能是那些网络进行了设置了吧。

  • .NET Core的HttpClient连接池管理

    bicijinlian: 测试连接寿命时,无认怎么设置,网络命令只会出现一条结果,并且网络完成状态。.Net8 VS2022

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • JavaScript中...扩展运算符
  • Ubuntu中安装RabbitMQ
  • SqlServer知识归纳总结
2024
06月 15篇
05月 18篇
04月 6篇
03月 8篇
2023年201篇
2022年539篇
2021年392篇
2020年598篇
2019年894篇
2018年827篇
2017年920篇
2016年267篇
2015年20篇
2014年5篇
2013年2篇

目录

目录

分类专栏

目录

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

哆哆女性网王孟起名男孩飘飘欲仙狼太郎zero动漫网站食品如何起名兵圣女孩起名楠的寓意港式餐厅浙江卫视在线前尘往事无敌姑爷嘿嘿嘿正确姿势焊接钢管壁厚1216xvideos俄罗斯与岳全集属虎的起个啥名字好豌豆荚电脑版下载多多理财建筑劳务公司起什么名字好啊btv北京起名字 男孩太阳的后裔百度云盘柳残阳全集txt下载女孩起名字大全免费2021年阿启起名网保持站立dnf仓库锁解除2007日历跑online私立学校起名字大全集公司免费起名预测淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化