AMP: easy way to toggle a CSS class?
Asked Answered
A

2

16

I'm build an Accelerated Mobile Page (AMP) template and was wondering if there is an easy way of toggling a CSS class on tab.

I know about stuff like:

<h2 
  class="headline"
  on="tap:list.toggleVisibility"
>
<ul id="list"></ul>

But this writes inline-styles - I'd rather toggle a custom CSS class but couldn't find an example on the AMP page.

AMP.setState with bindings like <h2 [class]="myclasses"> looked like the way to go but manipulating the state is pretty hard with the tools they give you ...

Arrogate answered 21/7, 2017 at 13:34 Comment(0)
C
30

This can be done via amp-bind. You can use an implicit state variable, e.g. visible, to track the current state. Here is a sample that toggles two classes show and hide:

  <button [text]="visible ? 'Show Less' : 'Show More'" 
           on="tap:AMP.setState({visible: !visible})">
    Show More
  </button>
  <p [class]="visible ? 'show' : 'hide'" class="hide">
    Some more content.
  </p>

Full sample on JSBIN

Centriole answered 21/7, 2017 at 16:16 Comment(2)
How about we have multiple show more/less? It needs to create states for each element.Alvaroalveolar
@nich change the variable name visible to visible1, visible2 and moreCorse
H
13

There is also an element specific action with AMP Bind toggleClass(class=STRING, force=BOOLEAN)

<script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>

<h2 
class="headline"
on="tap:list.toggleClass(class='my-custom-class')">
<ul id="list"></ul>
Halftimbered answered 8/5, 2019 at 19:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.