亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

自定義菜單項不可點擊

自定義菜單項不可點擊

呼喚遠方 2021-11-04 17:42:18
我需要菜單項看起來像現在一樣(就像在 iOS 中一樣),但到目前為止我有兩個大問題。首先,當我嘗試單擊其中一個鏈接時,由于我的線性漸變,這是不可能的。其次,當我單擊向下箭頭瀏覽其他菜單項時,所有漸變都不起作用。我怎樣才能讓它正常工作?我也做了一個codepen此 document.querySelectorAll('.slide').forEach(function (next) {   next.addEventListener('click', function () {     var container = this.parentElement.querySelector('.select');     sideScroll(container, 'bottom', 20, 25, 15);   }); });document.querySelectorAll('.slideBack').forEach(function (back) {  back.addEventListener('click', function () {    var container = this.parentElement.querySelector('.select');    sideScroll(container, 'top', 20, 25, 15);  });});function sideScroll(element, direction, speed, distance, step) {  scrollAmount = 0;  var slideTimer = setInterval(function () {    if (direction == 'top') {      element.scrollTop -= step;    } else {      element.scrollTop += step;    }    scrollAmount += step;    if (scrollAmount >= distance) {      window.clearInterval(slideTimer);    }  }, speed);}* {  background: #80acdc;}.larger {   height: 100vh;   display: flex;   justify-content: center;   align-items: center;} .larger .select {   width: 240px;   height: 270px;   display: flex;   flex-direction: column;   text-align: center;   overflow-y: hidden;   -ms-overflow-style: scroll;   scrollbar-width: none;   position: relative;} .larger .select::after {   content: '';   position: absolute;   display: block;   width: 100%;   height: 100%;   top: 0;   left: 0;   background-image: linear-gradient(#80acdc, transparent, #80acdc);} .larger .select a {   color: white;   margin: 3.5px 0;} .larger .select a:first-child {   margin-top: 0;} .larger #slide {   position: absolute;   left: 47%;   bottom: 38px;   color: #fff;   font-size: 15px;   cursor: pointer;} .larger #slideBack {   position: absolute;   top: 38px;   left: 47%;   color: #fff;   font-size: 15px;   cursor: pointer;}
查看完整描述

1 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

  1. 對于允許與底層元素交互的漸變,您可以使用 pointer-events: none

  2. 您的漸變是絕對定位的,top: 0因此它與滾動一起使用。為了解決這個問題,您可以將漸變的位置設置為fixed(但隨后它將被拉伸到 vewport 的大小)。更好的方法是用另一個容器包裝選項列表,這樣滾動就不會影響漸變位置..像這樣:

<div class="select-wrap">

  <div class="select">

    ...

  </div>

</div>

.larger .select-wrap {

  width: 240px;

  height: 270px;

}


.larger .select-wrap .select {

  height: 100%;

  display: flex;

  flex-direction: column;

  text-align: center;

  overflow-y: hidden;

  -ms-overflow-style: scroll;

  scrollbar-width: none;

  position: relative;

}


.larger .select-wrap::after {

  content: '';

  position: absolute;

  display: block;

  width: 100%;

  height: 100%;

  top: 0;

  left: 0;

  background-image: linear-gradient(#80acdc, transparent, #80acdc);

  pointer-events: none; /* this allows for the mouse clicks go through */

}

document.querySelectorAll('.slide').forEach(function(next) {

  next.addEventListener('click', function() {

    var container = this.parentElement.querySelector('.select');

    sideScroll(container, 'bottom', 20, 25, 15);

  });

});


document.querySelectorAll('.slideBack').forEach(function(back) {

  back.addEventListener('click', function() {

    var container = this.parentElement.querySelector('.select');

    sideScroll(container, 'top', 20, 25, 15);

  });

});


function sideScroll(element, direction, speed, distance, step) {

  scrollAmount = 0;

  var slideTimer = setInterval(function() {

    if (direction == 'top') {

      element.scrollTop -= step;

    } else {

      element.scrollTop += step;

    }

    scrollAmount += step;

    if (scrollAmount >= distance) {

      window.clearInterval(slideTimer);

    }

  }, speed);

}

* {

  background: #80acdc;

}


.larger {

  height: 100vh;

  display: flex;

  justify-content: center;

  align-items: center;

}


.larger .select-wrap {

  width: 240px;

  height: 270px;

}


.larger .select-wrap .select {

  height: 100%;

  display: flex;

  flex-direction: column;

  text-align: center;

  overflow-y: hidden;

  -ms-overflow-style: scroll;

  scrollbar-width: none;

  position: relative;

}


.larger .select-wrap::after {

  content: '';

  position: absolute;

  display: block;

  width: 100%;

  height: 100%;

  top: 0;

  left: 0;

  background-image: linear-gradient(#80acdc, transparent, #80acdc);

  pointer-events: none;

}


.larger .select a {

  color: white;

  margin: 3.5px 0;

}


.larger .select a:first-child {

  margin-top: 0;

}


.larger #slide {

  position: absolute;

  left: 47%;

  bottom: 38px;

  color: #fff;

  font-size: 15px;

  cursor: pointer;

}


.larger #slideBack {

  position: absolute;

  top: 38px;

  left: 47%;

  color: #fff;

  font-size: 15px;

  cursor: pointer;

}

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css">


<div class="container">

  <div class="row">

    <div class="col-lg-3">

      <div class="larger">

        <div class="select-wrap">

          <div class="select">

            <a href="#">Action Lorem </a>

            <a href="#">Test Text</a>

            <a href="#">Action Lorem</a>

            <a href="#">Test Text</a>

            <a href="#">Action Lorem</a>

            <a href="#">Test Text</a>

            <a href="#">Action Lorem</a>

            <a href="#">Test Text</a>

            <a href="#">Action Lorem</a>

            <a href="#">Test Text</a>

            <a href="#">Action Lorem</a>

            <a href="#">Test Text</a>

            <a href="#">Action Lorem</a>

            <a href="#">Test Text</a>

            <a href="#">Action Lorem</a>

            <a href="#">Test Text</a>

          </div>

        </div>

        <i id="slideBack" class="slideBack fas fa-chevron-up"></i>

        <i id="slide" class="slide fas fa-chevron-down"></i>

      </div>

    </div>

  </div>

</div>


查看完整回答
反對 回復 2021-11-04
  • 1 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號