我想制作一个圆圈,围绕圆圈会有不同的图像。并且图像将围绕像行星一样的轨道上的圆圈旋转。在悬停那些图像时,我希望旋转停止,我试图在圆心显示一些不同的文本。我画了一个完美的圆圈,但是我无法将这些图像对准圆圈并使其围绕圆圈旋转以获得无限。下图是一个例子。
所以基本上带有数字的较小圆圈是不同的图像,并且在悬停这些图像时,一些不同的文本将显示在大圆的中心并且旋转将被停止。我也试图让它响应,所以我把它添加到容器中并试图将它放在col-3中。
我遇到了对齐这些图像以及在圆心显示文字的问题。这是我到目前为止所尝试的 HTML
<div class="col-3 mx-auto" style="background-color: grey;">
<img src="images/location/2x/location.png" style="float: left; ">
<div class="circle">
<div class="text-center">
</div>
</div>
</div>
CSS
.circle{
width: 80%;
height:0;
padding-bottom: 80%;
-moz-border-radius: 50%;
-webkit-border-radius: 50%;
border-radius: 50%;
background: #4679BD;
}
实现这一目标的更好方法是什么? 有什么帮助吗?
答案 0 :(得分:5)
这是我的解决方案, 它并不完美,但它会给你一个起点。
可以从data-text
属性
<img data-text="A" src="http://placehold.it/50x50" alt="">
为了获得此文本,我在每个图像中添加了mouseover
eventlistener。当我们将鼠标悬停在图像上时,将使用
data-text
属性中提取和更新文本
sampleText.innerHTML=this.getAttribute('data-text');
要在悬停时停止动画,我会使用
暂停动画.image-holder:hover {
animation-play-state: paused;
}
var images = document.getElementsByTagName('img');
var sampleText = document.getElementById('sample-text');
for (var i = 0; i < images.length; i++) {
images[i].addEventListener("mouseover", updateName)
}
function updateName() {
sampleText.innerHTML = this.getAttribute('data-text');
}
body {
padding: 100px;
}
.parent {
position: relative;
}
.circle {
width: 200px;
height: 200px;
border-radius: 50%;
background-color: teal;
display: flex;
justify-content: center;
align-items: center;
}
* {
box-sizing: border-box;
}
.image-holder {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
/*animation: rotate linear 5s infinite forwards;*/
animation-name: rotate;
animation-duration: 5s;
animation-iteration-count: infinite;
animation-timing-function: linear;
animation-fill-mode: forwards;
}
.image-holder:hover {
animation-play-state: paused;
}
.image-holder img {
position: absolute;
width: 50px;
height: 50px;
border-radius: 50%;
}
.image-holder img:nth-child(1) {
top: -15px;
left: -15px;
}
.image-holder img:nth-child(3) {
top: -15px;
right: -15px;
}
.image-holder img:nth-child(5) {
bottom: -15px;
right: -15px;
}
.image-holder img:nth-child(7) {
bottom: -15px;
left: -15px;
}
.image-holder img:nth-child(2) {
top: -50px;
left: 50%;
transform: translateX(-50%);
}
.image-holder img:nth-child(4) {
top: 50%;
right: -50px;
transform: translateY(-50%);
}
.image-holder img:nth-child(6) {
bottom: -50px;
left: 50%;
transform: translateX(-50%);
}
.image-holder img:nth-child(8) {
top: 50%;
left: -50px;
transform: translateY(-50%);
}
@keyframes rotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet" />
<div class="container">
<div class="row">
<div class="parent">
<div class="circle" id="sample-text">
Sample Text
</div>
<div class="image-holder">
<img data-text="A" src="http://placehold.it/50x50" alt="">
<img data-text="B" src="http://placehold.it/50x50" alt="">
<img data-text="C" src="http://placehold.it/50x50" alt="">
<img data-text="D" src="http://placehold.it/50x50" alt="">
<img data-text="E" src="http://placehold.it/50x50" alt="">
<img data-text="F" src="http://placehold.it/50x50" alt="">
<img data-text="G" src="http://placehold.it/50x50" alt="">
<img data-text="H" src="http://placehold.it/50x50" alt="">
</div>
</div>
</div>
</div>
答案 1 :(得分:0)
尝试使用位置元素来定位圆圈和文字
.circle{
width: 300px;
height:300px;
-moz-border-radius: 50%;
-webkit-border-radius: 50%;
border-radius: 50%;
background:white;
position: relative;
}
span{
color: red;
position: absolute;
left: 130px;
top: 50%;
}
img{
position: absolute;
left: 270px;
top: 45px;
}
&#13;
<div class="col-3 mx-auto" style="background-color: grey;">
<img src="images/location/2x/location.png" style="float: left">
<div class="circle">
<span>Hello</span>
</div>
</div>
&#13;