web实现太极八卦图、旋转动画、定位、角度、坐标、html、css、JavaScript、animation

文章目录

  • 前言
  • 1、html部分
  • 2、css部分
  • 3、JavaScript部分
  • 4、微信小程序演示


前言

哈哈


1、html部分

<div class="great_ultimate_eight_diagrams_box">
        <div class="eight_diagrams_box">
            <div class="eight_diagrams">
                <div class="eight_diagrams_item">
                    <div class="yin_yang">
                        <div class="divinatory_direction_box">
                            <div class="divinatory_name">天乾</div>
                            <div class="direction">正南</div>
                        </div>

                        <div class="yy_box">
                            <div class="yy_t">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_m">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_b">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                        </div>
                    </div>
                </div>

                <div class="eight_diagrams_item">
                    <div class="yin_yang">
                        <div class="divinatory_direction_box">
                            <div class="divinatory_name">风巽</div>
                            <div class="direction">西南</div>
                        </div>

                        <div class="yy_box">
                            <div class="yy_t">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_m">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_b">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                        </div>
                    </div>
                </div>

                <div class="eight_diagrams_item">
                    <div class="yin_yang">
                        <div class="divinatory_direction_box">
                            <div class="divinatory_name">水坎</div>
                            <div class="direction">正西</div>
                        </div>

                        <div class="yy_box">
                            <div class="yy_t">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_m">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_b">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                        </div>
                    </div>
                </div>

                <div class="eight_diagrams_item">
                    <div class="yin_yang">
                        <div class="divinatory_direction_box">
                            <div class="divinatory_name">山艮</div>
                            <div class="direction">西北</div>
                        </div>

                        <div class="yy_box">
                            <div class="yy_t">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_m">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_b">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                        </div>
                    </div>
                </div>

                <div class="eight_diagrams_item">
                    <div class="yin_yang">
                        <div class="divinatory_direction_box">
                            <div class="divinatory_name">地坤</div>
                            <div class="direction">正北</div>
                        </div>
                        <div class="yy_box">
                            <div class="yy_t">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_m">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_b">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                        </div>
                    </div>
                </div>

                <div class="eight_diagrams_item">
                    <div class="yin_yang">
                        <div class="divinatory_direction_box">
                            <div class="divinatory_name">雷震</div>
                            <div class="direction">东北</div>
                        </div>

                        <div class="yy_box">
                            <div class="yy_t">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_m">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_b">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                        </div>
                    </div>
                </div>

                <div class="eight_diagrams_item">
                    <div class="yin_yang">
                        <div class="divinatory_direction_box">
                            <div class="divinatory_name">火离</div>
                            <div class="direction">正东</div>
                        </div>

                        <div class="yy_box">
                            <div class="yy_t">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_m">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_b">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                        </div>
                    </div>
                </div>

                <div class="eight_diagrams_item">
                    <div class="yin_yang">
                        <div class="divinatory_direction_box">
                            <div class="divinatory_name">泽兑</div>
                            <div class="direction">东南</div>
                        </div>
                        <div class="yy_box">
                            <div class="yy_t">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_m">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                            <div class="yy_b">
                                <div style="flex: 3; background-color: #333;"></div>
                                <div style="flex: 1; background-color: #333;"></div>
                                <div style="flex: 3; background-color: #333;"></div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- 太极 -->
        <div class="great_ultimate_box">
            <div class="great_ultimate"></div>
        </div>
    </div>

☺☺☺☺☺☺☺

关于html结构未做优化,望谅解!不过微信小程的代码已经优化好,有需要的伙伴可以私聊。对于页面结构就不做过多阐述,多看几下就明白了咋回事了。


2、css部分

.great_ultimate_eight_diagrams_box {
    display: flex;
    justify-content: center;
    align-items: center;
    animation: circularRotation linear infinite 30s;
}

/* 八卦 */
.eight_diagrams_box {
    position: relative;
}

.eight_diagrams {
    width: 410px;
    height: 410px;
    position: relative;
    display: flex;
    justify-content: center;
    align-items: center;
}

.eight_diagrams_item {
    width: 100px;
    position: absolute;
}

.yin_yang {
    width: 100%;
    height: 100%;
    text-align: center;
}

.divinatory_name {
    /* 文字两端对齐 */
    text-align-last: justify;
    font-size: 20px;
    font-weight: 700;
    padding: 0 20px;
}

.direction {
    margin-top: 2px;
    text-align-last: justify;
    padding: 0 10px;
}

.yy_box {
    margin-top: 10px;
    display: flex;
    flex-direction: column;
    align-items: center;
}

.yy_t,
.yy_m,
.yy_b {
    width: 100%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 0;
    margin: 0;
}

.yy_m {
    margin-top: 8px;
}

.yy_b {
    margin-top: 8px;
}

.yy_t div,
.yy_m div,
.yy_b div {
    width: 100%;
    height: 8px;
}

/* 太极 */
.great_ultimate_box {
    position: absolute;
}

.great_ultimate {
    width: 270px;
    height: 270px;
    border-radius: 50%;
    /* 圆球上半部分为白色,下半部分为黑色 */
    background: linear-gradient(to bottom,
            #ffffff 0%,
            #ffffff 50%,
            #000000 50%,
            #000000 100%);
    position: relative;
    transform: rotate(-90deg);
}

.great_ultimate::before {
    position: absolute;
    content: "";
    width: 45.5px;
    height: 45.5px;
    border-radius: 50%;
    border: 45px solid #000000;
    /* 左侧黑球套白点  */
    background-color: #FFFFFF;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
}

.great_ultimate::after {
    position: absolute;
    content: "";
    width: 45.5px;
    height: 45.5px;
    border-radius: 50%;
    border: 45px solid #FFFFFF;
    /* 右侧白球套黑点 */
    background-color: #000000;
    right: 0;
    top: 50%;
    transform: translateY(-50%);
}

@keyframes circularRotation {
    form {
        transform: rotate(0deg);
    }

    to {
        transform: rotate(360deg);
    }
}

☺☺☺☺☺☺☺

八卦图主要就是使用定位,通过JavaScript计算每一个div的坐标,然后定位到指定位置即可。关于太极图可查看本篇文章了解详情。


3、JavaScript部分

function init() {
    let elItem = document.querySelectorAll('.eight_diagrams_item'),
        yin_yang = document.querySelectorAll('.yin_yang'),
        radius = document.querySelector('.eight_diagrams').clientWidth / 2,
        itemLen = elItem.length,
        pieceDeg = 360 / itemLen;

    for (let i = 0; i < itemLen; i++) {
        let t = i * pieceDeg,
            x = undefined,
            y = undefined;

        yin_yang[i].style.transform = `rotate(${t}deg)`;

        t = (Math.PI / 180) * t;
        x = Math.sin(t) * radius;
        y = -Math.cos(t) * radius;

        elItem[i].style.transform = `translate(${x}px, ${y}px)`;
    }
}

init();

☺☺☺☺☺☺

定义名为init的函数,用来设置旋转元素的坐标。
通过querySelectorAll获取一个元素类数组。
通过querySelectorclientWidth获取外层容器的宽度并除以2得到半径。
通过querySelectorAll获取内层元素的类数组,并使用yin_yang变量保存。
定义itemLen变量保存类数组长度。
通过类数组长度计算元素角度的平均值,并保存到pieceDeg变量中。
使用for循环计算出每个元素的xy坐标,i * pieceDeg得到角度值;(Math.PI / 180) * t得到弧度值,因为编程中的sincos需要通过弧度才能计算出坐标值。

yin_yang[i].style.transform = 'rotate(' + t + 'deg)';
elItem[i].style.transform = 'translate(' + x + 'px', y + 'px)';
第一句代码设置元素的旋转角度;第二句话设置元素的坐标位置。以上两句话可以有更好的方式实现,但是在这里暂时不优化。


4、微信小程序演示

X2_2_1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/656.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot-实用开发篇

SpringBoot开发实用篇开发实用篇中因为牵扯到SpringBoot整合各种各样的技术&#xff0c;所以在整合每一个技术之前&#xff0c;都会做一个快速的普及&#xff0c;这样的话内容整个开发实用篇所包含的内容就会比较多。在学习的时候&#xff0c;如果对某一个技术不是很清楚&#…

硬刚ChatGPT!文心一言能否为百度止颓?中国版ChatGPT“狂飙”的机会在哪儿?

文章目录目录产品背景发展历程科技简介主要功能合作伙伴结语文心一言 &#xff08;英文名&#xff1a;ERNIE Bot&#xff09; *是百度基于文心大模型技术推出的生成式对话产品&#xff0c;被外界誉为“中国版ChatGPT”&#xff0c;将于2023年3月份面向公众开放。 [40] 百度在人…

python自动化办公(二)

上接python自动化办公&#xff08;一&#xff09; 文章目录文件和目录操作使用shutil库文件查找globfnmatchhashlib文件和目录操作 使用shutil库 shutil库也是Python标准库&#xff0c;它可以处理文件、文件夹、压缩包&#xff0c;能实现文件复制、移动、压缩、解压缩等功能。…

Vue基础23之路由第二节

Vue基础23路由路由的query参数src/router/index.jsDetail.vueHomeMessage.vue路由的query参数命名路由src/router/index.jsHomeMessage.vueApp.vue总结路由的params参数src/router/index.jsHomeMessage.vueDetail.vue总结路由 路由的query参数 src/router/index.js //该文件专…

Gehpi的网络布局

Gehpi的网络布局1. 力引导布局2. 辅助布局布局是网络可视化中的重要概念&#xff0c;指将点和边通过某种策略进行排布&#xff0c;应尽可能满足以下4个原则&#xff1a; 节点均匀分布在有限的区域内避免边的交叉和弯曲保持边的长度一致整体布局能反映图内在的特性 Gephi的布局…

卷积神经网络

目录卷积神经网络概述神经网络原理卷积神经网络卷积层怎么控制输出数据&#xff1f;如何抓取特征池化层归一化层全连接层局部感受野权值共享多卷积核池化子采样多卷积层卷积神经网络的训练前向传播BackForward反向传播权值更新过程中的卷积网络结构层的排列规律层的尺寸设置规律…

web3:区块链共识机制系列-POS(Proof of Stake)股权证明算法

web3相关学习一并收录至该博客&#xff1a;web3学习博客目录大全 前情衔接&#xff1a;web3:区块链常见的几大共识机制及优缺点 目录前言算法公式与原理算法公式运作原理以Peer Coin为例缺陷优点缺点特点分类发展历程casper协议1.什么是无成本利益关系问题2.引入casper协议解决…

SpringBoot 动态操作定时任务(启动、停止、修改执行周期)增强版

前段时间编写了一篇博客SpringBoot 动态操作定时任务&#xff08;启动、停止、修改执行周期&#xff0c;该篇博客还是帮助了很多同学。 但是该篇博客中的方法有些不足的地方&#xff1a; 只能通过前端控制器controller手动注册任务。【具体的应该是我们提前配置好我们的任务&am…

selenium(4)-------自动化测试脚本(python)

webdriverAPI 一)定位元素的方式&#xff0c;必问 1.1)id来定位元素&#xff0c;前提是元素必须具有id属性&#xff0c;因为有的元素是没有id的 1.2)name&#xff0c;元素必须有name&#xff0c;并且必须全局唯一 1.3)tagname&#xff0c;元素是一定有的&#xff0c;但是必须全…

HTTP 缓存的工作原理

缓存是解决http1.1当中的性能问题主要手段。缓存可能存在于客户端浏览器上&#xff0c;也可以存在服务器上面&#xff0c;当使用过期缓存可能给用户展示的是错误的信息而导致一些bug。 HTTP 缓存&#xff1a;为当前请求复用前请求的响应 • 目标&#xff1a;减少时延&#xff1…

Python+Yolov8目标识别特征检测

Yolov8目标识别特征检测如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<Yolov8目标识别特征检测>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用推荐…

3分钟看完-丄-Python自动化测试【项目实战解析】经验分享

目录&#xff1a;导读 引言 自动化测试 背景 测试团队 测试体系发展 测试平台 自动化测试现状 现状一&#xff1a; 现状二&#xff1a; 现状三&#xff1a; 现状四&#xff1a; 现状五&#xff1a; 现状六&#xff1a; 失败的背景 失败的经历 失败总结 引言 内…

Java多线程系列--synchronized的原理

原文网址&#xff1a;Java多线程系列--synchronized的原理_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java的synchronized的原理。 反编译出字节码 Test.java public class Test {private static Object LOCK new Object();public static int main(String[] args) {synchro…

动态矢量瓦片缓存库方案

目录 前言 二、实现步骤 1.将数据写入postgis数据库 2.将矢量瓦片数据写入缓存库 3.瓦片接口实现 4.瓦片局部更新接口实现 总结 前言 矢量瓦片作为webgis目前最优秀的数据格式&#xff0c;其主要特点就是解决了大批量数据在前端渲染时出现加载缓慢、卡顿的问题&#xff0…

LeetCode 112. 路径总和

LeetCode 112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶…

Python笔记 -- 文件和异常

文章目录1、文件1.1、with关键字1.2、逐行读取1.3、写入模式1.4、多行写入2、异常2.1、try-except-else2.2、pass1、文件 1.1、with关键字 with关键字用于自动管理资源 使用with可以让python在合适的时候释放资源 python会将文本解读为字符串 # -*- encoding:utf-8 -*- # 如…

Linux操作系统基础的常用命令

1&#xff0c;Linux简介Linux是一种自由和开放源码的操作系统&#xff0c;存在着许多不同的Linux版本&#xff0c;但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中&#xff0c;比如手机、平板电脑、路由器、台式计算机。1.1Linux介绍Linux出现于1991年&#xff0c…

操作技巧 | 在Revit中借用CAD填充图案的方法

在建模过程中&#xff0c;有时需要达到多种填充效果&#xff0c;而CAD中大量的二维填充图案&#xff0c;便是最直接的资源之一。 使用 填充图案之前 使用 填充图案之后 其中要用到主要命令便是对表面填充图案的添加与编辑 简单效果 如下 模型填充与绘图填充 区别 模型填…

Java for循环嵌套for循环,你需要懂的代码性能优化技巧

前言 本篇分析的技巧点其实是比较常见的&#xff0c;但是最近的几次的代码评审还是发现有不少兄弟没注意到。 所以还是想拿出来说下。 正文 是个什么场景呢&#xff1f; 就是 for循环 里面还有 for循环&#xff0c; 然后做一些数据匹配、处理 这种场景。 我们结合实例代码来…

SpringBoot+WebSocket实时监控异常

# 写在前面此异常非彼异常&#xff0c;标题所说的异常是业务上的异常。最近做了一个需求&#xff0c;消防的设备巡检&#xff0c;如果巡检发现异常&#xff0c;通过手机端提交&#xff0c;后台的实时监控页面实时获取到该设备的信息及位置&#xff0c;然后安排员工去处理。因为…