2017-04-18 5 views
0

私はVueJSの初心者です。私の学習プロセスの一環として、私はPomodoroアプリのノブを作っています。これは私のfiddleです。 jqueryを使って実装されたcodepenのノブコードをコピーしました。あなたがフィドルで見ることができるように、仕事のほとんどはjqueryによって行われます。 Vue.jsを使って、そのメソッドと状態を使って試してみる必要があります。 このコードをより良いVue.JSコードにリファクタリングする方法は?どんな提案も大歓迎です。vue.jsコンポーネントのメソッドと状態を実装する方法

Vue.component('timer', { 

    mounted() { 
    var knob = $('.knob'); 
    var angle = 0; 
    var minangle = 0; 
    var maxangle = 270; 
    var xDirection = ""; 
    var yDirection = "";  
    var oldX = 0; 
    var oldY = 0; 

    function moveKnob(direction) {  
    if(direction == 'up') { 
     if((angle + 2) <= maxangle) { 
     angle = angle + 2; 
     setAngle(); 
     } 
    }  
    else if(direction == 'down') { 
     if((angle - 2) >= minangle) { 
     angle = angle - 2; 
     setAngle(); 
     } 
    } 
    } 

    function setAngle() { 

    // rotate knob 
    knob.css({ 
     '-moz-transform':'rotate('+angle+'deg)', 
     '-webkit-transform':'rotate('+angle+'deg)', 
     '-o-transform':'rotate('+angle+'deg)', 
     '-ms-transform':'rotate('+angle+'deg)', 
     'transform':'rotate('+angle+'deg)' 
    }); 

    // highlight ticks 
    var activeTicks = (Math.round(angle/10) + 1); 
    $('.tick').removeClass('activetick'); 
    $('.tick').slice(0,activeTicks).addClass('activetick'); 

    // update % value in text 
    var pc = Math.round((angle/270)*100); 
    $('.current-value').text(pc+'%'); 


    } 

    var RAD2DEG = 180/Math.PI; 
    knob.centerX = knob.offset().left + knob.width()/2; 
    knob.centerY = knob.offset().top + knob.height()/2;   
    var offset, dragging=false; 
    knob.mousedown(function(e) { 
     dragging = true; 
     offset = Math.atan2(knob.centerY - e.pageY, e.pageX - knob.centerX); 
    }) 
    $(document).mouseup(function() { 
     dragging = false 
    }) 
    $(document).mousemove(function(e) { 
     if (dragging) { 
     if (oldX < e.pageX) { 
      xDirection = "right"; 
     } else { 
      xDirection = "left"; 
     } 
     oldX = e.pageX; 
     if(xDirection === "left") { 
      moveKnob('down'); 
     } else { 
      moveKnob('up'); 
     } 
     return false; 
     } 
    }) 
    } 
    }); 

答えて

1

この例はjQueryなしで実行されます。

https://jsfiddle.net/guanzo/d6vashmu/6/

  1. あなたはdata機能に必要なすべての変数を宣言します。
  2. methodsプロパティの下にあるすべての関数を宣言します。
  3. 全てangleから計算されるようknobStyleactiveTicks、及びcurrentValueとしてcomputed性で他の変数、に由来する変数を宣言。 angleが変更されると、これらの3つの計算されたプロパティが自動的に更新されます。

Vueの一般的な使用法については、データを操作し、VueでDOMを更新するようにしてください。

関連する問題