国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue 實現(xiàn)釘釘官網(wǎng)的輪播圖下面功能滾動排版CSS效果

這篇具有很好參考價值的文章主要介紹了vue 實現(xiàn)釘釘官網(wǎng)的輪播圖下面功能滾動排版CSS效果。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

  • 最近在寫PC端的業(yè)主端時候,發(fā)現(xiàn)傳統(tǒng)的菜單欄比較丑,也不符合實際應(yīng)用(功能頁面并不多-展示為主)

  • 偶然發(fā)現(xiàn)釘釘官網(wǎng)的效果挺有意思的,想著把這個效果復(fù)原過來,然后夸夸搜索了一番。

  • 經(jīng)過一頓的cv打法,加上修修補(bǔ)補(bǔ)把大概的效果整了出來,時間關(guān)系最基礎(chǔ)的,剩下的可以自己補(bǔ)充

地址演示:演示效果地址

視頻效果

官網(wǎng)效果

細(xì)節(jié)

1.代碼中第二屏是300vh是3倍,試過很多遍,3倍滾動時效果最好不建議改,建議不顯示滾動條(src/styles/index.scss)效果最好

::-webkit-scrollbar {
? // 隱藏滾動條
? display: none; /* Chrome Safari */
}

2.代碼中第二屏的3個class類名最好不要改,因為是根據(jù)這幾個類名在獲取DOM操作

3.代碼中第二屏中 list-itme中的data-order="0"等于幾(從0開始)控制動畫盒子順序,可以自己調(diào)試看效果

完整代碼-可復(fù)制

<template>
  <div class="conter">
 ?  <!-- 第一屏 -->
 ?  <div class="flatly-itemone">
 ?  </div>
 ?  <!-- 第二屏 -->
 ?  <div class="playground">
 ? ?  <div class="animation-container">
 ? ? ?  <div class="titlemanifesto" v-if="titlemanifesto">
 ? ? ? ?  生活意義-坦然面對生活并且接受她的事與愿違
 ? ? ?  </div>
 ? ? ?  <!-- data-order="0" 數(shù)字是控制每一項動畫順序 -->
 ? ? ?  <div class="list">
 ? ? ? ?  <div data-order="0" class="list-item"></div>
 ? ? ? ?  <div data-order="1" class="list-item"></div>
 ? ? ? ?  <div data-order="2" class="list-item"></div>
 ? ? ? ?  <div data-order="2" class="list-item"></div>
 ? ? ? ?  <div data-order="1" class="list-item"></div>
 ? ? ? ?  <div data-order="0" class="list-item"></div>
 ? ? ? ?  <div data-order="0" class="list-item"></div>
 ? ? ? ?  <div data-order="1" class="list-item"></div>
 ? ? ? ?  <div data-order="2" class="list-item"></div>
 ? ? ? ?  <div data-order="2" class="list-item"></div>
 ? ? ? ?  <div data-order="1" class="list-item"></div>
 ? ? ? ?  <div data-order="0" class="list-item"></div>
 ? ? ?  </div>
 ? ?  </div>
 ?  </div>
  </div>
</template>
?
<script>
export default {
  name: 'Dashboard',
  data() {
 ?  return {
 ? ?  animataionMap: new Map(),
 ? ?  // 文字顯示
 ? ?  titlemanifesto: false
 ?  }
  },
  created() {},
  mounted() {
 ?  this.updateMap(),
 ? ?  this.updateStyle(),
 ? ?  window.addEventListener('scroll', this.updateStyle)
  },
  methods: {
 ?  // 得出動畫節(jié)點數(shù)值
 ?  createAnimation(scrollStart, scrollEnd, valueStart, valueEnd) {
 ? ?  return (scroll) => {
 ? ? ?  if (scroll <= scrollStart) {
 ? ? ? ?  return valueStart
 ? ? ?  }
?
 ? ? ?  if (scroll >= scrollEnd) {
 ? ? ? ?  return valueEnd
 ? ? ?  }
?
 ? ? ?  return (
 ? ? ? ?  valueStart +
 ? ? ? ?  ((valueEnd - valueStart) * (scroll - scrollStart)) /
 ? ? ? ? ?  (scrollEnd - scrollStart)
 ? ? ?  )
 ? ?  }
 ?  },
?
 ?  getDomAnimation(scrollStart, scrollEnd, dom) {
 ? ?  const list = document.querySelector('.list')
 ? ?  scrollStart = scrollStart + dom.dataset.order * 300
 ? ?  const opacityAnimation = this.createAnimation(
 ? ? ?  scrollStart,
 ? ? ?  scrollEnd,
 ? ? ?  0,
 ? ? ?  1
 ? ?  )
 ? ?  // 基于當(dāng)前滾動計算得出的透明度
 ? ?  const opacity = function (scroll) {
 ? ? ?  return opacityAnimation(scroll)
 ? ?  }
?
 ? ?  const scaleAnimation = this.createAnimation(
 ? ? ?  scrollStart,
 ? ? ?  scrollEnd,
 ? ? ?  0.3,
 ? ? ?  1
 ? ?  )
?
 ? ?  const xAnimation = this.createAnimation(
 ? ? ?  scrollStart,
 ? ? ?  scrollEnd,
 ? ? ?  list.clientWidth / 2 - dom.offsetLeft - dom.clientWidth / 2,
 ? ? ?  0
 ? ?  )
 ? ?  const yAnimation = this.createAnimation(
 ? ? ?  scrollStart,
 ? ? ?  scrollEnd,
 ? ? ?  list.clientHeight / 2 - dom.offsetTop - dom.clientHeight / 2,
 ? ? ?  0
 ? ?  )
?
 ? ?  const transform = function (scroll) {
 ? ? ?  return `translate(${xAnimation(scroll)}px,${yAnimation(
 ? ? ? ?  scroll
 ? ? ?  )}px)  scale(${scaleAnimation(scroll)})`
 ? ?  }
?
 ? ?  return {
 ? ? ?  opacity,
 ? ? ?  transform
 ? ?  }
 ?  },
?
 ?  updateMap() {
 ? ?  const items = document.querySelectorAll('.list-item')
 ? ?  const playGround = document.querySelector('.playground')
 ? ?  this.animataionMap.clear()
 ? ?  const playGroundRect = playGround.getBoundingClientRect()
 ? ?  // 開始動畫的距離
 ? ?  const scrollStart = playGroundRect.top + window.scrollY
 ? ?  // 結(jié)束動畫的距離  相當(dāng)于playground的高度
 ? ?  const scrollEnd =
 ? ? ?  playGroundRect.bottom + window.scrollY - window.innerHeight
 ? ?  for (const item of items) {
 ? ? ?  this.animataionMap.set(
 ? ? ? ?  item,
 ? ? ? ?  this.getDomAnimation(scrollStart, scrollEnd, item)
 ? ? ?  )
 ? ?  }
 ? ?  // 打開遮罩層
 ? ?  // this.listmsk = true
 ?  },
?
 ?  updateStyle() {
 ? ?  const scroll = window.scrollY
 ? ?  // 獲取元素-改變背景顏色
 ? ?  const list = document.querySelector('.list')
 ? ?  if (scroll > 2200 && scroll < 2862) {
 ? ? ?  console.log('打開遮罩層')
 ? ? ?  list.style.backgroundColor = 'rgba(23, 26, 29, 0.9)'
 ? ? ?  // 顯示文字
 ? ? ?  this.titlemanifesto = true;
 ? ?  } else {
 ? ? ?  console.log('關(guān)閉遮罩層')
 ? ? ?  list.style.backgroundColor = '#063868'
 ? ? ?  // 隱藏文字
 ? ? ?  this.titlemanifesto = false
 ? ?  }
 ? ?  console.log('scroll', scroll)
 ? ?  for (let [dom, value] of this.animataionMap) {
 ? ? ?  for (const cssProp in value) {
 ? ? ? ?  dom.style[cssProp] = value[cssProp](scroll)
 ? ? ?  }
 ? ?  }
 ?  }
  }
}
</script>
<style lang="scss" scoped>
.conter {
  .flatly-itemone {
 ?  height: 90vh;
    background-color: #fff;
  }
  .playground {
 ?  height: 310vh;
 ?  background-color: #063868;
 ?  position: relative;
 ?  .animation-container {
 ? ?  display: flex;
 ? ?  position: sticky;
 ? ?  top: 0;
 ? ?  height: 100vh;
 ? ?  text {
 ? ? ?  z-index: 999;
 ? ? ?  color: red;
 ? ?  }
 ? ?  // 標(biāo)題
 ? ?  .titlemanifesto {
 ? ? ?  height: 50px;
 ? ? ?  width: 1000px;
 ? ? ?  position: absolute;
 ? ? ?  left: 50%;
 ? ? ?  top: 23%;
 ? ? ?  transform: translate(-50%);
 ? ? ?  // background-color: skyblue;
 ? ? ?  text-align: center;
 ? ? ?  color: #fff;
 ? ? ?  font-family: PingFangSC-Medium;
 ? ? ?  font-weight: 500;
 ? ? ?  font-size: 30px;
 ? ? ?  line-height: 50px;
 ? ?  }
 ? ?  .list {
 ? ? ?  height: 550px;
 ? ? ?  width: 1000px;
 ? ? ?  position: absolute;
 ? ? ?  left: 50%;
 ? ? ?  top: 50%;
 ? ? ?  transform: translate(-50%, -28%);
 ? ? ?  display: flex;
 ? ? ?  flex-wrap: wrap;
 ? ? ?  align-items: center;
 ? ? ?  border-radius: 10px;
 ? ? ?  padding: 15px 20px;
 ? ? ?  opacity: 0.8;
 ? ? ?  .list-item {
 ? ? ? ?  width: 100px;
 ? ? ? ?  height: 155px;
 ? ? ? ?  border-radius: 10px;
 ? ? ? ?  background-color: #fff;
 ? ? ? ?  margin: 50px 30px;
 ? ? ? ?  &:nth-child(2n - 1) {
 ? ? ? ? ?  background-color: skyblue;
 ? ? ? ?  }
 ? ? ? ?  &:nth-child(2n) {
 ? ? ? ? ?  background-color: rgb(111, 245, 111);
 ? ? ? ?  }
 ? ? ? ?  &:nth-child(3n) {
 ? ? ? ? ?  background-color: orange;
 ? ? ? ?  }
 ? ? ?  }
 ? ?  }
 ?  }
  }
}
</style>

總結(jié):

經(jīng)過這一趟流程下來相信你也對 vue 實現(xiàn)釘釘官網(wǎng)的輪播圖下面功能滾動排版CSS效果 有了初步的深刻印象,但在實際開發(fā)中我 們遇到的情況肯定是不一樣的,所以我們要理解它的原理,萬變不離其宗。加油,打工人!

什么不足的地方請大家指出謝謝 -- 風(fēng)過無痕文章來源地址http://www.zghlxwxcb.cn/news/detail-508087.html

到了這里,關(guān)于vue 實現(xiàn)釘釘官網(wǎng)的輪播圖下面功能滾動排版CSS效果的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 前端Vue自定義簡單實用輪播圖封裝組件 快速實現(xiàn)輪播圖

    前端Vue自定義簡單實用輪播圖封裝組件 快速實現(xiàn)輪播圖

    前端Vue自定義簡單實用輪播圖封裝組件 快速實現(xiàn)輪播圖, 閱讀全文下載完整代碼請關(guān)注微信公眾號: 前端組件開發(fā) 效果圖如下: 使用方法 HTML代碼實現(xiàn)部分

    2024年02月10日
    瀏覽(36)
  • vue實現(xiàn)輪播圖效果

    vue實現(xiàn)輪播圖效果

    1,實現(xiàn)輪左右按鍵輪播效果,采用數(shù)組下標(biāo)指定輪播圖片,定義一個dindex與index下標(biāo)相比較。 2,創(chuàng)建輪播的圖片的數(shù)組 3,實現(xiàn)下方圓點點擊輪播圖片,采用動態(tài)綁定和數(shù)組的動態(tài)樣式實現(xiàn)未點擊的白色和點擊的黑色 dindex與index相比較兩值相不一致就是白色反之為黑色 4,實現(xiàn)

    2024年02月11日
    瀏覽(31)
  • Vue 實現(xiàn)輪播圖功能

    Vue 實現(xiàn)輪播圖功能

    Vue 是一款流行的前端框架,它提供了一系列的工具和組件,使得開發(fā)者可以更加便捷地創(chuàng)建交互式的 Web 應(yīng)用程序。輪播圖是 Web 應(yīng)用程序中常見的一種交互式組件,可以用來展示圖片、新聞、廣告等內(nèi)容。在 Vue 中,我們可以使用第三方組件庫或自己編寫代碼來實現(xiàn)輪播圖功

    2024年02月05日
    瀏覽(19)
  • Vue2+swiper基礎(chǔ)實現(xiàn)輪播圖

    Vue2+swiper基礎(chǔ)實現(xiàn)輪播圖

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 swiper的基礎(chǔ)使用 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 Swiper中文網(wǎng)-輪播圖幻燈片js插件,H5頁面前端開發(fā) ? ? ? ? 注意:我們用的是vue2所以推薦大家下載swiper5版本 示例: 查看安裝是否完成

    2024年01月16日
    瀏覽(91)
  • 記錄--用 Vue 實現(xiàn)原神官網(wǎng)的角色切換效果

    記錄--用 Vue 實現(xiàn)原神官網(wǎng)的角色切換效果

    為了更好的了解原神角色,我模仿官網(wǎng)做了一個角色切換效果,在做的過程當(dāng)中也總結(jié)了一些技術(shù)點。 為了讓大家更好的體驗,我兼容了 PC 端和移動端,建議在 PC 端查看效果更佳。接下來就為大家簡單的分享一下! 話不多說,原神啟動!! 先看一下官網(wǎng)的效果: ys.mihoyo

    2024年02月09日
    瀏覽(15)
  • vue3 實現(xiàn)門戶網(wǎng)站頁面鼠標(biāo)滾輪控制頁面上下滾動---類似輪播圖

    案例參考:首頁_CNESA 儲能研究平臺 //監(jiān)聽鼠標(biāo)滾動事件 ?window.addEventListener(\\\'mousewheel\\\', debounce(methodB,300), true)||window.addEventListener(\\\"DOMMouseScroll\\\",debounce(methodB,300),false) const debounce = (func, wait) ={ ? ? ? ? let timeout; ? ? ? ? return ?function() { ? ? ? ? ? ? let context = this; ? ? ? ? ? ?

    2024年02月12日
    瀏覽(172)
  • vue卡片輪播圖

    vue卡片輪播圖

    我的項目是vue3的,用的swiper8

    2024年02月14日
    瀏覽(19)
  • vue中swiper輪播圖的使用

    說明:導(dǎo)入相應(yīng)js引css import \\\"Swiper\\\" from \\\"swiper\\\" import \\\"swiper/css/swiper.css\\\"; import \\\"swiper/js/swiper\\\"; 說明:必要的結(jié)構(gòu)使用;直接封裝成一個組件? 說明:(頁面當(dāng)中務(wù)必要有結(jié)構(gòu));注釋已經(jīng)寫入代碼。 第一:可以解決獲取數(shù)據(jù)在Swiper實例之前;第二:可以解決v-for遍歷完后在Swiper之

    2024年02月14日
    瀏覽(27)
  • 前端Vue自定義輪播圖視頻播放組件 仿京東商品詳情輪播圖視頻Video播放效果 可圖片預(yù)覽

    前端Vue自定義輪播圖視頻播放組件 仿京東商品詳情輪播圖視頻Video播放效果 可圖片預(yù)覽

    隨著技術(shù)的發(fā)展,開發(fā)的復(fù)雜度也越來越高,傳統(tǒng)開發(fā)方式將一個系統(tǒng)做成了整塊應(yīng)用,經(jīng)常出現(xiàn)的情況就是一個小小的改動或者一個小功能的增加可能會引起整體邏輯的修改,造成牽一發(fā)而動全身。通過組件化開發(fā),可以有效實現(xiàn)單獨開發(fā),單獨維護(hù),而且他們之間可以隨

    2024年02月15日
    瀏覽(27)
  • vue項目中使用vant輪播圖組件(桌面端)

    vue項目中使用vant輪播圖組件(桌面端)

    vue使用vant輪播圖組件(桌面端) 2.1 Visual Studio Code 1.75.0 2.2 chrome瀏覽器 2.3 node v18.14.0 3.1 安裝環(huán)境 3.2 添加代碼 3.3 結(jié)果展示 4.1 安裝環(huán)境 先安裝包 然后桌面端適配 4.2 添加代碼 注冊組件 相比于官方給的代碼,有兩個方面需要注意,一個是適配桌面端,還有一個就是我以為vant組

    2024年02月04日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包