单击div,使其顺时针旋转180°

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单击div,使其顺时针旋转180°相关的知识,希望对你有一定的参考价值。

单击div,使其顺时针旋转180°不用jQuery

参考技术A 那我们就用css3实现吧!

提示:关于浏览器的兼容性,你可以去 w3cschool 了解一下,我这里就不写那么繁琐的代码了。

div
width:200px;
height:200px;
background-color:#00ff00;
border-radius:0 100px 0 0;
transform:rotate(0deg);
transition:transform 1s;


div:active
transform:rotate(180deg);


希望能够对你有所帮助!本回答被提问者采纳
参考技术B 点击一次旋转180是css就可以做到的,每次点击都要有变化的话,就需要js来实现了追问

求个代码

在旋转的三角矩阵旁边添加彩条

【中文标题】在旋转的三角矩阵旁边添加彩条【英文标题】:Add color bars beside rotated triangular matrix 【发布时间】:2021-12-04 10:34:20 【问题描述】:

我希望创建一个三角矩阵,将其顺时针旋转 45 度,并在旋转后的三角矩阵两侧附加彩条。这是我的代码:

# The data
library(tidyverse)

x <- 1:10
y <- 1:10
data <- expand.grid(X=x, Y=y)
data$X <- as.numeric(data$X)
data$Y <- as.numeric(data$Y)
data$Z <- 1:(10*10)

# Create upper triangular matrix
zz <- t(matrix(data$Z, 10, 10))
zz[lower.tri(zz)] <- NA
data$zz <- c(t(zz))

# Use "-Y" so that the first row of data is plotted in the first row
p1 <- ggplot(data, aes(X, -Y, fill= zz)) + 
  geom_tile() +
  # scale_fill_gradient(low="blue", high="red") +
  scale_fill_gradient(low = "#132B43", high = "#56B1F7", space = "Lab", na.value="white") +
  theme_bw() +
  theme(axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

这是p1,看起来不错:

我希望将这个矩阵旋转 45 度顺时针。我按照建议的代码here:

rotate <- function(df, degree) 
  dfr <- df
  degree <- pi * degree / 180
  l <- sqrt(df$X^2 + df$Y^2)
  teta <- atan(df$Y / df$X)
  dfr$X <- round(l * cos(teta - degree))
  dfr$Y <- round(l * sin(teta - degree))
  return(dfr)


data_rot <- rotate(data, 45)

p2 <- ggplot(data_rot, aes(X, -Y, fill= zz)) + 
  geom_tile() +
  # scale_fill_gradient(low="white", high="blue") +
  scale_fill_gradient(low = "#132B43", high = "#56B1F7", space = "Lab", na.value="white") +
  theme_bw() +
  theme(axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

但是,p2 不是我想要的:

这就是我想要的:

由于我想将p1顺时针旋转45度,所以对角线应该是垂直的,三角矩阵内不应该有缺失值。 如何进行轮换?

另外,我想在热图的两侧添加彩条,如下图粉红色圈出的彩条所示:

我的数据有 10 列和 10 行,我希望使用 5 种不同颜色为我自己的热图绘制像上面这样的颜色条,每种颜色跨越两个相邻的行/列。 如何添加?

【问题讨论】:

第二部分听起来像是一个非常独立的问题。它们有关系吗? 【参考方案1】:
p1_fmt <- p1 + guides(fill = "none") + coord_equal()
tri_file <- tempfile()
ggsave(tri_file, p1_fmt, width = 3, height = 3, device = "png")

p1_guide <- cowplot::get_legend(p1)
guide_file <- tempfile()
ggsave(guide_file, p1_guide, width = 1, height = 1.5, device = "png")


library(magick)
tri <- image_read(tri_file) %>%
  image_rotate(45) %>%
  image_trim()
guide <- image_read(guide_file)

image_append(c(tri, guide))

【讨论】:

【参考方案2】:
zz %>%
  as.data.frame() %>%
  mutate(row = 11 - row_number()) %>%
  pivot_longer(-row, names_to = "col") %>%
  filter(!is.na(value)) %>%
  # slice(1:12) %>%
  mutate(col = parse_number(col),
         col_new = col - 5 - (row+col)/2,
         row_new = row - (10 - col)) %>% 
  ggplot(aes(col_new, row_new, fill = value)) +
  geom_tile(width = 1) 

【讨论】:

因为我想将p1顺时针旋转45度,所以对角线应该是垂直的。我添加了一个新图,显示输出的外观。谢谢。

以上是关于单击div,使其顺时针旋转180°的主要内容,如果未能解决你的问题,请参考以下文章

如何在悬停时在 150 毫秒内将元素旋转到 180 度?

顺时针旋转二维数组

将下面矩阵分别按顺时针90度,逆时针90度,和旋转180度,打印出来

当点击一个按钮在android中顺时针旋转图像

183Java8对图片做顺时针旋转90度逆时针旋转90度旋转180度水平翻转垂直翻转操作。

183Java8对图片做顺时针旋转90度逆时针旋转90度旋转180度水平翻转垂直翻转操作。