Tjena .. jag har byggt en slider i JavaScript och den har några buggar som jag skulle vilja ha hjälp med att fåbort.
Om man nu tar min slider och dra den mot vänster så stannar den på noll men dra du vidare med musen så hoppar den till baka till där den började asså på 20 och gör jag så att den stannar kvar på noll även om man gå på minus tal?
window.onload = function(){
ArrowDiv = document.getElementById(ArrowName);
TextField = document.getElementById(TextFieldToFill);
HiddenTField = document.getElementById(HiddenField);
laVal = replaceSubstring(ArrowDiv.style.left,"px","");//Replace substring är bara en funtion som är säkrare att anända än Regular expression ditot.
}
document.onmouseup = function(){
active = false;
var RounderValue = replaceSubstring(ArrowDiv.style.left,"px", "");
Round20(RounderValue);
}
document.onmousedown = function(e){
var evt;
if (typeof(evt = window.event) != "undefined" && evt.srcElement == ArrowDiv){
active = true;
lpos = evt.screenX;
curL = ArrowDiv.offsetLeft;
}
else if (typeof (evt = e) != "undefined" && e.target == ArrowDiv){
active = true;
lpos = evt.pageX;
curL = ArrowDiv.offsetLeft;
}
}
document.onmousemove = function(e){
var evt;
output = null;
if (active)
{
if (typeof(evt = window.event) != "undefined")
{
if(curL + (evt.screenX - lpos) <= Values[0]-1){
ArrowDiv.style.left = "0";
}
else if(curL + (evt.screenX - lpos) >= (Values[Values.length-1]+1)){
ArrowDiv.style.left = Values[Values.Length-1] + "px";
}
else{
ArrowDiv.style.left = curL + (evt.screenX - lpos);
}
}
else if (typeof(evt = e) != "undefined")
{
if(curL + (evt.pageX - lpos) <= Values[0]-1){
ArrowDiv.style.left = "0";
}
else if(curL + (evt.pageX - lpos) >= (Values[Values.length-1]+1)){
ArrowDiv.style.left = Values[Values.Length-1] + "px";
}
else{
ArrowDiv.style.left = curL + (evt.pageX - lpos) + "px";
}
}
output = replaceSubstring(ArrowDiv.style.left,"px", "");
Glue(output);
}
}
function TextFiller(value)
{
for(var i=0;i<(Values.length+1);i++)
{
if(value == Values[i])
{
TextField.value = ValueNames[i];
HVal = i+1;
HiddenTField.value = HVal;
break;
}
}
}
function Glue(value)
{
var i = 0;
while(i < Values[Values.length-1]+1)
{
if(value >= (i-AttachPixels) && value <= (i+AttachPixels)){
ArrowDiv.style.left = i + "px";
laVal = value;
TextFiller(i);
break;
}
i=i+20;
}
}
//Kan tänkamig att det är här som det är fel
function Round20(CurrVal)
{
var topNr,botNr,NextVal;
if(CurrVal > laVal){
NextVal = parseInt(laVal)+20;
topNr = NextVal-CurrVal;
botNr = CurrVal-laVal;
if(topNr > botNr){
Glue(laVal);
}
else{
Glue(NextVal);
}
}
else{
NextVal = parseInt(laVal)-20;
topNr = laVal-CurrVal;
botNr = CurrVal-NextVal;
if(topNr < botNr){
Glue(laVal)
}
else{
Glue(NextVal);
}
}
}
Tacksam för alla svar!
Får passa på att ursäkta att koden är dåligt komenterad.
//Kim Sevandersson