>  기사  >  웹 프론트엔드  >  Javascript 선택 윤곽 호버 확대 효과 구현 code_text 특수 효과

Javascript 선택 윤곽 호버 확대 효과 구현 code_text 특수 효과

WBOY
WBOY원래의
2016-05-16 17:46:351180검색

QQ 스페이스를 사용해 본 친구들은 익숙할 텐데요. 효과가 꽤 눈부시지만 플래시로 구현되어 있으니 자바스크립트를 사용할 수 있을까요? 3일 정도 고민하다가 드디어 거의 다 됐는데 아직 좀 남아있네요. , 모두가 나를 이해할 수 있기를 바랍니다. 앞으로는 개선하겠습니다.

아이디어에 대해 먼저 이야기하겠습니다:
먼저 동적으로 html 구조를 만듭니다

코드 복사 코드는 다음과 같습니다.


< table border="0" cellpacing="0" cellpadding="0">

........... .




이것은 매우 중요하며 타이머를 사용하여 img의 움직임을 시뮬레이션하고 외부 div의 onmouseenter 및 onmouseleave 이벤트를 바인딩합니다. 마지막으로 외부 div 개체를 반환합니다. 아래 코드를 보세요



코드 복사
코드는 다음과 같습니다. sx .activex.dynamicpic={ init:function(imga,border, margin,w,h,step,speed){ var 데모=document.createElement("div")
var tbody=document .createElement("tbody");
var 데모1=document.createElement ("td")
var 데모2=document.createElement("td")
var table=document.createElement("< ;테이블 테두리=/"0/" 셀 간격=/"0/" 셀 패딩 ="0/">");
var tr=document.createElement("tr");
demo.style.position ="absolute";
demo.style.height=h " px";
demo.style.width=w "px";
demo.style.overflowX="hidden"; (var i=0;ivar img=document.createElement("img")
img.src=imga[i]
img.style.height= h "px";
img.style.width=parseInt(w/imga.length) "px";
demo1.appendChild(img)
}
tr.appendChild(demo1); 🎜>tr.appendChild(demo2);
table.appendChild(tbody)
var c=demo1.all; 🎜>for(var i=0;ic[i].style.marginLeft=margin "px"
c[i].style.border=border; 🎜>}
demo2.innerHTML = 데모1.innerHTML
function Marquee(){
if(demo2.offsetWidth-demo.scrollLeft<=0){
//alert(demo.scrollLeft);
demo.scrollLeft-=demo1.offsetWidth;}
else{
demo.scrollLeft =step;
}
}
var MyMar = setInterval(Marquee,speed); >demo.onmouseenter = function(){
clearInterval(MyMar) ;
var t=document.elementFromPoint(window.event.clientX,window.event.clientY)
if(t.tagName!= "IMG")
return;
if(t.offsetHeight>demo.offsetHeight 10)
return;
//alert(t.src)
var d=document.createElement( "img");
d.style.height=t.offsetHeight 50 "px";
d.style.width=t.offsetWidth 50 "px"
d.style.position=" ";
d.style.top="-25px";
if(t.parentNode==demo2){
d.style.left=t.offsetLeft 데모1.offsetWidth-20 "px";
//alert(1);
//demo .scrollLeft-=demo1.offsetWidth;
}else{
d.style.left=t.offsetLeft-25 "px";}
//alert(d.style.left);
//alert(window.event.clientX)
//alert(t.offsetLeft-demo.scrollLeft 데모.offsetWidth-25); >d.src=t.src;
d.onmouseleave= function(){
d.parentNode.removeChild(d);
MyMar = setInterval(Marquee,speed)
}
//alert(1);//demo.style.overflow="visible";
demo1.appendChild(d)
//alert(m.innerHTML)
demo.onmouseleave = function(){MyMar = setInterval(Marquee,speed )}
return 데모;
}
}


함수 매개변수의 imga는 배열입니다. img 주소를 전달하려고 합니다. border는 이미지의 테두리 속성이고 margin은 이미지 사이의 거리입니다. w는 외부 div의 너비이고 h는 동일하며 step은 타이머의 단계 수입니다. 이미지를 한 번 이동하는 데 소요되며 속도는 타이머의 시간 간격입니다.
위 타이머 코드는 인터넷에서 코드를 빌려왔지만 제가 직접 개선했습니다.
호출 코드는 다음과 같습니다.




코드 복사


코드는 다음과 같습니다.


;head>
제목 없는 문서