在CSS中反转动画

问题描述 投票:0回答:1

我想做的是:当在搜索栏中输入一些东西时,没有被搜索到的用户名一定会淡出并消失(效果很好),我想在搜索栏中的字母被删除或搜索栏被清除时,反转这个动画。

App.js

import React, { useState, useEffect } from "react";
import SearchBar from "./SearchBar";
import "./App.scss";

const users = [
  { name: "Jack", id: "1" },
  { name: "Lisa", id: "2" },
  { name: "Peter", id: "3" },
  { name: "Roman", id: "4" },
  { name: "Sarah", id: "5" },
  { name: "Eric", id: "6" },
  { name: "Fiora", id: "7" },
];

function App() {
  const [searchValue, setSearchValue] = useState("");
  const [searchFilter, setSearchFilter] = useState(users);

  return (
    <div className="App">
      <h2>Search</h2>
      <SearchBar onSearch={setSearchValue} value={searchValue} />
      <ul className="users">
        {searchFilter.map((user) => {
          let classname =
            user.name.toLowerCase().indexOf(searchValue.toLowerCase()) === -1 &&
            "hide";

          return (
            <li className={`user ${classname}`} key={user.id}>
              {user.name}
            </li>
          );
        })}
      </ul>
    </div>
  );
}

export default App;

搜索栏.js

import React from "react";

function SearchBar(props) {
  const handleSearch = (e) => {
    props.onSearch(e.target.value);
  };

  return <input type="text" onChange={handleSearch} value={props.value} />;
}

export default SearchBar;

App.scss

.user {
  list-style: none;
}

.hide {
  animation: fade-out 1s ease-out forwards;
}

@keyframes fade-out {
  0% {
    opacity: 1;
  }

  50% {
    opacity: 0;
    height: inherit;
    padding: inherit;
  }

  100% {
    opacity: 0;
    height: 0;
    padding: 0;
  }
}

所以基本上我只是想扭转用户在搜索栏中删除一个字母时的动画。

css reactjs sass
1个回答
1
投票

你可以直接反转动画的定义,请看这个 代码和盒子:

CSS:

.show {
  animation: fade-in 1s ease-out forwards;
}

@keyframes fade-in {
  0% {
    opacity: 0;
    height: 0;
    padding: 0;
  }

  50% {
    opacity: 0;
    height: inherit;
    padding: inherit;
  }

  100% {
    opacity: 1;
  }
}

而在里面 <App /> 组件。(检查hideshow类):

function App() {
  const [searchValue, setSearchValue] = useState("");
  const [searchFilter, setSearchFilter] = useState(users);

  return (
    <div className="App">
      <h2>Search</h2>
      <SearchBar onSearch={setSearchValue} value={searchValue} />
      <ul className="users">
        {searchFilter.map(user => {
          let classname =
            user.name.toLowerCase().indexOf(searchValue.toLowerCase()) === -1
              ? "hide"
              : "show"; // <--- HERE we switch for show/hide class.

          return (
            <li className={`user ${classname}`} key={user.id}>
              {user.name}
            </li>
          );
        })}
      </ul>
    </div>
  );
}

1
投票

你可以使用 show 类,就像您使用 hide

在App.js中

let classname = user.name.toLowerCase().indexOf(searchValue.toLowerCase()) === -1 ? "hide" : "show";

在App.scss中

.show {
  animation: fade-in 1s ease-out forwards;
}

@keyframes fade-in {

  0% {
    opacity: 0;
    height: 0;
    padding: 0;
  }

  50% {
    opacity: 0;
    height: inherit;
    padding: inherit;
  }

  100% {
    opacity: 1;
  }
}

你就可以走了。

© www.soinside.com 2019 - 2024. All rights reserved.