Нужна помощь в добавлении/изменении моего script, чтобы включить некоторое вращение с помощью jquery и css - программирование
Подтвердить что ты не робот

Нужна помощь в добавлении/изменении моего script, чтобы включить некоторое вращение с помощью jquery и css

Вот скрипка:

http://jsfiddle.net/7txt3/29/

Я хочу, чтобы запись записи на записи, как вы видите на моем изображении ниже, поворачивается на запись, когда пользователь нажимает кнопку воспроизведения (см. скрипку)

Размещение иглы не обязательно является окончательным, и я хочу, чтобы он находился в верхнем правом углу (я включил изображение, необходимое для этого, и css внизу)

Record

Прямо сейчас, если вы нажмете кнопку воспроизведения (см. скрипку, наведите указатель мыши на одну из обложек записей, нажмите "Воспроизвести" ), стрелка записи входит слева, а затем, если вы нажмете кнопку "Стоп" на той же записи, она вернется к оставил. Если вы нажмете кнопку воспроизведения на другой записи, прежде чем остановить воспроизведение, она останется на одном месте.

Я хочу, чтобы это было похоже на изображение ниже, где оно всегда отображается, но не в записи, если вы не нажмете кнопку воспроизведения, а затем повернуть. Затем, если вы нажмете кнопку воспроизведения на другой записи, в то время как в данный момент она играет, она просто сдвигается/перемещается, как ее изменение. Тогда, конечно, если вы нажмете кнопку "Стоп", она отключится от записи.

The record needle pattern I want

Вот мой текущий script:

$(function(){
var station = $('.player-station'),
    record = $('.record2:first'),
    playBtns = $('.play'),
    info = $('.nprecinfo');
var isPlaying = false;

playBtns.click(function()
{
    var btn = $(this);
    if(btn.text() == 'STOP')
    {
        btn.text('PLAY');
        record.css({'-webkit-animation-play-state': 'paused',
                    '-moz-animation-play-state': 'paused'});

        $('#needle').show().animate({"left": "-=120px"}, "slow");
        isPlaying = false;     

        return;
    };

    playBtns.text('PLAY');
    var album = btn.closest('.album');
    station.text(album.find('h3').text());
    info.text(album.find('.recordinfo').text());
    record.css({'-webkit-animation-play-state': 'running',
                '-moz-animation-play-state': 'running'});
    if (isPlaying == false)
    {
    $('#needle').show().animate({"left": "+=120px"}, "slow");
    isPlaying = true;
    }

     $('#lrvinyl').css("background-image","url("+btn.attr('rel')+")");
     $('#lrvinyl').hide().fadeIn();

    btn.text('STOP');
});
});

и вот текущий css для записывающей иглы:

#needle {
background-image:url(http://benlevywebdesign.com/somafm/images/recordneedle2.png);
background-repeat: no-repeat;
width:220px;
height:220px;
position:absolute;
left:-115px;
top:185px;
z-index:10;
overflow:hidden;
}

если вы хотите поместить иглу в верхнем правом углу, вот изображение и css для использования в скрипте для этого. Возможно, вам придется немного переместить запись (.record2), поэтому просто измените css на left:-4px;

#needle {
background-image:url(http://benlevywebdesign.com/somafm/images/recordneedle4.png);
background-repeat: no-repeat;
width:220px;
height:220px;
position:absolute;
left:205px;
top:10px;
z-index:10;
overflow:hidden;
}
4b9b3361

Ответ 1

+1 для подробного вопроса!:)

Вы уже полагаетесь на css3 для вращающегося диска, и поскольку это вполне возможно с css-переходами, все, что вам нужно сделать с javascript, это добавить/удалить класс.

Демо: http://jsfiddle.net/7txt3/31/

Это, по сути, то, что я добавил (плюс некоторые префиксы поставщика)

CSS

#needle
    transition: all .2s ease;
}
#needle.playing {
    transform: rotate(-10deg);
}

JQuery

изменено с .animate(...) на .removeClass() и .addClass().

Я также немного изменил #needle css, чтобы повернуть слева от руки стрелки, но вы можете посмотреть https://developer.mozilla.org/en-US/docs/CSS/transform-origin вместо этого.

изменить

Извините, я пропустил часть анимации между изменениями записи. Одна вещь, которую вы можете сделать, это удалить класс, а затем добавить его обратно после задержки, что-то вроде этого: http://jsfiddle.net/7txt3/53/

Ответ 2

Я думаю, что это должно дать желаемый эффект.

Чтобы правильно вращать иглу, вам нужно установить начало преобразования.

http://jsfiddle.net/7txt3/35/

Вы, конечно, захотите изменить скорости/проценты.

    #needle {
    background-image:url(http://benlevywebdesign.com/somafm/images/recordneedle2.png);
    background-repeat: no-repeat;
    width:220px;
    height:220px;
    position:absolute;
    top:185px;
    z-index:10;
    overflow:hidden;
}

#needle.playing {
    -webkit-animation-name: needle_move;
    -webkit-animation-duration:8s;
    -webkit-animation-timing-function:linear;
    -webkit-animation-iteration-count:infinite;
    -webkit-animation-direction:normal;
    -webkit-transform-origin: 0px 10px;
    -webkit-transform: rotate(0deg);
    -webkit-transition: all .2s;
       -moz-transition: all .2s;
            transition: all .2s;
}

@-webkit-keyframes needle_move {
    0% {
       -webkit-transform: rotate(0deg);
    }
    50% {
       -webkit-transform: rotate(-15deg);
    }
    70% {
       -webkit-transform: rotate(-15deg);
    }
    0% {
       -webkit-transform: rotate(0deg);
    }
}

Ответ 3

Вот демо, использующее CANVAS, чтобы получить анимацию иглы, которую вы хотели в своем вопросе.

http://jsfiddle.net/7txt3/46/

Из-за префикса vender spammed CSS3 и отсутствия поддержки браузера для точки ротации. Я думаю, что переход на CANVAS немного чище.