2012-10-22 25 views
7

Tôi đang cố gắng tìm hiểu cách tôi có thể tùy chọn chạy một khối javascript dựa trên truy vấn thiết bị/phương tiện hiện tại. Tôi đang sử dụng Twitter Bootstrap và về cơ bản có hai phiên bản truy vấn phương tiện:Thực thi Javascript tùy chọn dựa trên Truy vấn phương tiện

@media (min-width: 980px) { ... } <!-- Desktops --> 
@media (max-width: 979px) { ... } <!-- Smaller screens/tablets/phones --> 

Tôi có bản đồ mà tôi tạo, nhưng không hiển thị bản đồ trong lý do forb và thông số phiên bản màn hình nhỏ/di động. Tuy nhiên, javascript vẫn thực hiện trong nền mặc dù bạn không thể nhìn thấy nó trên màn hình điện thoại di động. Vì vậy, tôi đang cố gắng để tìm ra cách trong javascript nơi tôi có thể làm điều gì đó như:

// Imaginary function 
var screenType = getScreenType(); 

if(screenType == 1) { 
    // Load map 
} 

Tôi đã read about người thiết lập thuộc tính CSS cho các giá trị cụ thể trong các truy vấn phương tiện truyền thông của họ và sau đó cố gắng để thấy rằng phần tử trong DOM dựa trên thuộc tính CSS, nhưng đã có một cách tốt hơn. Ý tưởng nào?

Trả lời

3

Làm thế nào về việc sử dụng javascript cho điều đó?

<script type="text/javascript"> 

if (screen.width < 980) { 

document.write('<link href="UrLowRes.css" type="text/css" rel="stylesheet"/>'); 

} else { 

document.write('<link href="UrlHighRes.css" type="text/css" rel="stylesheet"/>'); 

} 

</script> 
+0

Thú vị, tôi nghĩ đây sẽ là giải pháp có thể chấp nhận được. Cảm ơn. –

+0

Nếu chiều rộng cửa sổ của bạn có thể được thay đổi kích thước, bạn có thể cần thêm giám sát cho các thay đổi chiều rộng cửa sổ? – jfriend00

+0

Mối quan tâm chính của tôi không lãng phí băng thông trên thiết bị di động, vì vậy trong trường hợp này, thay đổi chiều rộng có thể không ảnh hưởng đến mục tiêu của tôi. –

10

Bạn có thể tìm ra Inquire .js thư viện hữu ích:

http://wickynilliams.github.com/enquire.js/

CSS-Tricks Bài chi tiết: http://css-tricks.com/enquire-js-media-query-callbacks-in-javascript/

+0

Thư viện rất hữu ích, mặc dù tôi suy nghĩ trong ví dụ cụ thể của tôi, Javascript thuần túy có lẽ là giải pháp trọng lượng nhẹ nhất. Cám ơn vì đã chỉ ra Mặc dù vậy, tôi có thể sẽ sử dụng nó trong các dự án trong tương lai. –

13

Câu trả lời được chấp nhận hiện nay là không đủ tốt, bạn nên kiểm tra window.matchMedia

Bạn có thể phát hiện những thay đổi chiều hướng khung nhìn, nhưng bạn phải tính toán các yếu tố như định hướng và tỷ lệ khung hình và không đảm bảo tính toán của chúng tôi sẽ khớp với các giả định trình duyệt của chúng tôi khi nó áp dụng các quy tắc truy vấn phương tiện.

Ý tôi là, bạn có thể tính X, nhưng giả định trình duyệt của bạn có thể được Y. Vì vậy, tôi nghĩ là tốt hơn để sử dụng quy tắc cùng một trình duyệt, và window.matchMedia làm nó

var jmediaquery = window.matchMedia("(min-width: 480px)") 
if (jmediaquery.matches) { 
    // window width is at least 480px 
} 
else { 
    // window width is less than 480px 
} 

Bạn thậm chí có thể nhận được truy vấn thông báo sử dụng một người biết lắng nghe

var jmediaquery = window.matchMedia("(orientation: portrait)"); 
jmediaquery.addListener(handleOrientationChange); 
handleOrientationChange(jmediaquery); 

function handleOrientationChange(jmediaquery) { 
    if (jmediaquery.matches) { 
     // orientation changed 
    } 
} 

Nếu bạn không còn cần phải nhận được thông báo về những thay đổi chỉ cần gọi removeListener()

jmediaquery.removeListener(handleOrientationChange); 
+0

Ý tưởng hay! Cảm ơn bạn đã luôn cập nhật câu hỏi này. –

+0

Câu trả lời được chấp nhận không cho phép bạn kiểm tra kết quả nếu bạn thay đổi kích thước cửa sổ trình duyệt của bạn, vì vậy để phát triển mục đích, câu trả lời này là tốt hơn. Thks! – StinkyCat

+0

thông tin chi tiết tuyệt vời, +1 – neophyte

Các vấn đề liên quan