transform-origin:设置旋转元素的基点位置 ,即旋转轴的位置。而transform主要是平移translate和旋转rotate的功能。

使用transform-origin属性必须先使用transform属性(旋转)

transform-origin: x-axis y-axis z-axis;

默认值为:50% 50% 0

x-axis的值可为left、center、right、lenght、%,left,center right是水平方向取值,对应的百分值为left=0%;center=50%;right=100%

y-axis的值为top、center、bottom、lenght、%,top center bottom是垂直方向的取值,其中top=0%;center=50%;bottom=100%;

如果只取一个值,表示垂直方向值不变。

如果一个矩形,要想底边中点绕着圆心转动,实现步骤如下:

position: absolute;
bottom: 50%; /*距离底部50%*/
left: 50%; /*距离左边50%,此时只有translateX向左移动50%(即translate(-50%),此时旋转轴才和圆心重合)*/

此时矩形的左下角在50% 50%的地方,如下图所示:

transform-origin: 50% 100%;

表示旋转轴的位置在底边中点的位置:

即旋转轴的位置如下图所示:

再通过transform属性,将矩形向左平移50%,即(-50%)

transform: translateX(-50%);

如下图所示:

最后用transform属性的rotate旋转角度即可实现绕旋转中(即圆心)旋转

代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟学堂(edu.jb51.net)</title>
<style>
#div1
{
    position: relative;
    border-radius: 50%;
    height: 200px;
    width: 200px;
    border: 1px solid black;
    /*添加阴影*/
      box-shadow: 0 0 20px rgba(0,0,0,0.1);
}

.second
{
    width: 30px;
    height: 50px;
    background-color: red;
    position: absolute;
    bottom: 50%;
    left: 50%;
    border: 1px solid black;
    transform-origin:50% 100%;

    border-radius: 5px;
}
</style>
</head>
<body>
<div id="div1">
<div class="second" ></div>
</div>
    <script>
  function updateClock() {
    const now = new Date();
    const hours = now.getHours();
    const minutes = now.getMinutes();
    const seconds = now.getSeconds();

    const hourDeg = (hours % 12 + minutes / 60) * 30;
    const minuteDeg = (minutes + seconds / 60) * 6;
    const secondDeg = seconds * 6;

    document.querySelector('.second').style.transform = `translateX(-50%) rotate(${secondDeg}deg)`;

   
  }

  setInterval(updateClock, 1000);
  //updateClock(); // 立即更新一次,避免延迟

 
</script>
</body>
</html>

效果如下:

 

posted on 2024-10-10 11:30  周文豪  阅读(294)  评论(0编辑  收藏  举报