2013-03-13 1 views
0

HTML 입력 범위 슬라이더 값을 sliderVal snareDrum 변수의 인수 슬롯에 동적으로 가져 오려고합니다.새 개체 인수에 HTML 입력 범위 값 가져 오기

document.getElementById('slider').addEventListener('change', function() { 
var sliderVal = document.getElementById("slider").value; 

// Event handler code....I tried a bunch of different things 


}); 


// Don't know how to get it to the sliderVal argument. 

var snareDrum = new audioApiKey("snareDrum","snare.mp3",false, sliderVal); 









// Abstracted Web Audio playback Block 


var context = new webkitAudioContext(); 
function audioApiKey(domNode,fileDirectory,loopOnOff,playBackSpeed) { 
    this.domNode = domNode; 
    this.fileDirectory = fileDirectory; 
    this.playBackSpeed = playBackSpeed; 
    var bufferFunctionName = bufferFunctionName; 
    var incomingBuffer; 
    var savedBuffer; 
    var xhr; 

     bufferFunctionName = function() {   
     var source = context.createBufferSource(); 
     source.buffer = savedBuffer; 
     source.loop = loopOnOff; 
     source.playbackRate.value = playBackSpeed; 
     source.connect(context.destination); 
     source.noteOn(0); // Play sound immediately 
     }; 
    var xhr = new XMLHttpRequest(); 
    xhr.open('get',fileDirectory, true); 
    xhr.responseType = 'arraybuffer'; 
    xhr.onload = function() { 
    context.decodeAudioData(xhr.response, 
     function(incomingBuffer) { 
     savedBuffer = incomingBuffer; 
     var note = document.getElementById(domNode); 
     note.addEventListener("click", bufferFunctionName , false); 
     } 
    ); 
    }; 
xhr.send(); 
}; 

는 다음 코드를 작동하고 있지만 그것의 외모, audioApiKeybufferFunctionName

var snareDrumPitchSlider = document.getElementById("snareDrumPitchSlider"); 
var snareDrum = new audioApiKey("snareDrum","snare.mp3",false,"snareDrumPitchSlider"); 


// Abstracted Web Audio playback Block 

var context = new webkitAudioContext(); 

function audioApiKey(domNode,fileDirectory,loopOnOff,pitchSlider) { 
    this.domNode = domNode; 
    this.fileDirectory = fileDirectory; 
    this.pitchSlider = pitchSlider; 
    var bufferFunctionName = bufferFunctionName; 
    var incomingBuffer; 
    var savedBuffer; 
    var xhr; 

     bufferFunctionName = function() {   
     var source = context.createBufferSource(); 
     source.buffer = savedBuffer; 
     source.loop = loopOnOff; 
     var speed = document.getElementById(pitchSlider).value; // Added 
     source.playbackRate.value = speed; 
     source.connect(context.destination); 
     source.noteOn(0); // Play sound immediately 

     }; 

    var xhr = new XMLHttpRequest(); 
    xhr.open('get',fileDirectory, true); 
    xhr.responseType = 'arraybuffer'; 
    xhr.onload = function() { 
    context.decodeAudioData(xhr.response, 
     function(incomingBuffer) { 
     savedBuffer = incomingBuffer; 
     var note = document.getElementById(domNode); 
     note.addEventListener("click", bufferFunctionName , false); 



     } 

    ); 
    }; 
xhr.send(); 
}; 
+1

jQuery와 javascript가 혼동을 일으키고 있습니다. jQuery 객체에 대해서만 jQuery 메서드를 실행할 수있다. –

+0

죄송합니다. – William

+0

jQuery 객체가'var'$ obj = $()'로 시작하는 jquery 객체 인 변수가 여러번있는 이유 때문에 jQuery 객체 란 무엇인지 잊어 버리지 않고 무엇이 아닌지 – Chad

답변

2

그것은 범위 문제의 수정에 의해 수행된다. 다음과 같이 sliderVal 선언을 리스너 외부로 이동하십시오.

var sliderVal; //feel free to set it to a default 
document.getElementById('slider').addEventListener('change', function() { 
    sliderVal = document.getElementById("slider").value; 
    // Event handler code.... 
}); 


// sliderVal should now be accessible 
var snareDrum = new audioApiKey("snareDrum","snare.mp3",false, sliderVal); 
+0

그렇지 않은 상자는 해결해야합니다. 이벤트 핸들러 다음에 console.log (sliderVal)를 배치하면 입력 범위 슬라이더가 이동 될 때 슬라이더 값의 스트림이 출력되지 않습니다. – William

+0

범위 문제가 아닙니다. 나는 그것을 교정하기 위해 추상적 인 블록을 파고 들지 않기를 바랄뿐입니다. – William

+0

console.log를 리스너 내에두면 값이 변경 될 때마다 기록되어야합니다. 핸들러 내에서 함수 호출을 명시 적으로 수행하지 않으면 값이 변경 될 때 핸들러 외부의 코드가 실행되지 않습니다. 귀하의 코드를 보면 슬라이더가 이동 될 때마다 sliderVal을 업데이트하고 새로운 스네어 사운드가 재생 될 때마다 그 값이 사용되기를 원한다고 가정합니다. 그렇다면이 코드가 속임수를 써야합니다. –