ReactJS kullanarak fare kaydırma düğmesi aşağı olayını nasıl algılarım?

0

Soru

React'in onMouseDown olayını kullanarak" mouse3 " / fare kaydırma düğmesi aşağı olayını nasıl algılayacağımı anlamakta sorun yaşıyorum.

Bazı öğelerde onMouseDown kullanıyorum:

  <Menu.Item
    icon={<DashboardOutlined style={{ fontSize: '21px' }} />}
    onClick={onClickDash}
    onMouseDown={handleEvent}
  >
    Dashboard
  </Menu.Item>

Ve sonra handleEvent:

const handleEvent = (event) => {
  if (event.type === 'mousedown') {
    console.log('MOUSE DOWN', event);
  } else {
    console.log('MOUSE UP', event);
  }
};

Sorun şu ki, özellikle fare kaydırma düğmesini tespit etmenin bir yolunu bulamıyorum. Nasıl tespit edebilirim? Resmi mozilla dokümanları da bir örnek sunmuyor.

events javascript mouse reactjs
2021-11-23 19:42:22
1

En iyi cevabı

-2

Yasal Uyarı-Bu yazının yazıldığı sırada yalnızca Chrome tarayıcısını hedefliyordum.

Bir kullanıcı kaydırma yaptığında, varsayılan olarak ever browser'da yerleşik bir olay olan bir DOM kaydırma olayı tetiklenir. React, kaydırma olayı tetiklendiğinde herhangi bir bileşende çağrılabilen kendi yöntemi olan Onscroll'a sahiptir. Bu onScroll yöntemini kullanarak, bir kullanıcı kaydırma işleminin sonucu olarak bir işlevi çağırabiliriz.

Örnek;

<SomeComponent onScroll={someMeothod} />

Herhangi bir DOM olayında olduğu gibi, olay hakkında yararlı bilgiler sağlayabilecek özelliklere sahip bir olay nesnesi oluşturulur ve söz konusu olay öğesi de ilişkilidir. Bir kullanıcının kaydırdığı her piksel için bir kaydırma olayı tetiklenir. Bu durumda, yalnızca kullanıcının içeriğimizi içeren üst öğenin sonuna ne zaman kaydırdığını belirlemekle ilgileniriz.

Kullanıcı bir kapsayıcının sonuna kaydırıldığında hesaplama

Components sınıfında bir işlevi çağıran içerik içeren öğeye bir onScroll yöntemi ekleyin:

<div className="content-container" onScroll={this.handleScroll}>
  // Your content
</div>

Ardından kaydırma olayını işlemek için handleScroll işlevini oluşturun:

class MyComponent extends React.Component {
  handleScroll = e => {
    let element = e.target
    if (element.scrollHeight - element.scrollTop === element.clientHeight) {
      // do something at end of scroll
    }
  }
  render() {
    return (
      <div className="content-container" onScroll={this.handleScroll}>
        // Your content
      </div>
    )
  }
}

İşleri biraz daha net hale getirmek için handleScroll yönteminde neler olup bittiğini parçalayalım

e-bu olayın kendisine karşılık gelir. Çalıştığımız kaydırma olayıyla ilgili özelliklere sahip tarayıcı tarafından oluşturulan bir nesnedir.

let element = e. target-bu, olayı (e.target) kullanarak gönderen öğeyi bulmamızı ve kodun geri kalanında kullanabileceğimiz değişkene atamamızı sağlar.

Artık (kodumuz) hangi öğenin kaydırıldığını biliyoruz ve onu yöntemler kapsamımızdaki bir değişkene atadık, tarayıcı tarafından verilen öğenin özelliklerine erişebilir ve kullanıcının sonuna kadar kaydırıp kaydırmadığını hesaplayabiliriz.

öğe.scrollHeight-bu, css taşması nedeniyle ekranda görünmeyen içerik de dahil olmak üzere öğe içeriğinin piksel cinsinden yüksekliğidir.

öğe.scrollTop-bir öğenin içeriğinin dikey olarak kaydırıldığı piksel cinsinden yükseklik.

öğe.clientHeight-öğenin kaydırılabilir kısmının piksel cinsinden yüksekliği.

Yukarıdaki özellikleri kullanarak, kullanıcının scrollHeight ve scrollTop öğesinin negatif toplamını clientHeight ile karşılaştırarak öğenin altına kaydırıp kaydırmadığını hesaplayabiliriz. Bunlar aynıysa, kullanıcı öğenin altına kaydırdı. Bunu bir kutuya sararak if Açıklama Bu fonksiyon içinde if deyimini kapsamı sadece kullanıcı dıv sonuna kaydırılan zaman çalıştırılırsa ve biz gerçekten emin miyiz if koşul.

2021-11-23 20:22:07

Sorduğum şey bu değil, tekerlek / kaydırma olayı değil, fare kaydırma düğmesiyle ilgili "onMouseDown" olayını sordum.
Ericson Willians

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................