2016-06-28 3 views
1

그라디언트를 사용하여 색상을 지정하는 'foo'텍스트가 있습니다. 이 텍스트를 'bar'로 업데이트하고 싶습니다.하지만 이렇게하면 텍스트가 강조 표시 될 때까지 텍스트가 그대로 유지됩니다. 예제 코드가있는 jsfiddle은 here입니다. 누구나 업데이트 방법을 알아낼 수 있습니까? 참고 : 현재 그라데이션 코드는 크롬에서 작동자바 스크립트가 웹킷 그라디언트로 시각적으로 업데이트되지 않음

HTML :

<div id="gradient_div"> 
    <p id="gradient_text" onload="update"> 
    Foo 
    </p> 
</div> 

CSS :

#gradient_div 
{ 
    background: linear-gradient(#000000,#ffffff); 
    -webkit-background-clip: text; 
    -webkit-text-fill-color: transparent; 
} 

자바 스크립트 : 나는이 트릭을 사용했습니다

setTimeout(function(){ 
document.getElementById("gradient_text").innerHTML="bar"; 
},500); 
+0

텍스트를 업데이트 한 후에 그라데이션을 원하지 않습니까? – Rayon

답변

1

@BrianDiesel이 말한 것과 비슷한 재 페인트를 강요해야합니다. 이 작업을해야합니다 :

setTimeout(function(){ 
 
    var elem = document.getElementById("gradient_text"); 
 
    elem.innerHTML = "bar"; 
 
    // force repaint 
 
    var display = elem.style.display; 
 
    elem.style.display = 'none'; 
 
    setTimeout(function(){ 
 
    elem.style.display = display; 
 
    }, 50); 
 
}, 500);
#gradient_div { 
 
    background: linear-gradient(#000000,#ffffff); 
 
    -webkit-background-clip: text; 
 
    -webkit-text-fill-color: transparent; 
 
}
<div id="gradient_div"> 
 
    <p id="gradient_text" onload="update"> 
 
    Foo 
 
    </p> 
 
</div>
기본적으로

이 모든 해킹하고 귀하의 사용 사례에 따라 작동하지 않을 수 있습니다,하지만 당신이 지원하려는 브라우저에서 작동 하나를 찾을 수 있어야한다 . 이게 아니라면 알려줘.

도움이 되었기를 바랍니다.

+0

고마워요! 그건 완벽하게 작동합니다. 타임 아웃에서 50 밀리 초의 지연 시간을 보았습니다. 어떻게 50 밀리 초입니까? 시각적으로 없어 질 시간이 있는지 확인하는 것입니까? –

+0

대단히 환영합니다! 나는 100 % 확신 할 수는 없지만 그 라인을 따라 몇 가지 해킹에 익숙했기 때문에 몇 가지 변형을 시도해 보았습니다. 그러나 호기심을 위해서 나는 지금 당장 질문을 올렸습니다. http://stackoverflow.com/q/38086610/1666547 좀 더 정교한 대답을 위해 자유롭게 따라 해주십시오. –

+0

어떤 브라우저와 어떤 버전을 실행하고 있습니까? –

0

과거 브라우저가 요소를 다시 그리도록 강제하려면 :

setTimeout(function(){ 
    var elm = document.getElementById("gradient_text"); 
    elm.innerHTML="bar"; 
    elm.style.display = 'none'; 
    elm.style.display = 'block'; 
},500); 
관련 문제