Dengan fungsi ini, saya ingin mengganti warnanya dengan generator warna acak.
document.overlay = GPolyline.fromEncoded({
color: "#0000FF",
weight: 10,
points: encoded_points,
zoomFactor: 32,
levels: encoded_levels,
numLevels: 4
});
Bagaimana saya bisa melakukannya?
javascript
random
colors
n00ki3
sumber
sumber
0.001
maka hasilnya adalah"#4189"
(warna tidak valid - 4 digit)'#'+Math.random().toString(16).substr(2,6)
(sumber: CodeGolf )Jawaban:
Gunakan
getRandomColor()
di tempat"#0000FF"
:sumber
Math.round(Math.random()*15)
hanya 1:30, sedangkan peluang nomor lain adalah 1:15.Saya ragu apa pun akan lebih cepat atau lebih pendek dari yang ini:
Tantangan!
sumber
'#'+(Math.random()*0xFFFFFF<<0).toString(16);
('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6)
akan selalu mengembalikan panjang 6. meskipun metode ini masih akan (jarang) mengembalikan angka kecil yang memberikan hasil seperti000cf4
atau0000a7
yang agak kikir. dalam kasus ini komponen merah tidak berkontribusi pada warna acak.Berikut ini adalah pendapat lain tentang masalah ini.
Tujuan saya adalah menciptakan warna-warna cerah dan berbeda. Untuk memastikan warnanya berbeda, saya menghindari menggunakan generator acak dan memilih warna "merata" dari pelangi.
Ini sangat cocok untuk membuat penanda pop-out di Google Maps yang memiliki "keunikan" yang optimal (yaitu, tidak ada dua penanda yang memiliki warna serupa).
Jika Anda ingin melihat seperti apa tindakan ini, lihat http://blog.adamcole.ca/2011/11/simple-javascript-rainbow-color.html .
sumber
Siapa yang bisa mengalahkannya?
Dijamin berfungsi sepanjang waktu: http://jsbin.com/OjELIfo/2/edit
Berdasarkan komentar @eterps kode di atas masih dapat menghasilkan string yang lebih pendek jika representasi heksadesimal dari warna acak sangat pendek (
0.730224609375
=>0.baf
)Kode ini harus berfungsi dalam semua kasus:
sumber
0.730224609375 = 0x3fe75e0000000000, 0.43603515625 = 0x3fdbe80000000000, 0.957763671875 = 0x3feea60000000000
. Nyaris tidak ada mantissa yang digunakan! Mereka hanya pecahan yang dimuliakan. Sebuah tepat '12 digit' keluaran akan menghasilkan hasil seperti:0.347876714234 = 0x3fd6439cb1ab32ac, 0.447556256665 = 0x3fdca4c2ff5fc450
Math.random()
(yang saya anggap bertanggung jawab atas hasil @ etertp) dengan yang lebih baik, jadi jenis angka acak berkualitas rendah itu seharusnya sudah ketinggalan zaman. sekarang.Anda juga dapat menggunakan HSL yang tersedia di setiap browser yang bagus ( http://caniuse.com/#feat=css3-colors )
Ini hanya akan memberi Anda warna-warna cerah, Anda bisa bermain-main dengan kecerahan, saturasi dan alpha.
sumber
'hsla(' + (Math.floor(Math.random()*360) + ', 100%, 70%, 1)'
Tidak perlu hash huruf heksadesimal. JavaScript dapat melakukan ini sendiri:
sumber
Saya suka yang ini:
'#' + (Math.random().toString(16) + "000000").substring(2,8)
sumber
'#' + Math.floor(Math.random()*16777215).toString(16);
'#' + (0.125).toString(16).substring(2, 8) === '#2'
. Ini berbahaya karena kemungkinannya rendah (1 dalam 4096 saya pikir) sehingga bug kemungkinan akan melewati pengujian. Anda harus ('#' + Math.random().toString(16) + "000000").substring(2, 8)
'#' + (Math.random().toString(16) + "000000").substring(2,8)
Generasi warna acak dengan kontrol kecerahan:
sumber
sumber
Math.random()
kembali0.125
maka hasilnya akan menjadi#0.2
(warna tidak valid) (Anda perlu menambahkan beberapa lapisan sebagai gantinya)Artikel yang ditulis oleh Paul Irish pada Random Hex Color Code Generator di JavaScript benar-benar menakjubkan. Menggunakan:
Inilah tautan sumber:
http://www.paulirish.com/2009/random-hex-color-code-snippets/
sumber
0.00001
maka hasilnya adalah#a7
(warna tidak valid)'#' + Math.floor(Math.random()*16777215).toString(16).padStart(6, '0')
Berikut ini twist pada solusi yang disediakan oleh @Anatoliy.
Saya hanya perlu menghasilkan warna terang (untuk latar belakang), jadi saya menggunakan tiga huruf (#AA) format:
sumber
Jika Anda seorang pemula seperti saya, tidak mengerti tentang hexadecimal dan semacamnya, ini mungkin lebih intuitif.
Anda hanya perlu berakhir dengan string seperti
'rgb(255, 123, 220)'
sumber
Ini dapat dengan mudah ditemukan menggunakan Pencarian Google:
Versi terbaru:
sumber
Jawaban singkat dengan pad ke ukuran yang tepat
'#'+((1<<24)*(Math.random()+1)|0).toString(16).substr(1)
sumber
Rincian cara kerjanya:
Math.random()*256
mendapat nomor acak (titik mengambang) dari 0 hingga 256 (termasuk 0 hingga 255)Hasil contoh: 116.15200161933899
Menambahkan
|0
strip dari semuanya setelah titik desimal.Contoh: 116.15200161933899 -> 116
Menggunakan
.toString(16)
konversi nomor ini ke heksadesimal (basis 16).Contoh: 116 -> 74
contoh lain: 228 -> e4
Menambahkan
"0"
bantalan dengan nol. Ini akan menjadi penting ketika kita mendapatkan substring, karena hasil akhir kita harus memiliki dua karakter untuk setiap warna.Mis: 74 -> 074
contoh lain: 8 -> 08
.substr(-2)
hanya mendapatkan dua karakter terakhir.Contoh: 074 -> 74
Contoh lain: 08 -> 08 (jika kami tidak menambahkannya
"0"
, ini akan menghasilkan "8" bukannya "08")The
for
loop berjalan lingkaran ini tiga kali, menambahkan setiap hasil ke string warna, menghasilkan sesuatu seperti ini:#7408e4
sumber
Jadi sementara semua jawaban di sini bagus, saya ingin sedikit lebih banyak kontrol atas output. Misalnya saya ingin mencegah warna putih dekat, sambil memastikan saya mendapatkan warna-warna cerah yang cerah dan tidak luntur.
Jadi sekarang saya dapat menentukan 3 rentang acak untuk memilih nilai rgb. Anda dapat menyebutnya tanpa argumen dan mendapatkan set default saya yang biasanya akan menghasilkan warna yang cukup cerah dengan warna dominan yang jelas sekali, atau Anda dapat menyediakan berbagai rentang Anda sendiri.
sumber
Komentar pilihan teratas dari jawaban teratas menunjukkan bahwa pendekatan Martin Ankerl lebih baik daripada angka hex acak, dan meskipun saya belum memperbaiki metodologi Ankerl, saya telah berhasil menerjemahkannya ke JavaScript. Saya pikir saya akan mengirim jawaban tambahan untuk utas SO yang sudah berukuran mega ini karena jawaban teratas memiliki komentar lain yang menghubungkan ke inti dengan implementasi JS dari logika Ankerl dan tautan itu rusak (404). Jika saya memiliki reputasi, saya hanya akan berkomentar tautan jsbin yang saya buat.
https://jsbin.com/qeyevoj/edit?js,console
sumber
Untuk keacakan yang layak.
Warna acak
Alfa acak, warna acak.
sumber
Ada begitu banyak cara untuk mencapai ini. Inilah yang saya lakukan:
Menghasilkan enam digit hex acak (0-F)
One-liner yang sangat singkat
Menghasilkan masing-masing komponen HEX (00-FF)
String hex yang direkayasa secara berlebihan (XOR 3 output bersama-sama untuk membentuk warna)
sumber
0.125
maka hasilnya adalah#0.2
(warna tidak valid)0.125
=3FC0000000000000
dalam IEEE hex. 3 digit hex adalah eksponen, 13 adalah mantissa. Ada kemungkinan 1 dalam 4,5 kuadriliun mantissa benar-benar kosong seperti itu. Saya menguji 100m kali di kedua Firefox / Chrome. Anda hanya mencoba untuk memecahkannya;).Math.random
seharusnya tidak memberi Anda 0,125. Dan jika itu terjadi, ada masalah dengan PRNG, yang bukan masalah saya. Pecahan seperti 0,5, 0,25, 0,0625 dll tidak berguna, mereka tidak mengandung keacakan. Mungkin Anda punya solusi untuk kasus tepi ekstrem ini, hm? ;)'#'+Math.random().toString(16).split('.')[1].slice(-6).padStart(6,0)
tapi saya lebih suka iniNamun generator warna acak lainnya:
sumber
Array.prototype.reduce
membuatnya sangat bersih.Membutuhkan shim untuk browser lama.
sumber
Anda dapat menggunakan fungsi sederhana ini
sumber
0.001
hasilnya"#4189"
(warna tidak valid 4 digit)http://jsfiddle.net/XmqDz/1/
sumber
Gunakan warna berbeda .
Ini menghasilkan palet warna yang berbeda secara visual .
warna yang berbeda sangat dapat dikonfigurasi:
sumber
Berikut adalah dua versi saya untuk generator kode hex acak.
sumber
Fungsi ini melampaui jawaban lainnya dengan dua cara:
Ia mencoba untuk menghasilkan warna sejelas mungkin dengan menemukan warna dari 20 percobaan yang memiliki jarak euclidian terjauh dari yang lain dalam kerucut HSV
Ini memungkinkan Anda untuk membatasi rona, saturasi, atau rentang nilai, tetapi masih berusaha untuk memilih warna sejelas mungkin dalam rentang itu.
Ini tidak super efisien, tetapi untuk nilai-nilai yang wajar (siapa yang bisa memilih 100 warna dengan mudah?) Cukup cepat.
Lihat JSFiddle
sumber
Hampir semua metode tulisan tangan sebelumnya menghasilkan kode hex yang tidak valid (lima digit). Saya menemukan teknik yang sama hanya tanpa masalah itu di sini :
Uji
Coba ini di konsol:
sumber
0.00001
hasilnya"#000a7"
(warna tidak valid - 5 digit)Versi saya:
sumber
0
membuat warna tidakrandom
cukup XD0
hinggaffffff
. Yang merupakan distribusi seragam yang sempurna . Nol itu hanya untuk menyelesaikan string, karena pertimbangan penggunaan browser. Saya sarankan Anda melihat lebih hati-hati pada solusi ini.map (menghasilkan warna rgb yang selalu valid)
Tampilkan cuplikan kode
sumber
Anda dapat menggunakan colorchain.js untuk menghasilkan urutan warna dengan beragam corak.
sumber