このエフェクトは非常によく使われており、よく質問されるので記事にしたいと思います。次回誰かが尋ねてきたら、この記事の url を教えてください。この効果は非常に単純なので説明は省略しますが、コードのコメントを見れば理解できると思います。以下はコード全体です。これを html にコピーして実行できます。
<!DOCTYPE html> <style> #mask { position:fixed;width:100%; top:0px;left:0px; _position:absolute; _top:expression(documentElement.scrollTop); background:rgba(0,0,0,0.5); background:transparent\9; filter:progid:DXImageTransform.Microsoft.Gradient( startColorStr=#80000000,endColorStr=#80000000 ); display:none; } #mask_td {text-align:center;} </style> <img src="http://web-tinker.com/images/TheMagicConch.jpg" width="100" id="img" /> <table id="mask"><tr><td id="mask_td"></td></tr></table> <script> //判断浏览器 var isIE=navigator.userAgent.match(/MSIE (\d)/i); isIE=isIE?isIE[1]:isIE; //声明变量 var img,mask; //获取元素 img=document.getElementById("img"); mask=document.getElementById("mask"); mask.td=document.getElementById("mask_td"); //计算mask的大小 mask.setSize=function(){ //获取文档可见区域宽度并设置到mask上 var de=document.documentElement; mask.style.width=de.clientWidth+"px" mask.style.height=de.clientHeight+"px"; }; //添加show方法 mask.show=function(){ //隐藏页面的滚动条 document[ isIE<9?"documentElement":"body" ].style.overflow="hidden"; //计算mask的大小 mask.setSize(); //显示 mask.style.display=isIE==6?"block":"table"; }; //添加hide方法 mask.hide=function(){ //显示页面滚动条 document[ isIE<9?"documentElement":"body" ].style.overflow=""; //清空里面的内容 mask.td.innerHTML=""; //隐藏 mask.style.display="none"; }; //添加append方法 mask.append=function(e){ //在mask的TD里面添加内容哦你 mask.td.appendChild(e); }; //点击mask关闭 mask.onclick=function(e){ //判断事件来源,如果是空白区域被点击了就关闭mask e=e||event; (e.target||e.srcElement)==mask.td&&mask.hide(); }; //窗体大小改变时也改变mask的大小 window.onresize=function(){ mask.setSize(); }; //点击图片的事件 img.onclick=function(){ //创建一个图片对象 var o=new Image; //设置图片的地址 o.src=img.src; //在mask内添加内容 mask.append(o); //显示mask mask.show(); }; </script>
このエフェクトに難しいことはありませんが、おそらく最も難しいのは半透明を実現することです。 css3 の不透明度と ie のアルファの両方で半透明を実現できますが、それは要素全体の半透明です。このメソッドを使用すると、子要素も半透明になるため、要素全体ではなく背景に透明度を設定する必要があります。 css3 では、rgba を使用して直接設定できます。 ie にはそのような方法はありませんが、グラデーション フィルターは透明度もサポートしているため、グラデーション フィルターを使用して置き換えることができます。また、ie9ではcss3の透明度とフィルターの透明度の両方に対応しているため、両方を使用するとページの透明度がおかしくなります。そこで、ie9 では透明効果の 1 つをブロックしました。
もう 1 つの問題は、ie6 との互換性です。ie6 は固定をサポートしていないため、互換性を持たせるには絶対および動的セットトップを使用する必要があります。次に、マスク サイズの計算の問題があります。これにはブラウザの違いもあります。実際、この効果におけるブラウザの違いは非常に大きいですが、それらはすべて小さな問題であり、長い時間計算する必要はないことが理解できるでしょう。説明。