Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   колесо на Js (https://javascript.ru/forum/dom-window/81330-koleso-na-js.html)

venom1996 10.11.2020 14:19

колесо на Js
 
(function() {
  const wheel = document.querySelector('.wheel');
  const startButton = document.querySelector('.btn1');
  var deg = 0;
  const input = document.querySelector('#popup-callback-phone');
  const inputnames = document.querySelector('#consumers-feedback-names');
 
    startButton.addEventListener('click', () => {
    if (input.checkValidity() & inputnames.checkValidity()) {
        startButton.style.pointerEvents = 'none';
        deg = Math.floor(1000 + Math.random() * 137);
        wheel.style.transition = 'all 10s ease-out';
        wheel.style.transform = `rotate(${deg}deg)`;
        wheel.classList.add('blur');
        
    };
});

  wheel.addEventListener('transitionend', () => {
    // Удалить размытие
    wheel.classList.remove('blur');
    // Кнопка включения
    startButton.style.pointerEvents = 'auto';
    // Кнопка включения когда вращение закончено необходимо установить переход на нет так как мы хотим вращаться мгновенно
    wheel.style.transition = 'none';
    // Вычислите градус на основе 360 градусов, чтобы получить "естественное" реальное вращение
    const actualDeg = deg % 360;
    // Вращение без анимации
    wheel.style.transform = `rotate(${actualDeg}deg)`;
    
    
    if (actualDeg > 0 < 45) {
    console.log('1подарок');
    
}else if(actualDeg > 45 <= 90) {
    
    console.log('2подарок');
    
}else if (actualDeg > 90 < 135) {
    
    console.log('3подарок');
    
}else if (actualDeg > 135 < 180) {
    
    console.log('4подарок');
    
}else if (actualDeg > 180 < 225) {
    
    console.log('5подарок');
}else if (actualDeg > 225 < 270) {
    
    console.log('6подарок');
}else if (actualDeg > 270 < 315) {
    
    console.log('7подарок');
}else if (actualDeg > 315 < 360) {
    
    console.log('8подарок');
}


Делаю колесо фортуны для сайта, собственно, как передать данные в картинку ? я пробовал через это условие, если ротация такая то выводи такое, эти данные мне нужно будет потом в crm передавать, подскажите пожалуйста:cray:

рони 10.11.2020 14:46

venom1996,
так напишите свою функцию вместо console.log, которая будет принимать номер картинки и выводить куда нужно.

venom1996 10.11.2020 14:48

там одна целая картинка, в этом и проблема (

рони 10.11.2020 14:51

venom1996,
тогда передавайте позицию картинки. можно только гадать по предоставленной на данный момент информации, что вам конкретно нужно.

venom1996 10.11.2020 14:52

а как передать позицию картинку ? буду очень благодарен если предоставить код

рони 10.11.2020 15:25

venom1996,
условно
function setPos(v)
{
  img.style.backgroundPosition = v
}
 if (actualDeg > 315 < 360)  setPos('0px 30px');

venom1996 10.11.2020 15:43

было бы шикарно если бы вы показали именно на моём примере, так как мои познания в js не значительные

рони 10.11.2020 15:55

Цитата:

Сообщение от venom1996
было бы шикарно если бы вы показали именно на моём примере,

то что мог, я уже показал.

venom1996 10.11.2020 16:03

к сожалению совсем не то, просто присваивает к картинке свойство backgroundPosition

рони 10.11.2020 16:09

venom1996,
Цитата:

Сообщение от рони
можно только гадать по предоставленной на данный момент информации, что вам конкретно нужно.

:-?

venom1996 10.11.2020 16:13

попытаюсь ещё объяснить, есть цельная картинка с колесом, в ней уже есть призы, то есть они нарисованы, я в js должен создать массив с темы призами которые есть на картинке, что бы потом отправлять их в crm

рони 10.11.2020 17:16

venom1996,
не могу помочь

venom1996 11.11.2020 12:39

if (actualDeg >= 0 && actualDeg <= 45 ) {

    gifts = '1';

} else if (actualDeg >= 45 && actualDeg <= 90 ) {

    gifts = '2';

} else if (actualDeg >= 90  &&  actualDeg <= 135) {

   gifts = '3';

} else if (actualDeg >= 135  && actualDeg <= 180) {

    gifts = '4';
    
} else if (actualDeg >= 181 && actualDeg <= 225) {
     
     gifts = '5';
  
} else if (actualDeg >= 225 && actualDeg <= 270) {
     
    gifts = '6';
    
} else if (actualDeg >= 270  && actualDeg <= 315) {

     
    gifts = '7';

} else if (actualDeg >= 315 && actualDeg < 360) {

    gifts = '8';

} else { alert('net podarka');}


решил таким костылём )

venom1996 12.11.2020 10:36

только как мне теперь создать куки при нажатии на кнопку ? что бы окно не появлялось при повторном посещении пользователя ?

рони 12.11.2020 10:45

Цитата:

Сообщение от venom1996
что бы окно не появлялось при повторном посещении пользователя ?

(function() {
  if(localStorage.yes) return;
  localStorage.yes = 'yes';
  const wheel = document.querySelector('.wheel')

venom1996 12.11.2020 11:19

рони,
нужно что бы у одного пользователь была возможно прокрутить колесо только один раз, то есть создать куку по кнопке с временем 30 дней, что бы в след раз когда он открыл сайт, сам pupup не появлялся, следовать и играть он не сможет

venom1996 12.11.2020 11:49

решил проблему таким путём
(function() {
    const wheel = document.querySelector('.wheel');
    const startButton = document.querySelector('.btn1');
    var deg = 0;
    const input = document.querySelector('#popup-callback-phone');
    const inputnames = document.querySelector('#consumers-feedback-names');

    startButton.addEventListener('click', () => {
        if (input.checkValidity() & inputnames.checkValidity()) {
            startButton.style.pointerEvents = 'none';
            deg = 185;
            if(deg >= 181 && deg <= 225) {
                deg + 229;
            }
            wheel.style.transition = 'all 10s ease-out';
            wheel.style.transform = `rotate(${deg}deg)`;
            wheel.classList.add('blur');


        }
    });



    wheel.addEventListener('transitionend', () => {
      //тут делаем куку, которая создаётся при остановке колеса
        document.cookie = "played=true;max-age=3600*24*30";
        wheel.classList.remove('blur');
        startButton.style.pointerEvents = 'auto';
        wheel.style.transition = 'none';
        var actualDeg = deg % 360;
        wheel.style.transform = `rotate(${actualDeg}deg)`;

        var gifts;

        if (actualDeg >= 0 && actualDeg <= 45 ) {

            gifts = '1';

        } else if (actualDeg >= 45 && actualDeg <= 90 ) {

            gifts = '2';

        } else if (actualDeg >= 90  &&  actualDeg <= 135) {

            gifts = '3';

        } else if (actualDeg >= 135  && actualDeg <= 180) {

            gifts = '4';

        } else if (actualDeg >= 181 && actualDeg <= 225) {

            gifts = '5';

        } else if (actualDeg >= 225 && actualDeg <= 270) {

            gifts = '6';

        } else if (actualDeg >= 270  && actualDeg <= 315) {


            gifts = '7';

        } else if (actualDeg >= 315 && actualDeg < 360) {

            gifts = '8';

        } else { alert('net podarka');}
        
      $.fancybox.open($("#popup-success8"));
    document.getElementById("gifts").innerHTML = gifts;
        
    });
})();

  $.fancybox.open({
    src: "#popup-callbac",
    hash: "popup-callbac",
    afterClose: function afterClose() {
        $("#popup-calc-result .popup__in .main-calc-list").remove();
    }
});
//если кука существует, то скрываем попуп
if (getCookie("played")) {
    $.fancybox.close();
}


Часовой пояс GMT +3, время: 04:52.