css 滚动词云

请添加图片描述
css + javascript 实现滚动词云效果

// 163css.js
var radius = 120;
var dtr = Math.PI / 180;
var d = 300;
var mcList = [];
var active = false;
var lasta = 1;
var lastb = 1;
var distr = true;
var tspeed = 10;
var size = 250;
var mouseX = 0;
var mouseY = 0;
var howElliptical = 1;
var aA = null;
var oDiv = null;
window.onload = function() {
    var b = 0;
    var a = null;
    oDiv = document.getElementById("div1");
    aA = oDiv.getElementsByTagName("a");
    for (b = 0; b < aA.length; b++) {
        a = {};
        a.offsetWidth = aA[b].offsetWidth;
        a.offsetHeight = aA[b].offsetHeight;
        mcList.push(a)
    }
    sineCosine(0, 0, 0);
    positionAll();
    oDiv.onmouseover = function() {
        active = true
    }
    ;
    oDiv.onmouseout = function() {
        active = false
    }
    ;
    oDiv.onmousemove = function(e) {
        var c = window.event || e;
        mouseX = c.clientX - (oDiv.offsetLeft + oDiv.offsetWidth / 2);
        mouseY = c.clientY - (oDiv.offsetTop + oDiv.offsetHeight / 2);
        mouseX /= 5;
        mouseY /= 5
    }
    ;
    setInterval(update, 30)
}
;
function update() {
    var o;
    var n;
    if (active) {
        o = (-Math.min(Math.max(-mouseY, -size), size) / radius) * tspeed;
        n = (Math.min(Math.max(-mouseX, -size), size) / radius) * tspeed
    } else {
        o = lasta * 0.98;
        n = lastb * 0.98
    }
    lasta = o;
    lastb = n;
    if (Math.abs(o) <= 0.01 && Math.abs(n) <= 0.01) {
        return
    }
    var m = 0;
    sineCosine(o, n, m);
    for (var h = 0; h < mcList.length; h++) {
        var r = mcList[h].cx;
        var l = mcList[h].cy * ca + mcList[h].cz * (-sa);
        var g = mcList[h].cy * sa + mcList[h].cz * ca;
        var q = r * cb + g * sb;
        var k = l;
        var f = r * (-sb) + g * cb;
        var p = q * cc + k * (-sc);
        var i = q * sc + k * cc;
        var e = f;
        mcList[h].cx = p;
        mcList[h].cy = i;
        mcList[h].cz = e;
        per = d / (d + e);
        mcList[h].x = (howElliptical * p * per) - (howElliptical * 2);
        mcList[h].y = i * per;
        mcList[h].scale = per;
        mcList[h].alpha = per;
        mcList[h].alpha = (mcList[h].alpha - 0.6) * (10 / 6)
    }
    doPosition();
    depthSort()
}
function depthSort() {
    var a = 0;
    var b = [];
    for (a = 0; a < aA.length; a++) {
        b.push(aA[a])
    }
    b.sort(function(e, c) {
        if (e.cz > c.cz) {
            return -1
        } else {
            if (e.cz < c.cz) {
                return 1
            } else {
                return 0
            }
        }
    });
    for (a = 0; a < b.length; a++) {
        b[a].style.zIndex = a
    }
}
function positionAll() {
    var g = 0;
    var e = 0;
    var a = mcList.length;
    var c = 0;
    var f = [];
    var b = document.createDocumentFragment();
    for (c = 0; c < aA.length; c++) {
        f.push(aA[c])
    }
    f.sort(function() {
        return Math.random() < 0.5 ? 1 : -1
    });
    for (c = 0; c < f.length; c++) {
        b.appendChild(f[c])
    }
    oDiv.appendChild(b);
    for (var c = 1; c < a + 1; c++) {
        if (distr) {
            g = Math.acos(-1 + (2 * c - 1) / a);
            e = Math.sqrt(a * Math.PI) * g
        } else {
            g = Math.random() * (Math.PI);
            e = Math.random() * (2 * Math.PI)
        }
        mcList[c - 1].cx = radius * Math.cos(e) * Math.sin(g);
        mcList[c - 1].cy = radius * Math.sin(e) * Math.sin(g);
        mcList[c - 1].cz = radius * Math.cos(g);
        aA[c - 1].style.left = mcList[c - 1].cx + oDiv.offsetWidth / 2 - mcList[c - 1].offsetWidth / 2 + "px";
        aA[c - 1].style.top = mcList[c - 1].cy + oDiv.offsetHeight / 2 - mcList[c - 1].offsetHeight / 2 + "px"
    }
}
function doPosition() {
    var a = oDiv.offsetWidth / 2;
    var c = oDiv.offsetHeight / 2;
    for (var b = 0; b < mcList.length; b++) {
        aA[b].style.left = mcList[b].cx + a - mcList[b].offsetWidth / 2 + "px";
        aA[b].style.top = mcList[b].cy + c - mcList[b].offsetHeight / 2 + "px";
        aA[b].style.fontSize = Math.ceil(12 * mcList[b].scale / 2) + 8 + "px";
        aA[b].style.filter = "alpha(opacity=" + 100 * mcList[b].alpha + ")";
        aA[b].style.opacity = mcList[b].alpha
    }
}
function sineCosine(f, e, g) {
    sa = Math.sin(f * dtr);
    ca = Math.cos(f * dtr);
    sb = Math.sin(e * dtr);
    cb = Math.cos(e * dtr);
    sc = Math.sin(g * dtr);
    cc = Math.cos(g * dtr)
}
;
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- saved from url=(0047)http://bdzh.jg91.com/templets/20130926/163.html -->
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gbk">
        <title></title>
        <style type="text/css">
            body,h1,h2,h3,h4,h5,h6,p,ul,ol,li,form,img,dl,dt,dd,table,th,td,blockquote,fieldset,div,strong,label,em {
                margin: 0;
                padding: 0;
                border: 0;
            }

            ul,ol,li {
                list-style: none;
            }

            #div1 {
                height: 220px;
                margin: 30px 30px 30px 0;
                padding: 0;
                position: relative;
                width: 700px;
            }

            #div1 a {
                background: #e6ae77;
                color: #fff;
                display: block;
                font-weight: bold;
                left: 0;
                padding: 5px;
                position: absolute;
                text-decoration: none;
                top: 0
            }

            #div1 a.aa {
                background: #e6ae77;
                color: #fff
            }

            #div1 a:hover {
                border: 2px solid #FF0000
            }
        </style>
        <script type="text/javascript" src="zywdscripts/163css.js"></script>
        <base target="_blank"/>
    </head>
    <body marginheight="0" marginwidth="0" style="background-color:#fbf3e8;">
        <div id="div1" class="fl">
            <a class="aa" href="/zswd/cs/144913210L624KJ6KAG5F85.html" style="left: 249.401px; top: 154.869px; font-size: 17px; opacity: 1.41512; z-index: 0;">脾的主要功能与运化</a>
            <a href="/zswd/cs/144913619IEAIC54KAIJAB.html" style="left: 161.406px; top: 175.185px; font-size: 17px; opacity: 1.37021; z-index: 1;">怎样理解肺主宣发、肃降,通调水道?</a>
            <a href="/zswd/cs/14491311HLJ6F6GE3FFIB4C.html" style="left: 167.192px; top: 218.945px; font-size: 15px; opacity: 0.743456; z-index: 2;">怎样理解脾统血和肝藏血?</a>
            <a href="/zswd/nj/143301678694IJ72B7H67EA.html" style="left: 261.768px; top: 193.054px; font-size: 14px; opacity: 0.587244; z-index: 3;">阳气在人体中有什么重要作用?</a>
            <a class="aa" href="/zswd/nj/14330162DFBKIE643G15JBB.html" style="left: 302.582px; top: 121.413px; font-size: 15px; opacity: 0.827579; z-index: 4;">怎样理解阳气和阴精的相互关系</a>
            <a class="aa" href="/zswd/sh/14330162J2B6JI66F9A9H2K.html" style="left: 283.997px; top: 65.5633px; font-size: 17px; opacity: 1.35815; z-index: 5;">什么是六经辨证</a>
            <a class="aa" href="/zswd/sh/14330167JLF7ED143G81FGG.html" style="left: 157.006px; top: 62.9974px; font-size: 18px; opacity: 1.67517; z-index: 6;">为什么要辨阴阳两纲?如何辨别</a>
            <a class="aa" href="/zswd/jk/14421668I7AC54EDID7A5K.html" style="left: 107.187px; top: 107.793px; font-size: 17px; opacity: 1.26451; z-index: 7;">怎样通过闻语声、察呼吸来判断病位?</a>
            <a href="/zswd/jk/14421616CEJ94DI89BB82F5.html" style="left: 88.1175px; top: 163.194px; font-size: 15px; opacity: 0.695773; z-index: 8;">怎样掌握先后缓急和审因论治的原则?</a>
            <a href="/zswd/wb/14330174KK514F15CKDI9AJ.html" style="left: 147.83px; top: 188.301px; font-size: 13px; opacity: 0.365502; z-index: 9;">为什么说温病是多种外感急性热性病的总称?</a>
            <a href="/zswd/zy/143311615D575D47BH7H8I8K.html" style="left: 198.677px; top: 161.476px; font-size: 13px; opacity: 0.264945; z-index: 10;">药物的气和味有何关系?</a>
            <a class="aa" href="/zswd/zy/143311612H75G27BHA554ABF.html" style="left: 280.629px; top: 94.4186px; font-size: 13px; opacity: 0.355097; z-index: 11;">升降浮沉对认识和运用药物有何临床意义</a>
            <a class="aa" href="/zswd/fj/14411617KAI2IE4KBDGD32F.html" style="left: 259.491px; top: 23.8429px; font-size: 14px; opacity: 0.622616; z-index: 12;">中成药的特点是什么?怎样选用中成药?</a>
            <a href="/zswd/zj/144913128H4GJAE5GB03GF8.html" style="left: 215.695px; top: -11.1293px; font-size: 14px; opacity: 0.948329; z-index: 13;">针刺时的基本手法与辅助手法有哪些</a>
        </div>
    </body>
</html>

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`d3.layout.cloud()`函数是一个非常有用的方法,可以用于创建漂亮的词云。下面是一个简单的示例,它演示了如何使用该函数: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>3D Word Cloud with D3.js</title> <style> .word { font-size: 10px; cursor: pointer; fill: #000; } </style> </head> <body> <svg id="word-cloud"></svg> <script src="https://d3js.org/d3.v3.min.js"></script> <script src="https://d3js.org/d3.layout.cloud.v1.js"></script> <script> var words = [ "Hello", "world", "normally", "you", "want", "more", "words", "than", "this", "but", "this", "is", "just", "a", "test" ].map(function(d) { return {text: d, size: 10 + Math.random() * 90}; }); var layout = d3.layout.cloud() .size([500, 500]) .words(words) .padding(5) .rotate(function() { return ~~(Math.random() * 2) * 90; }) .font("Impact") .fontSize(function(d) { return d.size; }) .on("end", draw); layout.start(); function draw(words) { d3.select("#word-cloud") .append("g") .attr("transform", "translate(250,250)") .selectAll("text") .data(words) .enter() .append("text") .attr("class", "word") .style("font-size", function(d) { return d.size + "px"; }) .style("fill", function(d, i) { return "#000"; }) .attr("text-anchor", "middle") .attr("transform", function(d) { return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")"; }) .text(function(d) { return d.text; }); } </script> </body> </html> ``` 这个示例将生成一个简单的词云。现在让我们来看看如何使词云更加密集。有几个方法可以实现这一点。以下是其中一种方法: 1. 减少词云中每个单词的间距(padding)。可以通过在 `d3.layout.cloud()` 中设置 `.padding()` 来实现。 2. 增加词云的大小。可以通过在 `d3.layout.cloud()` 中设置 `.size()` 来实现。 3. 减少字体大小的范围。可以通过在 `d3.layout.cloud()` 中设置 `.fontSize()` 来实现。 下面是一个示例代码,它演示了如何使用这些方法来创建更加密集的词云: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>3D Word Cloud with D3.js</title> <style> .word { font-size: 5px; cursor: pointer; fill: #000; } </style> </head> <body> <svg id="word-cloud"></svg> <script src="https://d3js.org/d3.v3.min.js"></script> <script src="https://d3js.org/d3.layout.cloud.v1.js"></script> <script> var words = [ "Hello", "world", "normally", "you", "want", "more", "words", "than", "this", "but", "this", "is", "just", "a", "test" ].map(function(d) { return {text: d, size: 5 + Math.random() * 45}; }); var layout = d3.layout.cloud() .size([1000, 1000]) .words(words) .padding(1) .rotate(function() { return ~~(Math.random() * 2) * 90; }) .font("Impact") .fontSize(function(d) { return d.size; }) .on("end", draw); layout.start(); function draw(words) { d3.select("#word-cloud") .append("g") .attr("transform", "translate(500,500)") .selectAll("text") .data(words) .enter() .append("text") .attr("class", "word") .style("font-size", function(d) { return d.size + "px"; }) .style("fill", function(d, i) { return "#000"; }) .attr("text-anchor", "middle") .attr("transform", function(d) { return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")"; }) .text(function(d) { return d.text; }); } </script> </body> </html> ``` 在这个示例中,我们将 `.size()` 设置为 `[1000, 1000]`,将 `.padding()` 设置为 `1`,将 `.fontSize()` 设置为 `5 + Math.random() * 45`,并将半径设置为 `500`。这些值可能需要根据您的需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值