Совместите различные изображения, окружающие круг, вращайтесь по орбите и отображайте текст в кружке при наведении мыши с помощью начальной загрузки - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь сделать круг, и вокруг круга будут разные изображения. И изображения будут вращаться вокруг круга на орбите, как планеты. При наведении курсора на эти изображения я хочу, чтобы вращение прекратилось, и я пытаюсь отобразить какой-то другой текст в центре круга. Я нарисовал идеальный круг, но у меня возникают проблемы с выравниванием этих изображений по кругу, а также с вращением его вокруг бесконечности. Ниже изображение является примером этого. enter image description here

Таким образом, в основном меньший круг с номерами - это разные изображения, и при наведении этих изображений в центре большого круга будут отображаться различные тексты, и революция будет остановлена. Я также пытаюсь сделать его отзывчивым, поэтому я добавил его в контейнер и пытаюсь поместить его в 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;
}

Что может быть лучше для достижения этой цели?
Любая помощь?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Вот мое решение, оно не идеальное, но оно даст вам отправную точку.

Дианамический текст может быть передан из атрибута 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>
0 голосов
/ 15 мая 2018

Попробуйте использовать элементы позиции, чтобы расположить ваш круг и текст так

        .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;
        }
    
    
         <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>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...