간단한 기능을 사용하여 콘텐츠를 숨기거나 표시하고 싶습니다. 휴대 기기에서만입니다.
함수 자체는 매우 간단합니다. 나는 여기이 코드를 사용 :
$('.toggleMobile').click(function() {
var hideableContent = $(this).parent().find('.hideable');
hideableContent.slideToggle('medium');
});
그래서 ... 아무것도 공상, 나는 알고있다.
브라우저보기 영역을 감지하려고하면 더 복잡해집니다.
나는 (당신은 아마 그것을 개선 할 수있는 방법을 찾을 것입니다) 나는 다음과 같은 라인을 사용하여 그 처리했다 생각 : 뷰포트 인 경우에만
function whatMedia() {
var viewport = $(window).width();
var mediaType;
if (viewport < 767)
mediaType = 'mobile';
else if ((viewport >= 767) && (viewport < 991))
mediaType = 'tablet';
else
mediaType = 'desktop';
return mediaType;
}
지금 난 그냥
트리거됩니다 기능을 필요 mobile
(아마도 여기에 문제가 있습니까?) :
function toggleMobile(mediaType) {
if (mediaType === 'mobile') {
$('.toggleMobile').click(function() {
var hideableContent = $(this).parent().find('.hideable');
hideableContent.slideToggle('medium');
});
}
}
페이지가 처음로드 될 때 뷰포트를 확인하는 데 아무런 문제가 없습니다. 난 그냥이 (코드의 아주 간단한 비트)를 사용 : 지금까지
// Check media type and activate accordingly
var mT = whatMedia();
toggleMobile(mT);
너무 좋아합니다. 이제 재미있는 부분이 있습니다.
사용자가 브라우저 창 크기를 조정하고 이에 따라 toggleMobile()
기능을 활성화/비활성화했는지 감지 할 수 있기를 원합니다..
나는이 작업을 수행 할 수 있습니다 :
당신은 아마 이미 아시다시피$(window).resize(function() {
var mT = whatMedia();
toggleMobile(mT);
}
이 $(window).resize
일이 웹킷을하고 다른 브라우저는 약간 미친 가서 한 사용자가 창의 크기를 조절하는 것처럼 기능을 반복합니다.
귀하의 의견에 따라 좋거나 나쁨입니다.
나는 개인적으로 이런 일이하고 싶지 않아, 그래서 내가 this function i found on the forums를 사용
var waitForFinalEvent = (function() {
var timers = {};
return function (callback, ms, uniqueId) {
if (!uniqueId) {
uniqueId = "Don't call this twice without a uniqueId";
}
if (timers[uniqueId]) {
clearTimeout (timers[uniqueId]);
}
timers[uniqueId] = setTimeout(callback, ms);
}
})();
:
$(window).resize(function() {
waitForFinalEvent(function() {
var mT = whatMedia();
toggleMobile(mT);
}, 500, '1');
}
이 확실히 크기 조정에서 브라우저 윈도우의 계산을 지연하지 하지만 그 안에 기능을 작동시킬 수 없습니다.
나는 문제가
목 함수는 두 번 이상 트리거됩니다, 뷰포트는 desktop
또는 tablet
로 인식하는 경우에도 :(무엇인지 모른다. togglemobile 기능에서
나는 [Modernizr] (http://www.modernizr.com/)을 봐야한다고 생각합니다. – Pointy
'toggleMobile'을 호출 할 때마다 ('mediaType'이 'mobile'인 경우) 이전의 이벤트 핸들러를 제거하지 않고 또 다른'click' 이벤트 핸들러를 추가합니다. 하나의 이벤트 핸들러를 가지고 있고 그 안에'mediaType'을 체크해야합니다. – sje397
@ Pointy 나는 Modernizr의 특징을 알지 못했습니다. 확실히 그걸 확인해 볼 것입니다. –