整屏垂直滚动

   <!-- 左侧导航条写在父组件里-->
          <div class="nav-left kxb-hidden-small kxb-hidden-medium">
            <!-- 左侧竖线 -->
            <div class="vertical-line"></div>
            <div class="menu">
              <div class="menu-arrow">
                <i
                  class="el-icon-arrow-up"
                  :class="{ up: current != 1, 'kxb-pointer': current != 1 }"
                  @click="clickNav(current - 1)"
                ></i>
              </div>
              <div>
                <div
                  class="kxb-pointer nav-item kxb-margin-top-1 kxb-margin-bottom-1"
                  @click="clickNav(1)"
                >
                  <div class="circle hide" :class="{ show: current == 1 }"></div>
                  <div class="txt">首页</div>
                </div>
                <div
                  class="kxb-pointer nav-item kxb-margin-top-1 kxb-margin-bottom-1"
                  @click="clickNav(2)"
                >
                  <div class="circle hide" :class="{ show: current == 2 }"></div>
                  <div class="txt">主办单位</div>
                </div>
                <div
                  class="kxb-pointer nav-item kxb-margin-top-1 kxb-margin-bottom-1"
                  @click="clickNav(3)"
                >
                  <div class="circle hide" :class="{ show: current == 3 }"></div>
                  <div class="txt">特色板块</div>
                </div>
                <div
                  class="kxb-pointer nav-item kxb-margin-top-1 kxb-margin-bottom-1"
                  @click="clickNav(4)"
                >
                  <div class="circle hide" :class="{ show: current == 4 }"></div>
                  <div class="txt">特邀嘉宾</div>
                </div>
              </div>
              <div class="menu-arrow">
                <i
                  class="el-icon-arrow-down"
                  :class="{ down: current != 4, 'kxb-pointer': current != 4 }"
                  @click="clickNav(current + 1)"
                ></i>
              </div>
            </div>
          </div>
            .nav-left{
    width: 140px;
    height: calc(~"100vh - 60px");
    position: fixed;
    left: 5%;
    z-index: 99;
    display: flex;
    // justify-content: space-between;
    color: #fff;
    font-size: 18px;
    align-items: center;
    .vertical-line {
      width: 1px;
      background-color: #fff;
      height: 100%;
      opacity: 0.5;
    }
    .menu {
      width: 90%;
      height: 95%;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      .menu-arrow {
        padding-left: 25px;
        i {
          font-size: 28px;
          transition: All 0.4s ease-in-out;
          opacity: 0.6;
        }
        .down,
        .up {
          opacity: 1;
        }
        .down:hover {
          transform: translate(0, 5px);
        }
        .up:hover {
          transform: translate(0, -5px);
        }
      }
    }
    .circle {
      width: 6px;
      height: 6px;
      background-color: #fff;
      border-radius: 50%;
      position: relative;
      left: -3px;
    }
    .txt {
      margin-left: 25px;
    }
    .nav-item {
      display: flex;
      align-items: center;
      // justify-content: space-between;
    }
  }
 clickNav(index) {
      if (index > 0 && index <= 4) {
        this.$refs["homeTab"].clickToWheel(this.current, index);
        // }else{
        //   this.$refs['homeTab'].mouseWheelHandle()
      }
    },
<template>
  <div>
    <div class="fullPage kxb-hidden-small kxb-hidden-medium" ref="fullPage">
      <div
        class="fullPageContainer"
        ref="fullPageContainer"
        @mousewheel="mouseWheelHandle"
        @DOMMouseScroll="mouseWheelHandle"
      >
        <div
          id="slide1"
          class="kxb-content kxb-slide"
          :style="{ height: clientHeight + 'px' }"
          style=""
        >
          <!-- PC banner -->
          
          <img
            class="anima"
            :style="{ 'max-height': clientHeight - 40 + 'px' }"
            style="max-width:75%;" 
            :src="bannerImgPC"
          />
        </div>
        <div
          id="slide2"
          class="kxb-content kxb-slide"
          :style="{ height: clientHeight + 'px' }"
        >
          <div class="kxb-center-div kxb-padding-top-1">
            <p v-if="clientHeight > 600" class="kxb-padding-top-3">
              <!-- 大屏幕的时候间距要大一些-->
            </p>
            <h3 class="kxb-font-30 kxb-textcolor-white kxb-margin-bottom-0">主办单位</h3>
            <h3 class="kxb-font-30 kxb-textcolor-white kxb-margin-top-0">
              Organizational Structure
            </h3>
            <p v-if="clientHeight > 600" class="kxb-padding-top-3">
              <!-- 大屏幕的时候间距要大一些-->
            </p>
            <div class="kxb-fluid kxb-padding-top-2" style="padding: 0">
              <div
                class="kxb-col-12-4 kxb-col-medium-12-12"
                style="padding: 0"
                v-for="item in plate"
                :key="item._id"
              >
                <a :href="item.url"><img :src="item.imgUrl" class="kxb-resize" /></a>
                <p
                  class="kxb-font-16 kxb-textcolor-white kxb-bold kxb-center kxb-margin-top-0"
                >
                  {{ item.title }}
                </p>
              </div>
            </div>
          </div>
        </div>
        <div
          id="slide3"
          class="kxb-content kxb-slide"
          :style="{ height: clientHeight + 'px' }"
        >
          <div class="kxb-center-div kxb-padding-top-1">
            <p v-if="clientHeight > 600" class="kxb-padding-top-3">
              <!-- 大屏幕的时候间距要大一些-->
            </p>
            <h3 class="kxb-font-30 kxb-textcolor-white kxb-margin-bottom-0">特色板块</h3>
            <h3 class="kxb-font-30 kxb-textcolor-white kxb-margin-top-0">
              Conference Board
            </h3>
            <a :href="features[0].url"
              ><img :src="features[0].imgUrl" class="kxb-resize"
            /></a>
            <p
              v-if="features[0].title"
              class="kxb-font-16 kxb-textcolor-white kxb-bold kxb-center kxb-margin-top-0"
            >
              {{ features[0].title }}
            </p>
          </div>
        </div>
        <div
          id="slide4"
          class="kxb-content kxb-slide"
          :style="{ height: clientHeight + 'px' }"
        >
          <div class="kxb-center-div kxb-padding-top-1">
            <p v-if="clientHeight > 600" class="kxb-padding-top-3">
              <!-- 大屏幕的时候间距要大一些-->
            </p>
            <h3 class="kxb-font-30 kxb-textcolor-white kxb-margin-bottom-0">特邀嘉宾</h3>
            <h3 class="kxb-font-30 kxb-textcolor-white kxb-margin-top-0">
              Special Guests
            </h3>
            <div class="kxb-fluid">
              <div class="kxb-col-5-1 kxb-col-medium-12-3 kxb-center" v-for="i in 10">
                <div class="kxb-padding-content kxb-padding-top-0 kxb-padding-bottom-0">
                  <a href="">
                    <img
                      src=""
                      alt=""
                      class="kxb-circle kxb-resize"
                  /></a>
                  <p class="kxb-margin-bottom-0">
                    <a
                      href=""
                      class="kxb-textcolor-white"
                      ></a
                    >
                  </p>
                  <p class="kxb-font-12 kxb-margin-top-0 kxb-padding-top-0">
                    <a
                      href=""
                      class="kxb-textcolor-white"
                      >大连理工大学</a
                    >
                  </p>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="kxb-hidden-large kxb-hidden-xlarge mobile">
      <div id="slide1" class="kxb-content">
        <div style="padding: 13px 5%">
          <!-- PC banner -->
          <img
            class="kxb-resize anima"
            :src="bannerImgPC"
            style="width: 100%; height: auto"
          />
        </div>
      </div>
      <div id="slide2" class="kxb-content kxb-padding-bottom-1 kxb-padding-top-1">
        <div class="center-div">
          <h3 class="kxb-h4 kxb-textcolor-white kxb-margin-bottom-0">主办单位</h3>
          <h3 class="kxb-h4 kxb-textcolor-white kxb-margin-top-0">
            Organizational Structure
          </h3>

          <div class="kxb-fuid">
            <div class="kxb-col-12-12 kxb-center" v-for="item in plate" :key="item._id">
              <a :href="item.url"><img :src="item.imgUrl" class="kxb-resize" /></a>
              <p class="kxb-textcolor-white kxb-font-16">{{ item.title }}</p>
            </div>
          </div>
        </div>
      </div>
      <div id="slide3" class="kxb-content kxb-padding-bottom-1 kxb-padding-top-1">
        <div class="center-div">
          <h3 class="kxb-h4 kxb-textcolor-white kxb-margin-bottom-0">特色板块</h3>
          <h3 class="kxb-h4 kxb-textcolor-white kxb-margin-top-0">Conference Board</h3>

          <a :href="features[0].url"
            ><img :src="features[0].imgUrl" class="kxb-resize"
          /></a>
          <p
            v-if="features[0].title"
            class="kxb-font-16 kxb-textcolor-white kxb-center kxb-margin-top-0"
          >
            {{ features[0].title }}
          </p>
        </div>
      </div>
      <div id="slide4" class="kxb-content kxb-padding-bottom-1 kxb-padding-top-1">
        <div class="center-div">
          <h3 class="kxb-h4 kxb-textcolor-white kxb-margin-bottom-0">特邀嘉宾</h3>
          <h3 class="kxb-h4 kxb-textcolor-white kxb-margin-top-0">Special Guests</h3>
          <div class="kxb-fluid">
            <div class="kxb-col-small-12-6 kxb-center" v-for="i in 10">
              <div class="kxb-padding-content kxb-padding-top-0 kxb-padding-bottom-0">
                <a href="">
                  <img
                    src=""
                    alt=""
                    class="kxb-circle kxb-resize"
                /></a>
              </div>
              <p class="kxb-margin-bottom-0">
                <a
                  href=""
                  class="kxb-textcolor-white"
                  ></a
                >
              </p>
              <p class="kxb-font-12 kxb-margin-top-0 kxb-padding-top-0">
                <a
                  href=""
                  class="kxb-textcolor-white"
                  >大连理工大学</a
                >
              </p>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import api from "~api";
export default {
  name: "HelloWorld",
  props: ["bannerImgPC", "_id"],
  data() {
    return {
      clientHeight: 0,
      clientWidth: 0,
      menuHeight: 60, //上面 menu 的高度,menu 高度一旦改变不要忘了调整这里的值
      fullpage: {
        current: 1, // 当前的页面编号
        isScrolling: false, // 是否在滚动,是为了防止滚动多页,需要通过一个变量来控制是否滚动
        deltaY: 0, // 返回鼠标滚轮的垂直滚动量,保存的鼠标滚动事件的deleteY,用来判断是往下还是往上滚
      },
      plate: [],
      features: [{ title: "", url: "", imgUrl: "" }],
    };
  },
  components: {},
  created() {
    this.getInfo();
    this.getFeatures();
  },
  mounted() {
    this.getClientHeight();
    this.getClientWidth();
  },
  methods: {
    getInfo() {
      new Promise((resolve, reject) => {
        api
          .ajaxPost("meeting/findOrganizer", {
            _id: this._id,
          })
          .then((result) => {
            if (result.data.state === "success") {
              this.plate = result.data.data.orgs;
            }
          });
      });
    },
    getFeatures() {
      new Promise((resolve, reject) => {
        api
          .ajaxPost("meeting/findFeature", {
            _id: this._id,
          })
          .then((result) => {
            if (result.data.state === "success") {
              this.features = result.data.data.features;
            }
          });
      });
    },
    getClientHeight() {
      //获取浏览器可视区域高度
      this.clientHeight = `${document.documentElement.clientHeight}`;
      this.clientHeight = this.clientHeight - this.menuHeight;
    },
    getClientWidth() {
      //获取浏览器可视区域宽度
      this.clientWidth = `${document.documentElement.clientWidth}`;
      if (this.clientWidth <= 999) {
        //上面的导航条变成手机版本的了
      }
    },
    next() {
      // 往下切换
      let len = 4; // 页面的个数
      if (this.fullpage.current + 1 <= len) {
        // 如果当前页面编号+1 小于总个数,则可以执行向下滑动
        // this.fullpage.current += 1; // 页面+1
        this.move(this.fullpage.current + 1); // 执行切换
      }
    },
    pre() {
      // 往上切换
      if (this.fullpage.current - 1 > 0) {
        // 如果当前页面编号-1 大于0,则可以执行向下滑动
        // this.fullpage.current -= 1;// 页面+1
        this.move(this.fullpage.current - 1); // 执行切换
      }
    },
    move(index) {
      this.fullpage.isScrolling = true; // 为了防止滚动多页,需要通过一个变量来控制是否滚动
      this.directToMove(index); //执行滚动
      setTimeout(() => {
        //这里的动画是1s执行完,使用setTimeout延迟1s后解锁
        this.fullpage.isScrolling = false;
      }, 1010);
    },
    directToMove(index) {
      let height = this.$refs["fullPage"].clientHeight; //获取屏幕的宽度
      let scrollPage = this.$refs["fullPageContainer"]; // 获取执行tarnsform的元素
      let scrollHeight; // 计算滚动的告诉,是往上滚还往下滚
      scrollHeight = -(index - 1) * height + "px";
      // scrollHeight= -(index - 1) * (this.clientHeight-60) + "px";
      if (this.fullpage.current != index) {
        scrollPage.style.transform = `translateY(${scrollHeight})`;
        this.fullpage.current = index;
        this.$emit("currnet", this.fullpage.current);
      }
    },
    clickToWheel(current, index) {
      if (current != index) {
        let scrollPage = this.$refs["fullPageContainer"];
        let scrollHeight; // 计算滚动的告诉,是往上滚还往下滚
        if (index == 1) {
          scrollHeight = "0px";
        } else {
          scrollHeight = -((index - 1) * this.clientHeight) + "px";
        }
        this.fullpage.current = index;
        this.$emit("currnet", this.fullpage.current);
        scrollPage.style.transform = `translateY(${scrollHeight})`;
      }
    },
    mouseWheelHandle(event) {
      // 监听鼠标监听
      // 添加冒泡阻止
      let evt = event || window.event;
      if (evt.stopPropagation) {
        evt.stopPropagation();
      } else {
        evt.returnValue = false;
      }
      if (this.fullpage.isScrolling) {
        // 判断是否可以滚动
        return false;
      }
      let e = event.originalEvent || event;
      this.fullpage.deltaY = e.deltaY || e.detail; // Firefox使用detail
      if (this.fullpage.deltaY > 0) {
        this.next();
      } else if (this.fullpage.deltaY < 0) {
        this.pre();
      }
    },
  },
};
</script>
<style lang="less" scoped>
.fullPage {
  height: calc(~"100vh - 60px"); //一定要设置,保证占满100%;剪掉头部导航
  overflow: hidden; //一定要设置,多余的先隐藏
  //  background-color: rgb(189, 211, 186);
}
.fullPageContainer {
  width: 100%;
  height: 100%;
  transition: all linear 0.5s;
}
.kxb-slide {
  box-sizing: border-box;
  overflow: hidden;
  .one-div {
    text-align: center;
    img {
      width: 1062px;
      height: 682px;
    }
  }
}
@keyframes likes {
  0% {
    transform: scale(1);
  }
  50% {
    transform: scale(0.96);
  }
  to {
    transform: scale(1);
  }
}

.kxb-center-div {
  padding-left: 20%;
  padding-right: 20%;
  height: 100%;
}

#slide1 {
  // background-color: red;
  background: url(http://pics.sciencemate.com/public/upload/files/meeting/202105/othersbg_2021052910415120210530111448.jpg)
    center left/cover no-repeat;
  display: flex;
  align-items: center;
  justify-content: center; //水平垂直都居中
  .anima {
    animation: likes 6s infinite ease-in-out alternate;
  }
}
#slide2 {
  // background-color: blue;
  background: url(http://pics.sciencemate.com/public/upload/files/meeting/202105/othersbg_2021052910415120210530111448.jpg)
    center left/cover no-repeat;
}
#slide3 {
  // background-color: yellow;
  background: url(http://pics.sciencemate.com/public/upload/files/meeting/202105/othersbg_2021052910415120210530111448.jpg)
    center left/cover no-repeat;
}
#slide4 {
  // background-color: green;
  background: url(http://pics.sciencemate.com/public/upload/files/meeting/202105/othersbg_2021052910415120210530111448.jpg)
    center left/cover no-repeat;
}

.kxb-font-30 {
  font-size: 30px;
}
.mobile {
  background: url(http://pics.sciencemate.com/public/upload/files/meeting/202105/othersbg_2021052910415120210530111448.jpg)
    center left/cover no-repeat;

  .center-div {
    padding-left: 10%;
    padding-right: 10%;
    height: 100%;
  }
}
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值