मैं खिड़की के शीर्ष से एक सरणी में divs की दूरी प्राप्त करने की कोशिश कर रहा हूं लेकिन त्रुटि प्राप्त कर रहा हूं "player.offset एक फ़ंक्शन नहीं है"। मैं गलत कहां जा रहा हूं, किसी भी मदद की बहुत सराहना की जाएगी।

const players = Array.from(document.querySelectorAll('.js-player'));
        
$(window).on('scroll', function () {
    let scrollTop     = $(window).scrollTop();
    console.log(scrollTop)
    players.forEach(function(player) {
        let playerOffset = player.offset().top,
            distance      = (playerOffset - scrollTop);
        console.log(playerOffset, distance)
    })
});
.js-player {
  height: 100px;
  width: 100px;
  margin: 100px;
  background-color: red
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="js-player"></div>
<div class="js-player"></div>
<div class="js-player"></div>
0
CalAlt 29 मार्च 2018, 17:14

3 जवाब

सबसे बढ़िया उत्तर

.offset() एक jQuery फ़ंक्शन है, देखें http://api.jquery. कॉम/ऑफ़सेट/.

आपको या तो खिलाड़ी वैरिएबल को jQuery में लपेटना चाहिए और .offset().top को इस तरह कॉल करना चाहिए:

let playerOffset = $(player).offset().top;

या मूल HTMLElement offsetTop मान का उपयोग करें, यहां देखें https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop

let playerOffset = player.offsetTop;
1
Anna Tolochko 29 मार्च 2018, 14:25

आपको डीओएम तत्व पर ऑफ़सेट का उपयोग करना होगा, ऐसा कुछ काम करना चाहिए:

$('.js-player').offset().top - $('.js-player').offset().top
0
Léo R. 29 मार्च 2018, 14:23

player एक जेएस एलिमेंट है। offset() एक jQuery फ़ंक्शन है। इसलिए आपको एक jQuery ऑब्जेक्ट की आवश्यकता है:

 $(player).offset().top

हालांकि लंबी अवधि में आपको या तो शुद्ध जेएस या शुद्ध jQuery का उपयोग करना चाहिए, लेकिन उन्हें मिश्रण न करें, जो केवल भ्रम पैदा करता है (जैसे इस मामले में)।

1
Jonas Wilms 29 मार्च 2018, 14:16