Как работает Polymer Hero Transition

Во-первых, мне трудно понять основы смены героя в Polymer. Я пытаюсь создать карточку перехода героя, подобную той, что в предоставленном ими примере, которую можно найти здесь. Ниже я построил мини-карту, и я просто пытаюсь понять переход и то, как большая карта работает с меньшей.

Мой конкретный вопрос: как переход привязывается к каждому элементу? Нужно ли мне завершить CSS для обоих, прежде чем я смогу начать играть с основными анимированными страницами? Имеет ли значение наличие встроенного шаблона?

Любое руководство будет чрезвычайно полезным.

<script src="../components/webcomponentsjs/webcomponents.js"></script>
<link rel="import" href="../components/core-animated-pages/core-animated-pages.html">
<link rel="import" href="../components/core-animated-pages/transitions/hero-transition.html">
<link rel="import" href="../components/paper-button/paper-button.html">
<link rel="import" href="../components/core-image/core-image.html">
<link rel="import" href="../components/paper-shadow/paper-shadow.html">
<polymer-element name="chip-card">
    <template>
        <style>
            #page2 {
                width: 100%;
                height: 100%;
            }
            #paper_shadow {
                position: relative;
                display: inline-block;
                font-family:'Roboto', sans-serif;
                font-size: 12px;
                color: white;
            }
            #chip_body {
                height: 400px;
                width: 300px;
                background-color: aqua;
                color: black;
            }
            #chip_top {
                background-color: deeppink;
                background-image: url();
                background-size: cover;
                background-position: center center;
                width: 100%;
                position: relative;
            }
            #chip_bottom {
                background-color: #fbfbfb;
                width: 100%;
                height: 20%;
                position: relative;
                font-size: 1.2em;
                word-wrap: break-word;
            }
            #text {
                padding-left: 5%;
                padding-right: 2.5%;
                overflow: hidden;
            }
            #coreImage {
                display: block;
            }
            #card_container {
                width: 70%;
                height: 600px;
                background-color: aqua;
                color: black;
            }
            #card_right {
                height: 100%;
                width: 30%;
            }
            #card_left {
                background-color: darkblue;
                height: 100%;
                width;
                70%;
            }
            #card_left_top {
                padding-right: 20px;
                padding-top: 20px;
                background-color: skyblue;
            }
            #circle {
                width: 30px;
                height: 30px;
                border-radius: 50%;
                background-color: red;
            }
            #header_text {
            }
            #card_content {
                width:100%;
                background-color: lightcoral;
            }
        </style>
        <core-animated-pages transitions="hero-transition" selected={{page}}>
            <section>
                <paper-shadow z="1" id='paper_shadow' on-mouseover="{{raise}}" on-mouseout="{{lower}}" animated=true; hero-p="" on-tap="{{transition}}">
                    <div id="chip_body" hero-id="chip_body" vertical layout center justified>
                        <div id="chip_top" flex>
                            <div id="coreImage">
                                <content select="#core-image"></content>
                            </div>
                        </div>
                        <div id="chip_bottom" vertical layout start-justified>
                            <div id='text'>
                                <content select="#chip_bottom"></content>
                            </div>
                        </div>
                    </div>
                </paper-shadow>
            </section>
            <section id="page2">
                <div id="card_container" hero-id="chip_body" on-tap="{{transition}}" hero=""></div>
            </section>
        </core-animated-pages>
    </template>
    <script>
        Polymer('chip-card', {
            page: 0,

            raise: function() {
                this.$.paper_shadow.setZ(2);
            },
            lower: function() {
                this.$.paper_shadow.setZ(1);
            },
            transition: function(e) {
                if (this.page === 0) {
                    this.$.paper_shadow = e.currentTarget;
                    this.page = 1;
                } else {
                    this.page = 0;
                }
            }

        });
    </script>
</polymer-element>

person user2023068    schedule 05.05.2015    source источник
comment
Ваша ссылка ведет на 127.0.0.1:54939/html/chip_to_card.html, исправьте Это.   -  person krzysiej    schedule 06.05.2015
comment
@krzysiej - Спасибо, что заметили, исправлено.   -  person user2023068    schedule 06.05.2015


Ответы (1)


вы на самом деле очень близки к рабочему переходу с кодом, который у вас есть.

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

    <core-animated-pages transitions="hero-transition" selected={{page}}>
        <section>
            <paper-shadow z="1" id='paper_shadow' on-mouseover="{{raise}}" on-mouseout="{{lower}}" hero-p on-tap="{{transition}}">
                <div id="chip_body" hero-id="chip_body" hero vertical layout center justified>
                    <div id="chip_top" flex>
                        <div id="coreImage">
                            <content select="#core-image"></content>
                        </div>
                    </div>
                    <div id="chip_bottom" vertical layout start-justified>
                        <div id='text'>
                            <content select="#chip_bottom"></content>
                        </div>
                    </div>
                </div>
            </paper-shadow>
        </section>
        <section id="page2">
            <div id="card_container" hero-id="chip_body" on-tap="{{transition}}" hero></div>
        </section>
    </core-animated-pages>

Я сделал лишь несколько корректировок.

  • Во-первых, любой родительский элемент героя с атрибутом hero-p должен содержать только этот атрибут. Так что кавычки не нужны :)
    <paper-shadow hero-p .. >
  • Каждый элемент, являющийся частью перехода Hero, нуждается в атрибуте hero.
    Опять же, без кавычек. <div id="chip_body" .. hero .. >
  • То же самое относится и к элементу, к которому вы переходите.
    <div id="card_container" .. hero .. >

Я разместил рабочую версию вашего кода на своем веб-сайте.
Там есть страница, содержащая элемент <chip-card>, и вторая страница, содержащая рабочий файл шаблона.

Главная страница
Файл шаблона

Обратите внимание: я отредактировал ссылку на webcomponentsjs, чтобы она соответствовала моей структуре папок.

Не стесняйтесь спрашивать меня, есть ли что-нибудь еще!

person Michiel    schedule 26.05.2015