js運動事件函數(shù)詳解
本文實例為大家分享了js運動事件函數(shù),供大家參考,具體內(nèi)容如下
HTML
<div id="breedsdog"> <h2 class="title">The Dog</h2> <p class="describe">Split between cat,belong to the cat family,cat,cat,is the world's more widely<br> in the family pet.Cats ancestors is presumably desert cats</p> <div class="breedsdog1"> <div class="img"> <img src="img2/labrador.jpg"/> <a class="lookdog" href="#"></a> </div> <div class="img_txt"> <p class="chinese">拉布拉多</p> <p class="english">Labrador</p> <p class="introduce"> 拉布拉多獵犬因原產(chǎn)地在加拿大的紐芬蘭與拉布拉多省而得名。拉布拉多犬是一種中大型犬類,個性忠誠、大氣、憨厚、溫和、陽光、開朗、活潑,智商極高,也對人很友善,是非常適合被選作經(jīng)常出入公共場合的導(dǎo)盲犬或地鐵警犬及搜救犬和其他工作犬的狗品種,跟哈士奇(西伯利亞雪撬犬)和金毛獵犬并列三大無攻擊性犬類,拉布拉多智商位列世界犬類第七。 </p> </div> </div> </div>
CSS布局樣式省略
現(xiàn)在a.lookdog的樣式我設(shè)為position:absolutely,寬高設(shè)為0。實現(xiàn)的特效:當鼠標移入div.img上,實現(xiàn)a.lookdog的寬高自動展開的緩沖動畫,并且展開完畢后,透明度變低的遮罩背景圖層。當然我們用css3也能實現(xiàn)這種特效,但是css3的坑是不完全支持IE瀏覽器,所以用javascript來實現(xiàn)運動緩沖動畫是最理想的。
javascript
函數(shù)封裝部分
//根據(jù)類名和父對象ID獲取屬性節(jié)點,解決getelementsByClass對瀏覽器的兼容性問題
function getbyclass(classname,parent){
//傳入ID獲取父節(jié)點,如果該參數(shù)為空就為document
var oParent=parent?document.getElementById(parent):document;
//定義一個空數(shù)組來存放屬性節(jié)點
var els=[];
//定義一個數(shù)組存放父對象的所有子節(jié)點
var elements=oParent.getElementsByTagName("*");
//遍歷所有子節(jié)點,根據(jù)類名把所有的子對象找出來,并且放在els數(shù)組內(nèi)
for(var i=0;i<elements.length;i++){
if(elements[i].className==classname){
els.push(elements[i]);
}
}
return els;
}
//根據(jù)對象要獲取的屬性名來得到屬性值
function getStyle(obj,stylename){
//針對IE瀏覽器獲取樣式方法
if(obj.currentStyle){
return obj.currentStyle[stylename];
//針對其他瀏覽器獲取樣式方法
}else if(getComputedStyle(obj,false)){
return getComputedStyle(obj,false)[stylename];
}
}
//緩沖動畫主函數(shù),傳參類型:(對象,jaso格式要改變的樣式值(可多個),緩沖系數(shù),執(zhí)行周期時間(值越小速度越快,越大越慢),回調(diào)函數(shù)(是否有多次動畫的播放,可有可無))
function MoveJason(obj,jason,average,cycle,continuefunction){
clearInterval(obj.timer);
obj.timer=setInterval(function(){
for(var stylename in jason){//針對多效果的緩沖動畫
// obj.style[stylename]=jason[stylename];
// }
if(stylename=="opacity"){
var offvalue=Math.round(parseFloat(getStyle(obj,stylename))*100);
var speed=(jason[stylename]-offvalue)/average;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
if(speed==0){
clearInterval(obj.timer);
if(continuefunction) continuefunction();//回調(diào)函數(shù),判斷是否有多次執(zhí)行
}else{
obj.style[stylename]=(offvalue+speed)/100;
obj.style.filter="alpha(opacity:"+(offvalue+speed)+")";
}
}else{
var offvalue=parseInt(getStyle(obj,stylename));
var speed=(jason[stylename]-offvalue)/average;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
if(speed==0){
clearInterval(obj.timer);
if(continuefunction) continuefunction();
}else{
obj.style[stylename]=offvalue+speed+"px";
}
}
}
},cycle);
}
頁面初始化函數(shù),方法調(diào)用
window.onload=function(){
var imgdog=getbyclass("img","breedsdog");//在父對象breedsdog上找到所有的div.img
//給所有的div.img添加鼠標移入,鼠標移出事件
for(var i=0;i<imgdog.length;i++){
imgdog[i].onmouseover=function(){
var obj=this.children[1];
MoveJason(obj,{"height":376,"width":206},5,30,function(){//緩沖動畫的函數(shù)調(diào)用,當執(zhí)行完寬高值的緩沖變化,再回調(diào)函數(shù)執(zhí)行透明度緩沖變化。以下同理,可以多層嵌套實現(xiàn)多個回調(diào)。
MoveJason(obj,{"opacity":30},5,30);
});
}
imgdog[i].onmouseout=function(){
var obj=this.children[1];
MoveJason(obj,{"height":0,"width":0},5,30,function(){
MoveJason(obj,{"opacity":80},5,30);
});
}
}
}
鼠標移入移出效果圖如下,我多加個了幾個div.img,可以看到等寬高變完,然后透明度發(fā)生變化。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
BootStrap的彈出框(Popover)支持鼠標移到彈出層上彈窗層不隱藏的原因及解決辦法
彈出框(Popover)與工具提示(Tooltip)類似,提供了一個擴展的視圖。本文給大家介紹BootStrap的彈出框(Popover)支持鼠標移到彈出層上彈窗層不隱藏的原因及解決辦法,喜歡的朋友參考下吧2016-04-04
JavaScript本地存儲與會話存儲的實現(xiàn)介紹
本地存儲和會話存儲是比較常用的方法,你知道兩者的區(qū)別嗎,本文詳細的介紹了JavaScript中本地存儲(LocalStorage)和會話存儲(SessionStorage)的使用,具有一定的參考價值,感興趣的可以了解一下2022-08-08
'webpack-dev-server'?不是內(nèi)部或外部命令也不是可運行的程序?或批處理文件的最
這篇文章主要介紹了'webpack-dev-server'?不是內(nèi)部或外部命令也不是可運行的程序?或批處理文件的最新解決方法,文中給大家補充介紹了webpack-dev-server的介紹與用法,需要的朋友可以參考下2023-02-02
js模擬淘寶網(wǎng)的多級選擇菜單實現(xiàn)方法
這篇文章主要介紹了js模擬淘寶網(wǎng)的多級選擇菜單實現(xiàn)方法,涉及javascript針對頁面元素結(jié)點的遍歷與設(shè)置等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08

