react球形文字旋转标签

/*

* 球形文字旋转标签模块

*

*/

import React, {Component, PropTypes} from "react";

import ReactDOM from "react-dom";

class TagCloud extends Component {

constructor(props) {

super(props);

let rotateAngleXbase = 50;

let rotateAngleYbase = 50;

this.state = {

optionData: ["房价放假","通缉犯",‘反季节‘,‘卡夫卡‘,‘可课哦‘,‘解放军‘

,"通缉犯",‘反季节‘,‘卡夫卡‘,‘可课哦‘,‘解放军‘,"通缉犯",‘反季节‘,‘卡夫卡‘,‘可课哦‘,‘解放军‘

], //this.props.TagCloudData,

timer: null,

setting: {

radius: 500,

maxFont: 100,

color: true, //设置标签颜色,设置为true为随机颜色,也可以设置其他色值

// rotateAngleXbase: 150,//默认旋转速度基数,数越小速度越快

// rotateAngleYbase: 150,

hover: true,//是否开启悬浮联动

},

rotateAngleX:Math.PI / rotateAngleXbase, //默认旋转速度基数,数越小速度越快

rotateAngleY:Math.PI / rotateAngleYbase, //默认旋转速度基数,数越小速度越快

}

}

//绕y轴旋转的函数

rotateY(tag){

const {rotateAngleY} = this.state;

let cos = Math.cos(rotateAngleY);

let sin = Math.sin(rotateAngleY);

let x1 = tag.z * sin + tag.x * cos;

let z1 = tag.z * cos - tag.x * sin;

tag.x = x1;

tag.z = z1;

}

//绕x轴旋转的函数

rotateX(tag){

const {rotateAngleX} = this.state;

let cos = Math.cos(rotateAngleX);

let sin = Math.sin(rotateAngleX);

let y1 = tag.y * cos - tag.z * sin;

let z1 = tag.y * sin + tag.z * cos;

tag.y = y1;

tag.z = z1;

}

//设置每个标签的坐标位置和字体大小以及透明度

setPosition(tag, r, maxFont){

let tagContainer = document.getElementById(‘tag‘);

tag.ele.style.transform = `translate( ${(tag.x + tagContainer.offsetWidth / 2 - tag.ele.offsetWidth / 2)/320}rem,

${(tag.y + tagContainer.offsetHeight / 2 - tag.ele.offsetHeight / 2)/320}rem)`;

tag.ele.style.opacity = tag.z / r / 2 + 0.7;

tag.ele.style.fontSize = (tag.z / r / 2 + 0.5) * maxFont + "px";

// console.log(tag.ele.style.fontSize,"tag.ele.style.fontSize")

}

innit(){

const setting = this.state.setting;

let tagContainer = document.getElementById(‘tag‘);

let tags = [];

let optionData = this.state.optionData;

if(Array.isArray(optionData) && optionData.length>0){

for (let i = 0; i<optionData.length; i++) {

let tag = document.createElement("a");

tag.innerText = optionData[i];

tag.setAttribute("class", "tag");

tag.style.cssText += "position: absolute; left: 0; top: 0; text-decoration: none; font-weight: bolder;";

tagContainer.appendChild(tag);

tags.push(tag);

};

// tagContainer.appendChild(tagGroup);

//让标签元素相对标签云元素绝对定位

tagContainer.style.position = "relative";

}

let allTag = [];//标签数组

for (let i = 0, length = tags.length; i < length; i++) {

if (setting.color === true) {

tags[i].style.color = "#2493FC";

} else {

tags[i].style.color = setting.color;

}

// 获取球面上均匀的点的经纬度

let angleX = Math.acos((2 * (i + 1) - 1) / length - 1);

let angleY = angleX * Math.sqrt(length * Math.PI);

//根据经纬度获取点的坐标,球中心的点坐标是

let x = setting.radius * Math.sin(angleX) * Math.cos(angleY);

let y = setting.radius * Math.sin(angleX) * Math.sin(angleY);

let z = setting.radius * Math.cos(angleX);

// console.log(x,y,z,"我哦")

//每个标签对象都有四对值

let tag = {

x: x,

y: y,

z: z,

ele: tags[i]

};

allTag.push(tag);

}

// console.log(allTag,"我哦")

//开始转动的函数;

this.timer = setInterval(() => {

for (let i = 0; i < tags.length; i++) {

this.rotateX(allTag[i]);

this.rotateY(allTag[i]);

this.setPosition(allTag[i], setting.radius, setting.maxFont);

}

}, 100);

}

componentDidMount(){

this.innit();

}

componentWillUnmount() {

this.timer && clearInterval(this.timer);

}

render() {

return (

<div id="tag" style={{margin:`${800/320}rem auto`}}></div>

)

}

}

module.exports = TagCloud;

原文地址:https://www.cnblogs.com/BlogRegisterAspx/p/10365461.html

时间: 2024-10-11 04:40:19

react球形文字旋转标签的相关文章

HTML5绘图之文字旋转

HTML5绘图之文字旋转 在GDI/GDI+中文字旋转是一件比较容易的事情,HTML5的Canvas中的旋转与GDI/GDI+中的旋转稍微有点差异,先看一个图: 文字旋转的示例代码 ctx.beginPath(); ctx.fillStyle = "#000000"; ctx.font = "52pt Calibri"; ctx.textAlign = "center"; ctx.fillText(this.end, endX, endY); c

帝国cms调用最新文章 利用文字调用标签phomenews

最近建站时,朋友要求在头部用帝国cms调用最新文章,当时想了用灵动标签调用,但需要设置一个具体的栏目id,这样就不是调用全站的最新文章了,后面查看了一下标签说明,想到了文字调用标签phomenews. 文字调用标签 (phomenews)格式为:[phomenews]栏目ID/专题ID,显示条数,标题截取数,是否显示时间,操作类型,是否显示栏目名,'时间格式化',附加SQL条件,显示排序[/phomenews],本身也是要设置栏目id的,这时我们想到了通过调用数据表的方式, 因为很多栏目都是文章

css让文字旋转270度

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTEN

wordpress博客添加3D旋转标签云

为了让自己的博客首页更动感,我们可以添加3D旋转标签云,只需要添加插件即可. 方法如下: 1.登录wp管理后台,选择插件--安装插件,右上角搜索框搜索:WP-Cirrus 找到后选择安装,并启用. 2.外观--小工具--拖动WP-Cirrus到后侧首页功能项里面,保存即可. 3.在WP-Cirrus下拉列表中可以设置标题.标签云的高宽.刷新速度.标签最小值最大值.字体的颜色.背景颜色等等. 4.前提是你的博客中文章设置过标签,否则为空白. 5.刷新首页就能看到旋转的标签云,让你的博客也活泼起来.

React可以渲染html标签 或React组件

React 的 JSX 使用大.小写的约定来区分本地组件的类和 HTML 标签.既渲染html标签需要使用小写字母开头的标签名而渲染本地React组件需要使用大写字母开头的标签名 注意: 由于 JSX 就是 JavaScript,一些标识符像 class 和 for 不建议作为 XML 属性名.作为替代,React DOM 使用 className 和 htmlFor 来做对应的属性.

html 文字溢出标签

overflow:visible;作用:能看到溢出部分. overflow: hidden;作用:溢出部分看不到 overflow:scroll; 作用:出现一个滚动条(不超过的文字也会在滚动条里) overflow:auto;作用:自动滚动条 下面的代码可以对这4个属性区别显示效果 <!DOCTYPE html><html><head> <title>溢出</title> <meta charset="utf-8"&g

CSS实现文字旋转/实现角标

主要用到属性transform:rotate(-30deg) example: .divedittable .project-tag div { width: 43px; line-height: 43px; text-align: center; color: #fff; font-size: 12px; transform: rotate(-45deg); } .divedittable .design-tag { background-image: url('../images/icons

文字旋转

.rotate { 2 3 /* Safari */ 4 -webkit-transform: rotate(-90deg); 5 6 /* Firefox */ 7 -moz-transform: rotate(-90deg); 8 9 /* IE */ 10 -ms-transform: rotate(-90deg); 11 12 /* Opera */ 13 -o-transform: rotate(-90deg); 14 15 /* Internet Explorer */ 16 fil

Css设置文字旋转

.test{ -moz-transform: rotate(-45deg); -webkit-transform: rotate(-45deg); display: block; position: absolute; filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3) } <span class="test">2009</span> 结果: 原文地址:https://www.cnblo