Rumah  >  Artikel  >  hujung hadapan web  >  Javascript mendapat kemahiran koordinat dokumen dan koordinat_javascript port pandang

Javascript mendapat kemahiran koordinat dokumen dan koordinat_javascript port pandang

WBOY
WBOYasal
2016-05-16 15:57:471277semak imbas

Kedudukan elemen diukur dalam piksel, dengan koordinat X meningkat ke kanan dan koordinat Y meningkat turun, namun, terdapat dua titik berbeza sebagai asal sistem koordinat: koordinat X dan Y bagi sesuatu elemen boleh menjadi relatif Di penjuru kiri sebelah atas dokumen atau relatif kepada penjuru kiri sebelah atas port pandangan di mana dokumen itu dipaparkan.

Dalam tetingkap dan tab yang dinilai, "port pandangan" hanyalah sebahagian daripada penyemak imbas yang sebenarnya memaparkan kandungan dokumen: ia tidak termasuk "cangkang" penyemak imbas (seperti menu, bar alat dan tab).

Untuk dokumen yang dipaparkan dalam bingkai, elemen d5ba1642137c3f32f4f4493ae923989c Walau apa pun, apabila membincangkan kedudukan elemen, adalah penting untuk menjelaskan sama ada koordinat yang digunakan ialah koordinat dokumen atau koordinat port pandang. (Perhatikan bahawa koordinat port pandang juga dipanggil koordinat tetingkap)

Jika dokumen lebih kecil daripada viewport, atau skrol belum lagi berlaku, sudut kiri atas dokumen ialah sudut kiri atas viewport dan sistem koordinat dokumen dan viewport adalah sama. Tetapi secara amnya, untuk menukar antara dua sistem koordinat, offset skrol mesti ditambah atau ditolak. Contohnya, jika koordinat Y elemen ialah 200 piksel dalam koordinat dokumen dan pengguna telah menatal pelayar ke bawah 75 piksel, maka koordinat Y elemen dalam koordinat port pandang ialah 125 piksel. Begitu juga, jika koordinat X elemen ialah 400 piksel dalam koordinat port pandang, dan pengguna telah menatal port pandang 200 piksel secara mendatar, maka koordinat X elemen dalam koordinat dokumen ialah 600 piksel.

Koordinat dokumen adalah lebih asas daripada koordinat port pandang, dan ia tidak berubah semasa pengguna menatal. Walau bagaimanapun, adalah sangat biasa untuk menggunakan koordinat port pandang dalam pengaturcaraan sisi klien. Koordinat dokumen digunakan apabila menentukan kedudukan elemen menggunakan CSS. Tetapi cara paling mudah untuk menanyakan kedudukan elemen: getBoundingClientRect() mengembalikan kedudukan dalam koordinat viewport. Begitu juga, apabila anda mendaftarkan fungsi pengendali acara untuk acara tetikus, koordinat penuding tetikus yang dilaporkan berada dalam sistem koordinat port pandangan.

Untuk mengubah sistem koordinat, kita perlu menentukan kedudukan bar skrol tetingkap penyemak imbas. Sifat pageXoffset dan pageYOffset bagi objek Window menyediakan nilai ini dalam semua pelayar kecuali IE8 dan lebih awal. IE (dan semua pelayar moden) juga boleh mendapatkan kedudukan bar skrol melalui sifat scrollLeft dan scrollTop. Apa yang mengelirukan ialah biasanya anda mendapat sifat ini dengan mencari nod akar dokumen (document.documentElement), tetapi dalam mod aneh anda perlu menanyakannya pada elemen 6c04bd5ca3fcae76e30b72ad730ca86d dokumen (documeng.body). Berikut menunjukkan cara menanyakan kedudukan bar skrol dengan mudah.

functon getScrollOffsets(w){
  w = w || window;
  var sLeft,sTop;
  if(w.pageXOffset != null) {
    sLeft = w.pageXOffset;
    sTop = w.pageYOffset;
    return {x:sLeft,y:sTop};
  }
  if(document.compatMode == "CSS1Compat"){
    sLeft = document.documentElement.scrollLeft == 0 ? document.body.scrollLeft : document.documentElement.scrollLeft; 
    sTop = document.documentElement.scrollTop == 0 ? document.body.scrollTop : document.documentElement.scrollTop;  
    return {x:sLeft,y:sTop};
  }else if(document.compatMode == "BackCompat"){
    sLeft = document.body.scrollLeft; 
    sTop = document.body.scrollTop;
    return {x:sLeft,y:sTop};  
  }
}

Adakalanya berguna untuk dapat menentukan saiz port pandangan, sebagai contoh, untuk menentukan bahagian dokumen yang kelihatan pada masa ini. Kaedah mudah untuk menanyakan dimensi port pandangan menggunakan offset skrol tidak berfungsi dalam IE8 dan lebih awal, dan keupayaan teknik untuk berfungsi dalam IE bergantung pada sama ada penyemak imbas berada dalam mod pelik atau mod standard.

Atribut di bawah tetingkap:

innerHeight: Ketinggian bahagian kandungan tetingkap termasuk bar skrol

InnerWidth: Lebar bahagian kandungan tetingkap termasuk bar skrol

Ketinggian luar: Ketinggian keseluruhan penyemak imbas, termasuk semua komponen antara muka.

Lebar luar: Lebar keseluruhan penyemak imbas, termasuk semua komponen antara muka.

pageXOffset: Kedudukan paksi X bar skrol tetingkap penyemak imbas

pageYOffset: Kedudukan paksi-Y bar skrol tetingkap penyemak imbas

scrollX: Kedudukan paksi X bar skrol tetingkap penyemak imbas

scrollY: Kedudukan paksi-Y bar skrol tetingkap penyemak imbas

Hartanah

document.documentElement document.body
clientHeight Saiz kandungan yang boleh dilihat dalam port pandangan, tidak termasuk bahagian tatal dan bar tatal.
clientWidth
clientLeft 
klienTop
saiz kandungan offsetHeight, termasuk bar skrol.
offsetWidth
offsetLeft
offsetTop
scrollHeight Saiz kandungan menatal, termasuk bahagian menatal, tetapi tidak termasuk bar skrol.
scrollWidth
tatal Atas
scrollWidth

Saiz paparan tetingkap pertanyaan:

function getViewportSize(w){
  w = w || window;
  var cWidth,cHeight;
  if(w.innerWidth != null){
    cWidth = w.innerWidht;
    cHeight = w.innerHeight;
    return {w:cWidth,h:w.cHeight};
  }
  if(document.compatMode == "CSS1Compat"){
    cWidth = document.documentElement.clientWidth;
    cHeight = doument.documentElement.clientHeight;
    return {w:cWidth,h:w.cHeight};
  }else if(document.compatMode == "BackCompat"){
    cWidth = document.body.clientWidth;
    cHeight = doument.body.clientHeight;
    return {w:cWidth,h:w.cHeight};
  }
}

Di atas adalah keseluruhan kandungan artikel ini, saya harap anda semua menyukainya.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn