2016-12-23 39 views
0

有這麼多關於cookieslocalStorage(設置,刪除...)的文章,但是我不清楚我應該在哪裏放置一些代碼。如何記住樣式更改?

即,我試圖改變CSS樣式表單擊一個按鈕,但不能保存下一次加載頁面的選擇。喜歡的東西:

params.php

if (user clicked on "btntheme") { 
    $theme = 'green.css';  
}else{ 
    $theme = "blue.css"; 
}; 

的index.php

<?php include ("params.php");?> 
<head> 
<link id="link01" rel="stylesheet" href="<?php echo $theme;?>"> 
</head> 

<body> 
<div id="btntheme">THEME</div> 
</body> 

JS

$('#btntheme').click(function(){ 
    $('#link01').attr('href', 'green.css'); 
}); 

這改變了風格,但僅適用於當前會話。我怎麼能告訴params.php,以後$themegreen.css,而不是blue.css

回答

1

使用本地存儲是很容易的。

要設置

localStorage.setItem('theme','green'); 

要獲得

localStorage.getItem('theme'); 

所以,你可以只使用一個函數從LS獲取,然後設置你的樣式表。

function changeTheme(){ 
    var theme = localStorage.getItem('theme'); 
    $('#link01').attr('href', theme + '.css'); 
} 

$('#btntheme').click(function(){ 
    localStorage.setItem('theme','green'); 
    changeTheme(); 
}); 

,你可以直接調用該函數在document.ready函數來設置它在頁面加載以及。

+0

我treid,它的工作原理,但我看到所有的元素首先用'blue.css'(大約一兩秒)的樣式,然後出現'green.css'。也許這不會發生使用Cookie,而是? – bonaca

+0

這可能是因爲您使用PHP來回應主題。爲什麼不在JS中處理它。PHP在頁面後加載並運行。 – TheValyreanGroup

1

您可以使用select元素將localStorage設置爲用戶選擇的值。使用$.holdReady(true)來檢查localStorage是否不是null,如果在密鑰處設置了值,則設置hreflink元素,否則請致電$.holdReady(false)。如果用戶沒有做出選擇,會考慮爲link元素設置默認href

HTML

<!-- set default value at `href` --> 
<link id="link01" rel="stylesheet" href="<?php echo $theme;?>"> 

<select> 
    <option>Select a theme</option> 
    <option value="green.css">Green Theme</option> 
    <option value="blue.css">Blue Theme</option> 
</select> 

的JavaScript

$.holdReady(true); 

if (localStorage.getItem("theme") !== null) { 
    $("#link1").attr("href", localStoage.getItem("theme")) 
} 

$.holdReady(false); 

$(function() { 
    $("select").change(function(e) { 
    $("#link1").attr("href", this.value); 
    localStorage.setItem("theme", this.value); 
    }); 
}); 
+0

我喜歡它,但它可以工作,但我看到所有元素首先用'blue.css'(大約一兩秒)的樣式設置,然後出現'green.css'。也許這不會發生使用Cookie,而是? – bonaca

+0

嘗試用''元素替換'

  • 11. 記住未提交的更改
  • 12. 如何更改活動鏈接樣式
  • 13. 如何更改jQuery文本()的樣式?
  • 14. 如何更改Android中的樣式
  • 15. 如何更改android的按鈕樣式
  • 16. 如何更改CheckBox控件的樣式
  • 17. 如何更改jqgrid分頁樣式
  • 18. 如何更改ActionBar中MediaRouteButton的樣式?
  • 19. 如何更改SWT中String的樣式?
  • 20. 如何更改元素樣式顏色
  • 21. 如何動態更改CSS樣式
  • 22. 如何更改選項菜單樣式
  • 23. 如何更改AlertController的樣式Swift 3
  • 24. 如何更改popToRootViewController的轉換樣式?
  • 25. AngularJS bootstrap ui - 如何更改css樣式?
  • 26. 如何更改柵格圖層樣式
  • 27. 如何更改滾動條樣式
  • 28. 如何更改標籤樣式CMTimeGetSeconds
  • 29. 如何根據值更改css樣式
  • 30. 如何更改extjs4中的fieldLabel樣式