JS 实现导航栏悬停效果(续)_javascript技巧
上次【JS-实现导航栏悬停】说到,导航栏悬停的那个页面在IE上运行的时候,会出导航栏不停的抖动问题。
解决方法如下:
将导航栏的定位方式由原来的absolute改为fixed,也不知道为什么改为fixed,就不抖了。。-_-||
div.navigation{
width: 800px;
height: 40px;
background: red;
margin: 4px auto 0;
top: 400px;
left: 0px;
position: fixed;
}
为此,JS也得做相应的修改。
因为fixed定位是根据浏览器的可视区进行定位的,所以原来给导航栏的定位都得改变。
//记录导航条原来在页面上的位置
var naviga_offsetTop = 0;
var naviga_offsetLeft = 0;
//IE7不识别getElementsByClassName,为了兼容自定义一个
function my_getElementsByClassName(class_name) {
var el = [];
//获取所有元素
_el = document.getElementsByTagName('*');
//通过className刷选
for (var i=0; i<_el.length i>if (_el[i].className == class_name ) {
el[el.length] = _el[i];
}
}
return el;
}
//导航条,悬停在顶部
function naviga_stay_top(){
var a_navigation_bar = [];
if(document.getElementsByClassName){//Chrome, FF
a_navigation_bar = document.getElementsByClassName("navigation");
} else {//IE
a_navigation_bar = my_getElementsByClassName("navigation");
}
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
document.title = scrollTop;
//如果向下滚动的距离大于原来导航栏离顶部的距离
//直接将导航栏固定到可视区顶部
if( scrollTop > naviga_offsetTop ){
a_navigation_bar[0].style.top = 0 + "px";
} else {
//如果向下滚动的距离小原来导航栏离顶部的距离,则重新计算导航栏的位置
a_navigation_bar[0].style.top = (naviga_offsetTop - scrollTop) + "px";
}
}
//给导航条上四个tab,加上点击事件。
window.onload=function(){
var a_tabs = [];
if( document.getElementsByClassName ){//Chrome, FF
a_tabs = document.getElementsByClassName("tab");
}else{ //IE
a_tabs = my_getElementsByClassName("tab");
}
var a_contents = [];
if( document.getElementsByClassName ){//Chrome, FF
a_contents = document.getElementsByClassName("content");
}else{//IE
a_contents = my_getElementsByClassName("content");
}
//获取offsetLeft,即导航栏离左边框的距离
var a_main_div = [];
if( document.getElementsByClassName ){//Chrome, FF
a_main_div = document.getElementsByClassName("main");
}else{ //IE
a_main_div = my_getElementsByClassName("main");
}
naviga_offsetLeft = a_main_div[0].offsetLeft;
a_tabs[0].onclick=function(){
window.scrollTo(0, a_contents[2].offsetTop);
}
a_tabs[1].onclick=function(){
window.scrollTo(0, a_contents[3].offsetTop);
}
a_tabs[2].onclick=function(){
window.scrollTo(0, a_contents[4].offsetTop);
}
a_tabs[3].onclick=function(){
window.scrollTo(0, a_contents[5].offsetTop);
}
//获取页面上,导航条到顶部的位置
var a_navigation_bar = [];
if(document.getElementsByClassName){//Chrome, FF
a_navigation_bar = document.getElementsByClassName("navigation");
} else {//IE
a_navigation_bar = my_getElementsByClassName("navigation");
}
//获取offsetTop
naviga_offsetTop = a_navigation_bar[0].offsetTop;
a_navigation_bar[0].style.left = naviga_offsetLeft + "px";
//给滚动条以及鼠标加上滚动事件
if( window.attachEvent) //IE
{
window.attachEvent("onmousewheel", naviga_stay_top);
window.attachEvent("onscroll", naviga_stay_top);
document.attachEvent("onmousewheel", naviga_stay_top);
document.attachEvent("onscroll", naviga_stay_top);
} else {//Chrome ,FF
window.addEventListener("mousewheel", naviga_stay_top,false);
window.addEventListener("scroll", naviga_stay_top,false);
document.addEventListener("mousewheel", naviga_stay_top,false);
document.addEventListener("scroll", naviga_stay_top,false);
}
}
在这个问题中,理解CSS+DIV定位(relative,absolute,static,fixed)的区别很重要。
relative,absolute,static,fixed
先看下各个属性值的定义:
1、static:默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
2、relative:生成相对定位的元素,通过top,bottom,left,right的设置相对于其正常位置进行定位。可通过z-index进行层次分级。
3、absolute:生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。可通过z-index进行层次分级。
4、fixed:生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。可通过z-index进行层次分级。
static与fixed的定位方式较好理解,在此不做分析。下面对应用的较多的relative和absolute进行分析:
1、relative。定位为relative的元素脱离正常的文本流中,但其在文本流中的位置依然存在。如图1:

图1
黄色背景的层定位为relative,红色边框区域为其在正常流中的位置。在通过top、left对其定位后,从灰色背景层的位置可以看出其正常位置依然存在。
2、absolute。定位为absolute的层脱离正常文本流,但与relative的区别是其在正常流中的位置不在存在。如图2:

图2
可以看到,在将黄色背景层定位为absolute后,灰色背景层自动补上。
3、relative与absolute的主要区别:
首先,是上面已经提到过的在正常流中的位置存在与否。
其次,relative定位的层总是相对于其最近的父元素,无论其父元素是何种定位方式。如图3:

图3
图中,红色背景层为relative定位,其直接父元素绿色背景层为默认的static定位。红色背景层的位置为相对绿色背景层top、left个20元素。而如果红色背景层定位为absolute,则情形如图4:

图4
可以看到,红色背景层依然定义top:20px;left:20px;但其相对的元素变为定位方式为absolute或relative的黄色背景层。因此,对于absolute定位的层总是相对于其最近的定义为absolute或relative的父层,而这个父层并不一定是其直接父层。如果其父层中都未定义absolute或relative,则其将相对body进行定位,如图5:

图5
除top、left、right、bottom定位外,margin属性值的定义也符合上述规则。

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

Bar navigasi antara muka Douyin terletak di bahagian atas dan merupakan saluran penting untuk pengguna mengakses fungsi dan kandungan yang berbeza dengan pantas. Memandangkan Douyin terus mengemas kini, pengguna mungkin mahu dapat menyesuaikan dan melaraskan bar navigasi mengikut keutamaan dan keperluan peribadi mereka. 1. Bagaimana untuk melaraskan bar navigasi di bahagian atas Douyin? Biasanya, bar navigasi teratas Douyin memaparkan beberapa saluran popular, membolehkan pengguna menyemak imbas dan melihat kandungan yang diminati dengan pantas. Jika anda ingin melaraskan tetapan untuk saluran teratas anda, ikuti langkah berikut: Buka apl TikTok dan log masuk ke akaun anda. Cari bar navigasi di atas antara muka utama, biasanya di tengah atau atas skrin. Klik simbol "+" atau butang serupa di atas bar navigasi untuk memasuki antara muka penyuntingan saluran. Dalam antara muka penyuntingan saluran, anda boleh melihat senarai lalai saluran popular. Anda boleh lulus

Langkah-langkah untuk melaksanakan bar navigasi menu dengan kesan bayangan menggunakan CSS tulen memerlukan contoh kod khusus Dalam reka bentuk web, bar navigasi menu adalah elemen yang sangat biasa. Dengan menambahkan kesan bayangan pada bar navigasi menu, anda bukan sahaja boleh meningkatkan estetikanya, tetapi juga meningkatkan pengalaman pengguna. Dalam artikel ini, kami akan menggunakan CSS tulen untuk melaksanakan bar navigasi menu dengan kesan bayangan dan menyediakan contoh kod khusus untuk rujukan. Langkah-langkah pelaksanaan adalah seperti berikut: Cipta struktur HTML Pertama, kita perlu mencipta struktur HTML asas untuk menampung bar navigasi menu. oleh

Cara menggunakan PHP untuk membangunkan bar navigasi ringkas dan fungsi koleksi laman web Bar navigasi dan fungsi koleksi laman web adalah salah satu fungsi biasa dan praktikal dalam pembangunan web. Artikel ini akan memperkenalkan cara menggunakan bahasa PHP untuk membangunkan bar navigasi ringkas dan fungsi pengumpulan URL, dan menyediakan contoh kod khusus. Cipta antara muka bar navigasi Mula-mula, kita perlu mencipta antara muka bar navigasi. Bar navigasi biasanya mengandungi pautan untuk navigasi pantas ke halaman lain. Kita boleh menggunakan HTML dan CSS untuk mereka bentuk dan mengatur pautan ini. Berikut ialah antara muka bar navigasi yang mudah

Dalam forum Discuz, bar navigasi adalah salah satu bahagian yang sering digunakan oleh pengguna apabila melawati tapak web Oleh itu, menyesuaikan bar navigasi boleh menambah gaya yang unik dan diperibadikan pada forum dan meningkatkan pengalaman pengguna. Seterusnya, kami akan memperkenalkan cara memperibadikan bar navigasi dalam forum Discuz dan memberikan contoh kod khusus. Pertama, kita perlu log masuk ke sistem pengurusan belakang Discuz dan masukkan halaman "Antara Muka" -> "Tetapan Navigasi". Pada halaman ini, kami boleh melakukan pelbagai tetapan dan penyesuaian pada bar navigasi. Berikut adalah beberapa

Langkah-langkah untuk melaksanakan kesan menu tab lungsur turun bar navigasi responsif menggunakan CSS tulen Bar navigasi ialah salah satu elemen biasa dalam halaman web dan menu tab lungsur turun ialah kesan yang sering digunakan dalam bar navigasi, yang. boleh menyediakan lebih banyak pilihan navigasi. Artikel ini akan memperkenalkan cara menggunakan CSS tulen untuk melaksanakan kesan menu tab lungsur turun bar navigasi responsif. Langkah 1: Bina struktur HTML asas Kita perlu membina struktur HTML asas untuk demonstrasi dan menambah beberapa gaya pada bar navigasi. Di bawah ialah struktur HTML yang mudah

Langkah-langkah untuk melaksanakan kesan terapung bar navigasi menu menggunakan CSS tulen Dengan kemajuan berterusan reka bentuk web, permintaan pengguna untuk tapak web semakin tinggi. Untuk memberikan pengalaman pengguna yang lebih baik, kesan penggantungan telah digunakan secara meluas dalam reka bentuk tapak web. Artikel ini akan memperkenalkan cara menggunakan CSS tulen untuk mencapai kesan terapung bar navigasi menu untuk meningkatkan kebolehgunaan dan estetika tapak web. Cipta struktur menu asas Mula-mula, kita perlu mencipta struktur asas menu dalam dokumen HTML. Berikut ialah contoh mudah: <navclass=&q

Bagaimana untuk menggunakan JavaScript untuk mencapai kesan kecerunan warna latar belakang bar navigasi tetap di bahagian bawah halaman web? Dalam reka bentuk web moden, bar navigasi tetap telah menjadi kaedah susun atur biasa. Jika anda ingin menambah kesan kecerunan warna latar belakang pada bar navigasi tetap di bahagian bawah halaman web, JavaScript ialah pilihan yang sangat sesuai. Artikel ini akan memperkenalkan anda kepada cara menggunakan JavaScript untuk mencapai kesan ini dan memberikan contoh kod khusus. Langkah 1: Struktur HTML Mula-mula kita perlu mencipta HTML

Vue ialah rangka kerja JavaScript yang sangat popular yang boleh digunakan untuk membina aplikasi web dinamik. Dalam Vue, anda boleh dengan mudah menyedari kesan dinamik bar navigasi dan memberikan pengguna pengalaman interaksi antara muka yang lebih baik. Berikut ialah beberapa langkah asas untuk melaksanakan dinamik bar navigasi menggunakan Vue. Untuk mencipta contoh Vue, pertama, anda perlu memperkenalkan perpustakaan Vue ke dalam HTML, dan kemudian mencipta tika Vue. Anda boleh menggunakan kod berikut untuk membuat contoh Vue: var
