Добавление css-преобразования, когда элемент готов, не работает

#polymer

#polymer

Вопрос:

Я создаю полимерный элемент с радиальной индикаторной полосой выполнения. Я хочу анимировать, добавляя css-преобразования к определенным элементам внутри элемента, чтобы показать эффект заливки после того, как элемент будет готов. вот код

 <polymer-element name="radial-progress" noscript>
<template>
<style>
    {
        width: 120px;
        height: 120px;
    }
     .wrapper {
        width: 100%;
        height: 100%;   
    }
     .radial-progress {
        background-color: #d6dadc;
        width: 100%;
        height: 100%;
        border-radius: 50%;
    }
     .radial-progress .inset{
        width: 114px;
        height: 114px;
        position: absolute;
        background-color: #fbfbfb;
        border-radius: 50%;
        margin-left: 3px;
        margin-top: 3px;
        line-height: 114px;
    }
     .inset .percent{
        width: 100%;
        height: 100%;
        text-align: center;
        vertical-align: middle;
    }
     .circle .mask,  .circle .fill{
        width: 120px;
        height: 120px;
        position: absolute;
        border-radius: 50%;
        transition: -webkit-transform 1s;
        transition: -ms-transform 1s;
        transition: transform 1s;
        -webkit-backface-visibility: hidden;    
    }
     .circle .mask{
        clip: rect(0px,120px,120px,60px);
    }
     .circle .fill{
        clip: rect(0px,60px, 120px, 0px);
        background-color: #97a71d;
    }
</style>
    <div id="el" class="wrapper" >
        <div class="radial-progress">
            <div class="circle">
                <div class="mask full">
                    <div class="fill"></div>
                </div>
                <div class="mask half">
                    <div class="fill"></div>
                    <div class="fill fix"></div>
                </div>
            </div>
            <div class="inset">
                <div class="percent"></div>
            </div>
        </div>
    </div>
</template>
<script type="text/javascript">
Polymer('radial-progress',{
    ready: function(){
        var transform_styles = ['webkitTransform',
                        'msTransform',
                        'transform'];

        var rotation = Math.floor(Math.random() * 180) ;
        var fill_rotation = rotation;
        var fix_rotation = rotation * 2;
        for(i in transform_styles) {
            var ellist =    this.$.el.querySelectorAll('.wrapper .circle .fill, .wrapper .circle .mask.full');
            var ellist2 = this.$.el.querySelectorAll('.wrapper .circle .fill.fix');
            console.log(ellist, ellist2 )
            for(var j=0 ; j < ellist.length ; j  ){
                ellist[j].style[transform_styles[i]] = 'rotate('   fill_rotation   'deg)';
                console.log("operation", i)
            }
            for(var j2=0;j2<ellist2.length;j2  ){
                ellist2[j2].style[transform_styles[i]] = 'rotate('   fix_rotation   'deg)';
            }
        }
    }
});
</script>
  

Анимация не появляется при загрузке элемента. когда я попытался создать событие анимации на основе добавления on-tap в wrapper, то, когда это событие было запущено, я мог видеть анимацию.
исходная ссылка на элемент:https://medium.com/@andsens/radial-progress-indicator-using-css-a917b80c43f9

Ответ №1:

В вашем примере отсутствует закрывающий </polymer-element> тег. Вам также необходимо удалить noscript атрибут. Это следует использовать, только если вы не определяете прототип для своего элемента.

Я бы также рекомендовал выполнять вашу работу с JS в attached обратном вызове, чтобы вы были уверены, что ваш элемент был добавлен в DOM.

Вот рабочая версия:http://jsbin.com/golayu/4/edit

Комментарии:

1. Анимация не работает, когда я импортирую элемент. Пробовал прикреплено.