Heim > Web-Frontend > js-Tutorial > Basierend auf der nativen JS-Fade-Funktionskapselung (kompatibel mit IE)

Basierend auf der nativen JS-Fade-Funktionskapselung (kompatibel mit IE)

高洛峰
Freigeben: 2016-12-09 15:08:34
Original
1039 Leute haben es durchsucht

Wenn wir während des Entwicklungsprozesses einen Ein- und Ausblendeffekt erzielen möchten, können wir die Methode fadeTo() von jQuery vollständig verwenden. Unser Ziel besteht jedoch nicht nur darin, es zu nutzen, sondern auch darin, die zugrunde liegende Logik des Programms zu verstehen. In diesem Artikel wird hauptsächlich natives Javascript verwendet, um den Ein- und Ausblendeffekt zu erzielen.

Der Aufbau des Frameworks ist grundsätzlich nicht schwierig.

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>透明度函数的封装</title>
  <style type="text/css">
   #box{
    width: 200px;
    height: 200px;
    background: red;
    margin: 50px auto;
    opacity: .3;
    filter: alpha(opacity:30);
   }
  </style>
 </head>
 <body>
  <div id="box"></div>
  <script src="toumingdu.js" type="text/javascript" charset="utf-8"></script>
 </body>
</html>
Nach dem Login kopieren

Die Hauptschwierigkeit beim Schreiben des Javascript-Teils ist die Funktion changeOpacity().

window.onload = function (){
 var box = document.getElementById(&#39;box&#39;);
 box.onmouseover = function (){
  changeOpacity(this,100);
 }
 box.onmouseout = function (){
  changeOpacity(this,30);
    
 }
}
/**
 *
 * @param {Object} box 要变化透明度的元素
 * @param {Object} target 透明度的目标值(100为最高)
 */
function changeOpacity(box,target){
 var opa;
 var speed;
 if(box.currentStyle){
  //判断浏览器类型,此类型为IE浏览器,即使IE不支持opacity属性,但是仍然可以获取值
  opa = box.currentStyle[&#39;opacity&#39;]*100;
 }
 else{//其他浏览器
  opa = getComputedStyle(box,false)[&#39;opacity&#39;]*100;
 }
 //透明度每次变化的值(步长),根据目标值和当前值的差来决定步长的正负
 target-opa>=0?speed=1:speed=-1;
 clearInterval(box.timer);
 box.timer = setInterval(function (){
  //目标值和当前值差值的绝对值大于等于步长的绝对值,设置透明度为当前值加步长
  if(Math.abs(target-opa)>=Math.abs(speed)){
   box.style.opacity=(opa+speed)/100;
   box.style.filter=&#39;alpha(opacity:&#39;+(opa+speed)+&#39;)&#39;;
  }
  //目标值和当前值差值的绝对值小于步长的绝对值,剩余的距离一步到位,
  //设置透明度直接为目标值,同时清除定时器
  else{
   box.style.opacity=target/100;
   box.style.filter=&#39;alpha(opacity:&#39;+target+&#39;)&#39;;
   clearInterval(box.timer);
  }
  //直接对透明度参数进行加步长的运算,避免每次都要获取当前透明度
  opa=opa+speed;
 },30);
}
Nach dem Login kopieren

Das Prinzip dieser Transparenzfunktion ist im Allgemeinen das gleiche wie das der Bewegungsfunktion. In drei Schritten zusammengefasst:
1. Ermitteln Sie den aktuellen Wert und bestimmen Sie die Schrittgröße basierend auf dem Zielwert und dem aktuellen Wert.
2. Der Änderungsprozess, wobei jedes Mal ein Wert geändert wird (die Schrittlängen der Verlaufsanimation). und Transparenz sind unterschiedliche Werte), während die einheitliche Geschwindigkeitsanimation und die Transparenzschrittgröße feste Werte sind);

Wenn Sie das Prinzip nicht verstehen, können Sie einen weiteren Artikel über einheitliche Javascript-Animation und Pufferanimation lesen.

Die größte Schwierigkeit beim Verständnis des Prinzips dürfte darin bestehen, die aktuelle Transparenz zu erlangen (Zuordnung ist relativ einfach). Um den Transparenzwert zu erhalten, müssen wir zwei Situationen berücksichtigen:

1 Obwohl das Opazitätsattribut im IE nicht unterstützt wird, können wir es über box.currentStyle['opacity'] abrufen Gleichzeitig schreiben wir beim Schreiben auch den Wert der Deckkraft in CSS, obwohl der IE die Transparenz aufgrund der Änderung des Deckkraftwerts nicht ändert.

2. Andere Browser unterstützen das Opazitätsattribut, sodass sich unser Vorgang beim Schreiben und Lesen nur auf die Opazität konzentrieren kann.

Als Nächstes sprechen wir ausführlich über die Funktionsweise im IE-Browser:


Zunächst gibt es in unserer CSS-Datei zwei Attributwerte, die in unserem nützlich sind operation: opacity: .3 ; filter: alpha(opacity:30); Offensichtlich ist es für uns schwierig, den Opazitätswert im Filterattribut zu erhalten (ich weiß nicht wie!), aber es ist relativ einfach, wenn wir currentStyle verwenden um die Deckkraft zu erhalten. Deshalb habe ich einen Test durchgeführt und festgestellt, dass das Lesen und Schreiben dieses Attributwerts kein Problem darstellt, obwohl der IE dieses Attribut nicht unterstützt. Das Problem ist also gelöst! Wir können die aktuelle Transparenz durch die Deckkraft lesen und dann die Transparenz durch den Filter ändern. Gleichzeitig ändern wir den Wert der Deckkraft (nicht nur aus Kompatibilitätsgründen mit anderen Browsern, sondern auch, nachdem wir ihn geschrieben haben, kann der IE-Browser den Wert erhalten Beim nächsten Einziehen wird die aktuelle Transparenz übernommen. (Transparenz, andernfalls wird der anfängliche Opazitätswert erhalten.) Ist es also nicht das gleiche Problem wie bei der Animation?


Verwandte Etiketten:
js
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage