2017-10-08 2 views
0

タイプ範囲の入力のバーをカスタマイズしようとしていますが、何らかの理由でbackgroundImageが設定されていません。私がやっている何バニラの要素にスタイルを動的に追加するjsが機能しない

var age = document.querySelector('#age'); 
var ageResult = document.querySelector('#age-result'); 
ageResult.textContent = age.value; 
age.addEventListener('change', function(event) { 
    var value = (event.target.value - event.target.min)/(event.target.max - event.target.min); 
    this.style.backgroundImage = '-webkit-gradient(linear, left top, right top, ' 
              + 'color-stop(' + value + ', #e8972c), ' 
              + 'color-stop(' + value + ', #e6e6e6) ' 
              + ')'; 
    if (event.target.tagName === 'INPUT') { 
     ageResult.textContent = event.target.value; 
    } 
}) 

をここでは、コードスニペットです:

var age = document.querySelector('#age'); 
 
    age.addEventListener('change', function(event) { 
 
     var value = (event.target.value - event.target.min)/(event.target.max - event.target.min); 
 
     this.style.backgroundImage = '-webkit-gradient(linear, left top, right top, ' 
 
               + 'color-stop(' + value + ', #e8972c), ' 
 
               + 'color-stop(' + value + ', #e6e6e6) ' 
 
               + ')'; 
 
    })
input[type=range]{ 
 
\t -webkit-appearance: none; 
 
\t /* fix for FF unable to apply focus style bug */ 
 
\t border: 1px solid white; 
 
} 
 
input[type=range]:focus { 
 
\t outline: none; 
 
} 
 
input[type=range]:focus::-webkit-slider-runnable-track { 
 
\t background: #ccc; 
 
} 
 
input[type=range]::-webkit-slider-thumb { 
 
\t -webkit-appearance: none; 
 
\t border: none; 
 
\t height: 30px; 
 
\t width: 30px; 
 
\t border-radius: 50%; 
 
\t background: #ffffff; 
 
\t margin-top: -11px; 
 
\t background-image: linear-gradient(rgba(255,255,255,0),rgba(0,0,0,0.1)); 
 
\t box-shadow: 0 0 8px rgba(0,0,0,0.3); 
 
} 
 
input[type=range]::-webkit-slider-runnable-track { 
 
\t height: 10px; 
 
\t background: #dddddd; 
 
\t border: none; 
 
\t border-radius: 3px; 
 
}
<input type="range" name="age" id="age" min="14" max="70" value="31">

あなたは私が間違っているのかを見ることができますか?なぜstyle.backgroundImageが設定されていないのですか?私はデバッグし、それがその行の直後に空であることを見た。

答えて

0

CSSファイルにCSSプロパティを設定します。スクリプト(JavaScript)を使用して動的に/プログラマチックに何かを変更したい場合は、別のCSSクラスのオン/オフを切り替えて変更することをお勧めします。言い換えればJSの.styleメソッドを可能な限り少しでも試してみてください。代わりに、JSの.classListを使用します。

+0

私はこの場合はできません。ユーザーが範囲を変更している間にバーをカスタマイズする必要があるため、backgroundImageの値を動的に計算しています – Periback

+0

なぜ設定されていないのでしょうか? – Periback

+0

私はちょうど私が間違っていたことを知りました。 – Periback

0

私はちょうど私が間違って何をしていたかが分かった。..

私はevent.targetの代わりに、(URL内のラップを忘れる)と、これを使用していた。

event.target.backgroundImage = 'url(-webkit-gradient(linear, left top, right top, ' 
               + 'color-stop(' + value + ', #e8972c), ' 
               + 'color-stop(' + value + ', #e6e6e6) ' 
               + '))'; 
+0

私は 'background-image'ではなく' background'プロパティを設定したいと思います。ここに示す構文は意味がありません。 – Tomalak

+0

なぜですか?それは背景画像であるはずでした..ここjqueryを使用して作業サンプルです:http://jsfiddle.net/JnrvG/1/ @Tomalak – Periback

+0

私はそれが動作する気にしません。それは、CSSパーサーがあなたより賢いことを証明するだけです。 ;)ドキュメントを見てください。 https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient – Tomalak

0

は、それがために働くだろう、これを試してみてください君は。

var age = document.querySelector('#age'); 
    age.addEventListener('change', function(event) { 
     var value = (event.target.value - event.target.min)/(event.target.max - event.target.min); 
     this.style.backgroundImage = `-webkit-gradient(linear,center bottom,center top,from(green),color-stop(0.5, yellow),to(blue))`; 
    }) 

この問題は、javascriptではなく、Webkit-gradientの構文にあります。

+0

範囲のバーに色:/ – Periback

+0

FireFoxで試してください、どのブラウザを使用していますか? – Gautam

+0

私はそれをクロームでテストしていますが、FFで試しましたが、どちらも動作しませんでした(値は現在設定されていますが、期待通りにバーを埋めるわけではありません) – Periback

関連する問題