How to pass css :active pseudo class to javascript?

后端 未结 2 1314
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-10 08:34

Reference: Comments posted by @AnkithAmtange


Given html

Click Away

css

div {
  width:          


        
相关标签:
2条回答
  • 2020-12-10 09:13

    You can use the document.activeElement for that.

    $(function() {
      $(document).on('click', function() {
        console.log(document.activeElement);
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="a">asdf</div>
    <span>123</span>
    <select>
      <option>1</option>
    </select>
    <button>123</button>
    <input />

    Update

    If you want to pass the current :active element - you must use the mousedown (and not the click event), because the :active element is not active anymore once your mouse is up.

    Since the :active bubbles up the DOM tree, all the parent elements will also get the :active pseudo-class (added a red border in the following example) so I took only the last element in the $(':active') selector.

    Check this example:

    $(document).ready(function() {
      var active;
      $(document).mousedown(function() {
        active = $(":active");
        setTimeout(function() {
          console.log("active", active.last()[0])
        }, 1000)
      })
    })
    div {
      width: 100px;
      height: 100px;
      background: orange
    }
    div:active {
      color: white;
      background: rebeccapurple
    }
    :active {
      border: 1px solid red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div>Click Away</div>

    0 讨论(0)
  • 2020-12-10 09:27

    You can utilize :active:hover pseudo class, animation with duration set to 0s, @keyframes at css; animationend event at javascript

    :root {
      --activeprop: 0px;
    }
    div {
      position: relative;
      left: var(--activeprop);
      width: 200px;
      height: 200px;
      background: orange;
    }
    div:active:hover {
      color: white;
      background: rebeccapurple;
      animation: active 0s;
      -moz-animation: active 0s;
      -webkit-animation: active 0s;
    }
    
    @keyframes active {
      from {
        left:var(--activeprop);
      }
      to {
        left:var(--activeprop);
      }
    }
    
    @-moz-keyframes active {
      from {
        left:var(--activeprop);
      }
      to {
        left:var(--activeprop);
      }
    }
    @-webkit-keyframes active {
      from {
        left:var(--activeprop);
      }
      to {
        left:var(--activeprop);
      }
    }
    <div>Click Away</div>
    <script>
    for (el of document.querySelectorAll("div")) {
    el.addEventListener("animationend", function(event) {
      console.log(`${event.target.nodeName} is :active`)
    })
    };
    </script>

    0 讨论(0)
提交回复
热议问题