Cara mendapatkan ketinggian dom dalam uniapp adalah tidak tepat
Kata Pengantar
Dalam proses membangunkan program kecil menggunakan uniapp, kita sering menghadapi situasi di mana kita perlu mendapatkan ketinggian elemen DOM. Walau bagaimanapun, kadangkala kita dapati ketinggian yang diperoleh melalui uni.createSelectorQuery().select().boundingClientRect() adalah tidak tepat. Jadi bagaimana keadaan ini timbul? Bagaimana untuk menyelesaikannya? Artikel ini akan menerangkannya kepada anda secara terperinci.
Masalah berlaku
Mula-mula, mari kita ulang masalah itu. Sebagai contoh, dalam templat mudah di bawah, kita perlu mendapatkan ketinggian elemen kanak-kanak content
.
<template> <view class="container"> <view class="content" ref="content">内容区域</view> </view> </template>
Kita boleh mendapatkan ketinggian elemen content
dengan cara berikut:
mounted() { uni.createSelectorQuery().in(this).select('.content').boundingClientRect(rect => { console.log(rect.height) }).exec() }
Supaya kita dapat melihat ketinggian content
dalam konsol.
Walau bagaimanapun, apabila kita menambah beberapa gaya pada elemen content
, seperti:
.content { margin: 10px; padding: 20px; }
Jalankan program sekali lagi, kita akan mendapati ketinggian output konsol tidak konsisten dengan ketinggian kami jangkakan, kurang sedikit daripada Ketinggian jangkaan kami. Inilah masalah "pemerolehan ketinggian DOM yang tidak tepat" yang sering kita hadapi.
Analisis Punca
Jadi, apakah punca masalah tersebut? Selepas menyemak data, kita boleh mengetahui sebab berikut:
1 Menggunakan gaya ini sahaja akan menyebabkan ralat pengiraan ketinggian dan menghasilkan tepi putih.
2. Ini kerana margin
dan padding
menempati ruang yang berbeza untuk margin
tidak menempati ruang, manakala padding
menduduki ruang yang berbeza.
Memandangkan boundingClientRect
dipengaruhi oleh padding
dan border
, manakala margin
tidak terjejas, ketinggian boundingClientRect
akan menjadi kurang apabila mendapat ketinggian padding
.
Penyelesaian
Sekarang kita telah memahami punca masalah, penyelesaiannya sedia untuk keluar. Kita boleh menyelesaikan masalah ini melalui kaedah berikut:
1 Dapatkan ketinggian elemen induk melalui uni.createSelectorQuery().exec()
, dan kemudian dapatkan getComputedStyle
dan padding
elemen anak melalui border
hingga. hitung ketinggian sebenar unsur kanak-kanak.
mounted() { uni.createSelectorQuery().in(this).select('.container').boundingClientRect(rect => { const styles = getComputedStyle(this.$refs.content.$el) const paddingTop = parseInt(styles.paddingTop) const paddingBottom = parseInt(styles.paddingBottom) const borderTop = parseInt(styles.borderTopWidth) const borderBottom = parseInt(styles.borderBottomWidth) console.log(rect.height - paddingTop - paddingBottom - borderTop - borderBottom) }).exec() }
2. Selesaikan masalah dengan menambahkan gaya box-sizing:border-box
pada kedua-dua elemen anak dan elemen induk.
.container, .content { box-sizing: border-box; margin: 10px; padding: 20px; }
Kita perlu memberi perhatian kepada dua perkara di sini:
(1) box-sizing
Gaya perlu ditambah kepada dua elemen.
(2) Anda perlu memberi perhatian sama ada selang antara elemen anak dan elemen induk adalah salah.
Kesimpulan
Melalui kaedah di atas, kita boleh menyelesaikan masalah ketinggian DOM yang tidak tepat yang diperoleh oleh uniapp. Sila pilih untuk menggunakannya mengikut situasi khusus anda. Saya harap artikel ini dapat membantu anda.
Atas ialah kandungan terperinci Cara mendapatkan ketinggian dom dalam uniapp adalah tidak tepat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Artikel ini memperincikan API penyimpanan tempatan Uni-App (uni.setstoragesync (), uni.getstoragesync (), dan rakan-rakan async mereka), menekankan amalan terbaik seperti menggunakan kekunci deskriptif, mengehadkan saiz data, dan mengendalikan parsing JSON. Ia menekankan bahawa lo

Butiran artikel ini membuat dan mendapatkan permintaan API dalam Uni-app menggunakan Uni.request atau Axios. Ia meliputi pengendalian tindak balas JSON, amalan keselamatan terbaik (HTTPS, pengesahan, pengesahan input), kegagalan penyelesaian masalah (isu rangkaian, kors, s

Artikel ini memperincikan API Geolocation Uni-App, yang memberi tumpuan kepada uni.getLocation (). Ia menangani perangkap biasa seperti sistem koordinat yang salah (GCJ02 vs WGS84) dan isu kebenaran. Meningkatkan ketepatan lokasi melalui bacaan dan pengendalian purata

Artikel ini membandingkan Vuex dan Pinia untuk pengurusan negeri di Uni-App. Ia memperincikan ciri -ciri, pelaksanaan, dan amalan terbaik mereka, menonjolkan kesederhanaan Pinia berbanding struktur Vuex. Pilihan bergantung pada kerumitan projek, dengan pinia sutia

Artikel ini memperincikan bagaimana untuk mengintegrasikan perkongsian sosial ke dalam projek Uni-app menggunakan API Uni.share, meliputi persediaan, konfigurasi, dan ujian di seluruh platform seperti WeChat dan Weibo.

Artikel ini menerangkan ciri Easycom UNI-APP, mengautomasikan pendaftaran komponen. Ia memperincikan konfigurasi, termasuk pemetaan komponen autoscan dan adat, menonjolkan faedah seperti dikurangkan boilerplate, kelajuan yang lebih baik, dan kebolehbacaan yang dipertingkatkan.

Artikel membincangkan menggunakan SASS dan kurang preprocessors dalam UNI-APP, memperincikan persediaan, faedah, dan penggunaan dwi. Fokus utama adalah pada konfigurasi dan kelebihan. [159 aksara]

Artikel ini butiran API UNI.REQUEST dalam UNI-APP untuk membuat permintaan HTTP. Ia meliputi penggunaan asas, pilihan lanjutan (kaedah, tajuk, jenis data), teknik pengendalian ralat yang mantap (panggilan balik gagal, pemeriksaan kod status), dan integrasi dengan authenticat
