2017-06-06 31 views
0
$(window).on('resize', function (event) { 
if ($('body').width() <= 480) { 


      $("circle").attr("cx", 115).attr("cy", 80).attr("r", 70).attr("transform", "rotate(-84, 100, 99)"); 
      $("#skills .row [class*=col-]").toggleClass("col-xs-6 col-xs-12"); 

     } 
} 

我的代碼是應該刪除的屬性,一旦它到達寬度< 480分配給定值,但這是不會發生的時候我檢查元素和設置屏幕尺寸爲iphone 5s(寬度:320px)。我可否知道它沒有改變的原因?我甚至將body.width()更改爲window.width(),但它不起作用。類屬性jQuery中達到特定的寬度後,不會改變

+0

你是什麼意思_「設置屏幕尺寸?」_如果您將視口的寬度調整爲較小的尺寸** **您的頁面已加載並且視口寬度大於'480px '那麼當你稍後調整它的大小時,你的代碼將不會做任何事情,因爲它已經運行**了。如果您在頁面加載時將頁面設置爲更小的視口大小,則應該運行代碼。如果你需要它在任何時候調整視口的大小,你應該把代碼放在'window'的'resize'事件的事件處理器中。我也會使用一個標誌來不要重複設置值。 – hungerstar

+0

那麼,一旦在iPhone 5s中打開代碼,我需要做什麼才能執行該代碼? – arun

+0

它應該在iPhone 5s上打開時運行,因爲視口足夠小。你如何測試這個?在桌面瀏覽器中,只需調整iPhone 5s的視口大小? – hungerstar

回答

1

既然你連接你的代碼到resize事件,你需要一個調整大小事件發生的代碼運行。加載頁面時不會發生這種情況。您可以刪除resize事件處理程序,並且您的代碼將在頁面加載時運行並查看寬度是否與斷點要求匹配。或者你可以使用一個命名函數(函數聲明)並將其傳遞給事件處理程序。然後調用指定的函數來初始化代碼,然後等待resize事件。

如果您只想一次調用此代碼,並且您不擔心初始頁面加載後視口大小在480px之上和之下變化,那麼您可以擺脫resize處理程序並運行代碼。

如果你想觀察頁面加載後的視口寬度,並希望隨時對它做出反應,它會在480px以上或以下發生變化,那麼你需要做一些類似於我下面的操作。

var $body = $('body'), 
 
    $rows = $('#skills .row [class*=col-]'), 
 
    $circle = $('circle'), 
 
    atOrUnderBreakpoint = false; 
 

 
function onResize(e) { 
 

 
    var $width = $body.width(); 
 

 
    if ($width <= 480 && !atOrUnderBreakpoint) { 
 

 
    $circle.attr({ 
 
     cx: 115, 
 
     cy: 80, 
 
     r: 80, 
 
     transform: 'rotate(-84 100 99)' 
 
    }); 
 
    $rows.toggleClass('col-xs-6 col-xs-12'); // Maybe use addClass() or removeClass() here? 
 

 
    atOrUnderBreakpoint = true; 
 
    console.log(1); 
 

 
    } 
 

 
    if ($width > 480 && atOrUnderBreakpoint) { 
 

 
    // Example. 
 
    $circle.attr({ 
 
     cx: 50, 
 
     cy: 50, 
 
     r: 20, 
 
     transform: '' 
 
    }); 
 

 
    atOrUnderBreakpoint = false; 
 
    console.log(2); 
 
    } 
 

 
} 
 

 
$(window).on('resize', onResize); 
 
onResize(); // Special case, don't wait for resize event this ONE time, apply right away.
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script> 
 

 
<svg viewBox="0 0 100 100" width="100" height="100"> 
 
    <circle cx="50" cy="50" r="20" fill="transparent" stroke="hotpink" stroke-width="2" /> 
 
</svg>

以上代碼中的jsfiddle:https://jsfiddle.net/rvmvn1t4/(滑動分頻器側到另一側來改變視區大小)。

我在代碼中看到並使用resize事件的一個問題是使用toggeClass()resize被稱爲很多,和col-xs-類將不斷添加/從元素中刪除。這將導致這些元素調整大小/閃爍。這裏的an example使用background-color,注意它在兩種顏色之間閃爍。類似的東西可能會發生在你的元素大小。

我會考慮切換到addClass()removeClass(),無論你需要什麼,並設置一些東西,防止你的代碼在斷點處應用後運行多次(你知道,防止閃爍等) 。我在我的例子中使用了一個標誌。

+0

謝謝你現在的工作 – arun

0

你可以使用jQuery resize功能

$('body').resize(function(){  
 
    console.log('body dimension changed'); 
 
    if ($('body').width() <= 480) { 
 
     $("circle").attr("cx", 115).attr("cy", 80).attr("r", 70).attr("transform", "rotate(-84, 100, 99)"); 
 
     $("#skills .row [class*=col-]").toggleClass("col-xs-6 col-xs-12"); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

+0

我已經更新了我的回答 – hasan

+0

當'480'下時,這不會不斷切換'col-xs-'類嗎?當我假設,他們只希望在'480'以下發生一次變化? – hungerstar

+0

我想他想檢查身體寬度,當它調整大小 – hasan