| Autor | Zpráva | ||
|---|---|---|---|
| Jack06 Profil |
#1 · Zasláno: 15. 11. 2009, 16:03:57
Dobré odpoledne sesmolil jsem takovýto kód s knihovnou jquery, bohužel mi nějaké věci nešli a tak se chci zeptat, zda by se a jak dal lépe upravit tento js:
Jde mi o nějaké přechod barvy z červené (málo znaků) do zelené ( dostatečně znaků ) jak v progresbaru, tak v ukázce kolik písmen je v textu js:
var str;
var maxChars = 250; var maxWidth;
function counted(str) { var orginal = str.length; return orginal; }
function progresbar (str) {
var len = str.length;
maxWidth = parseInt(document.getElementById('progres_main').clientWidth, 10);
var newWidth = maxWidth/maxChars*len;
if (newWidth > maxWidth) newWidth = maxWidth;
var procento = Math.round((len/maxChars*100)-0.4)+'%';
$("#progres_bar").css({width: newWidth+'px'});
$("#progres_val").html(procento);
}
function countChars(){
var theForm = document.getElementById('keywords');
if ($("#counter").html() > 250 ) { alert('Nelze vložit více, než '+maxChars+' znaků'); $("#text").val(theForm.text.value.substr(0,maxChars));
} else if ($("#counter").html() > 240) { $("#counter").css({color: "#00C000"});
} else if ($("#counter").html() > 200) { $("#counter").css({color: "#40C000"});
} else if ($("#counter").html() > 120) { $("#counter").css({color: "#809000"});
} else if ($("#counter").html() > 50) { $("#counter").css({color: "#B05000"});
} else if ($("#counter").html() > 20) { $("#counter").css({color: "#D03000"});
} else { $("#counter").css({color: "#F00000"}); }
$("#counter").html(counted(theForm.text.value)); progresbar ($("#text").val());
}
html: <form action="" id="keywords"> <div id="progres_main"> <div id="progres_bar"></div> <div id="counter"></div><div id="progres_val">0%</div> </div> <br><textarea name="text" id="text" cols="50" rows="10" onkeyup="javascript:countChars();"></textarea><br> <input type="submit" value="Ukázat" class="submit"> </form> |
||
| fajzen Profil |
#2 · Zasláno: 17. 11. 2009, 12:12:06
Dobrý deň,
nenapísali ste, v čom presne je chyba, ale predpokladám, že sa vám nezobrazuje progressbar... ak je to tak, je to preto, lebo elementu s id progres_bar treba nastaviť height a background-color, inak sa zobrazuje ako dlhý pás s nulovou výškou a farbou pozadia, takže nie je vidieť... ďalej som v kóde našiel niekoľko chýb: 1. vo funkcií countChars() musí byť prvá podmienka >= 250, inak to povolí aj 251 znakov, pretože counteru sa zvyšuje číslo až úplne nakoniec 2. nejak sa mi nepozdáva výpočet newWidth, správne by malo byť len / maxChars * maxWidth, potom je aj následná kontrola, či je newWidth väčšie ako maxWidth zbytočná 3. taktiež nechápem, čo robí vo výpočte percenta to -0.4, ale predpokladám, že to súvisí s bodom 1, takže po aplikovaní mnou navrhovanej zmeny to bude treba odstrániť |
||
| Jack06 Profil |
#3 · Zasláno: 18. 11. 2009, 18:02:45
fajzen:
Kód mi funguje, ale mám ho napsanej pro jquery jen napůl.. pro jquery by se to dalo asi zrealizovat lépe ten kód. trochu jsem to s tvojí pomocí ještě upravil:
var str;
var maxChars = 250; var maxWidth;
function progresbar (w) {
maxWidth = parseInt(document.getElementById('progres_main').clientWidth, 10);
var newWidth = w/maxChars*maxWidth;
var procento = Math.round(w/maxChars*100)+'%';
$("#progres_bar").css({width: newWidth+'px'});
$("#progres_val").html(procento);
}
function countChars(){
var theForm = document.getElementById('new_website');
if ($("#counter").html() >= 250 ) { alert('Nelze vložit více, než '+maxChars+' znaků'); theForm.webdesc.value = theForm.webdesc.value.substr(0,maxChars);
} else if ($("#counter").html() >= 225) { $("#counter").css({color: "#00C000"});
} else if ($("#counter").html() >= 200) { $("#counter").css({color: "#40C000"});
} else if ($("#counter").html() >= 150) { $("#counter").css({color: "#809000"});
} else if ($("#counter").html() >= 100) { $("#counter").css({color: "#B05000"});
} else if ($("#counter").html() >= 50) { $("#counter").css({color: "#D03000"});
} else { $("#counter").css({color: "#F00000"}); }
$("#counter").html(theForm.webdesc.value.length); progresbar (theForm.webdesc.value.length);
}
|
||
| fajzen Profil |
#4 · Zasláno: 18. 11. 2009, 20:00:27 · Upravil/a: fajzen
Jack06:
„pro jquery by se to dalo asi zrealizovat lépe ten kód.“ No, dovolil som si to trošku upraviť, aby to bolo viac v duchu jQuery :)
<script>
var maxChars = 250;
var maxWidth;
var minWidth = 5;
$().ready(function() {
maxWidth = $('#progres_main').innerWidth() - minWidth;
$('#text').keyup(function() {
var len = $(this).val().length;
if(len > maxChars) {
$(this).val(
$(this).val().substr(0, maxChars)
);
alert('Nelze vložit více, než '+ maxChars + ' znaků');
len = maxChars;
}
var percent = len / maxChars;
var color = 'rgb(' + Math.round((1 - percent) * 255) + ', ' + Math.round(percent * 255) + ', 0)';
$('#progres_bar').css({
'background-color': color,
'width': Math.round(minWidth + percent * maxWidth)
});
$('#counter').css('color', color).text(len);
$('#progres_val').text(Math.round(percent * 100) + '%');
}).keyup(); // inicializácia
});
</script>
<form action="" id="keywords">
<div id="progres_main"> <div id="progres_bar" style="height:10px;"></div>
<div id="counter"></div><div id="progres_val"></div>
</div>
<br><textarea name="text" id="text" cols="50" rows="10"></textarea><br>
<input type="submit" value="Ukázat" class="submit">
</form>
bude to hádzať dosť zaujímavé farby... možno by sa s tým dalo ešte nejak pohrať, ale lepší plne automatický spôsob ma nenapadol a svoj účel to splní: pri prázdnom poli červená, pri plnom zelená :) |
||
| Jack06 Profil |
#5 · Zasláno: 20. 11. 2009, 13:06:00
fajzen:
Jej ne.. je to fakt výborné :-) jinak těch -0.4 jsem tam měl kvůli tomu že to zaokrouhluje a 100% je ještě před těmi 250 znaky :-) |
||
| fajzen Profil |
#6 · Zasláno: 20. 11. 2009, 14:53:53
Jack06:
aha, to s tým zaokrúhľovaním som si neuvedomil, ok :) |
||
|
Časová prodleva: 3 roky
|
|||
| vecerapl Profil |
Zajímal by mě řádek určující barvu z červené na zelenou:
var color = 'rgb(' + Math.round((1 - percent) * 255) + ', ' + Math.round(percent * 255) + ', 0)';Jak by vypadal tento řádek, pokud bych to chtěl změnit ze zelené na červenou? Jde mě o ten poslední script zde uvedený od fajzen. |
||
| Joker Profil |
vecerapl:
„Jak by vypadal tento řádek, pokud bych to chtěl změnit ze zelené na červenou?“ Prohodit Math.round((1 - percent) * 255) a Math.round(percent * 255)
Oprava: Zkopíroval jsem moc velký kus kódu. |
||
| vecerapl Profil |
Moc děkuji Joker.
Ještě bych potřeboval script CSS upravit na maximální šířku v pixelech, kdy jak člověk bude psát, tak ten maxwidth pokud si ho nastavím na řekněme 300, tj. 300px, tak aby se ten progress_bar vykresloval právě v tom rozmezí maximálně 300 pixelů. Hraji si s tím scriptem, ale pořád nemůžu přijít na správnou kombinaci rovnice :( u toho 'width': Math.round(minWidth + percent * maxWidth)
$('#progres_bar').css({
'background-color': color,
'width': Math.round(minWidth + percent * maxWidth)
});OPRAVA: Stačil odstranit řádek maxWidth = $('#progres_main').innerWidth() - minWidth;
|
||
|
Časová prodleva: 14 let
|
|||
0