css3transiton 的使用

<template>
  <transition name="slide">
    <div class="search_page">
 
     123
  </transition>
</template>
<script>
 
export default {
  name: "SearchPage",
  components: {
    SearchHeader,
    [Icon.name]: Icon,
    VueBetterScroll,
    CourseItem,
    NoData,
  },
  data() {
    return {
      isFocus: true,
      noBlur: true,
      searchText: "",
      historyList: [],
      accessToken: parseParam(window.location.href).accessToken || "",
      // VueBetterScroll 配置
      scrollbarObj: {
        fade: true,
      },
      pullDownRefreshObj: {
        threshold: 90,
        stop: 40,
      },
      pullUpLoadObj: {
        threshold: 0,
        txt: {
          more: "加载更多",
          noMore: "没有更多数据了",
        },
      },
      startY: 0,
      scrollToX: 0,
      scrollToY: 0,
      scrollToTime: 700,
      items: [],
      pageSize: 20,
      pageNum: 1,
    };
  },
  props: {
    searchState: {
      type: Boolean,
      default: false,
    },
  },
  watch: {
    searchState(newVal) {
      if (newVal) {
        this.$refs.SearchHeader.$refs.searchInput.focus();
      } else {
        this.$refs.SearchHeader.$refs.searchInput.blur();
      }
    },
    isFocus(newVal) {
      // 获取焦点后查询当前用户的历史记录
      if (newVal) {
        this.getSearchDataList();
      }
    },
  },
  mounted() {
    this.getSearchDataList();
  },
  methods: {
    goBack() {
      this.$emit("goBack");
    },
    handleFocus(state) {
      if (state) this.noBlur = true;
      this.isFocus = state;
    },
    handleSearch() {
      console.log(this.searchText);
      this.$refs.SearchHeader.$refs.searchInput.blur();
      this.noBlur = false;
      this.saveSearchData();
      this.onPullingDown();
    },
    historyClick(item) {
      this.searchText = item.content;
      this.isFocus = false;
      this.noBlur = false;
      this.onPullingDown();
    },
    // 查询历史记录
    async getSearchDataList() {
      const response = await this.$request(API.studyCenter.getSearchDataList, {
        method: "get",
        params: {
          accessToken: this.accessToken,
          flag: 1,
        },
      });
      this.historyList = [...((response && response.result) || [])];
    },
    // 删除历史记录
    async delSearchDataList() {
      const response = await this.$request(API.studyCenter.delSearchDataList, {
        method: "get",
        params: {
          accessToken: this.accessToken,
          flag: 1,
        },
      });
      if (response && response.code === 200) this.historyList = [];
    },
    // 添加历史数据
    async saveSearchData() {
      await this.$request(API.studyCenter.saveSearchData, {
        method: "get",
        params: {
          accessToken: this.accessToken,
          flag: 1,
          content: this.searchText,
        },
      });
    },
    // 数据请求
    getListData(params) {
      const that = this;
      const { pageNum } = params;
      return that
        .$request(API.studyCenter.getLessonDataList, {
          method: "get",
          params: {
            accessToken: this.accessToken,
            page: pageNum,
            rows: that.pageSize,
            typeId: 0,
            text: this.searchText,
          },
        })
        .then((res) => {
          return new Promise((resolve) => {
            resolve(res);
          });
        });
    },
    onPullingDown() {
      this.pageNum = 1;
      this.getListData({ pageNum: this.pageNum }).then((response) => {
        this.items = [];
        const { result = [], totalNum } = response;
        this.items = [...result];
        if (Math.ceil(totalNum / this.pageSize) === this.pageNum) {
          this.$refs.search_scroll.forceUpdate(false);
        } else {
          this.$refs.search_scroll.forceUpdate(true);
        }
      });
    },
    onPullingUp() {
      this.pageNum++;
      this.getListData({ pageNum: this.pageNum }).then((response) => {
        const { result = [], totalNum } = response;
        this.items = this.items.concat(result);
        if (Math.ceil(totalNum / this.pageSize) === this.pageNum) {
          this.$refs.search_scroll.forceUpdate(false);
        } else {
          this.$refs.search_scroll.forceUpdate(true);
        }
      });
    },
    touchstart(ev) {
      addClass(ev.currentTarget, "icon_on");
    },
    touchend(ev) {
      removeClass(ev.currentTarget, "icon_on");
    },
    // 跳转详情 回来刷新局部
    bindReload(nub) {
      if (nub === 1) {
        window.reload = () => {
          console.log("第二个页面");
          this.onPullingDown();
        };
      }
    },
  },
};
</script>
<style lang="scss" scoped>
@import "~assets/css/mixins";
.search_page {
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
   100%;
  background: $color-white;
  z-index: 200;
  box-shadow: 0px 0px 40px rgba(128, 128, 128, 0.4);
  &.slide-enter-active,
  &.slide-leave-active {
    transition: all 0.3s;
    transform: translate3d(0, 0, 0);
  }
  &.slide-enter,
  &.slide-leave-to {
    transform: translate3d(100%, 0, 0);
  }
  .search_content {
    position: absolute;
    left: 0;
    top: 88px;
    bottom: 0;
    right: 0;
     100%;
    .history_wrap {
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      overflow-y: auto;
      background: $color-white;
      z-index: 201;
      .title {
        margin-top: 28px;
        font-size: 24px;
        color: $color-n2-5;
        align-items: center;
        padding: 0 32px;
        @include flex-r();
        @include flex-justify();
        .icon_wrap {
           44px;
          height: 44px;
          @include flex-r();
          @include flex-center();
          &.icon_on {
            background: $color-faint-Black;
          }
        }
      }
      .history_lists {
        //  100%;
        padding-left: 32px;
        display: flex;
        flex-flow: row wrap;
        li {
           auto;
          display: inline-block;
          height: 56px;
          padding: 0 36px;
          border-radius: 28px;
          margin: 20px 32px 0 0;
          border: 1.5px solid $color-n1-4;
          color: $color-n2-5;
          font-size: 28px;
          line-height: 57px;
          &.icon_on {
            background: $color-faint-Black;
          }
          // &:nth-child(4n) {
          //   margin-right: 0;
          // }
        }
      }
    }
    .search_content_list {
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      overflow-y: auto;
      background: $color-white;
    }
  }
}
</style>
原文地址:https://www.cnblogs.com/bamboopanders/p/13234239.html