【问题标题】:onresize load function just onceonresize 仅加载一次
【发布时间】:2014-06-12 20:13:27
【问题描述】:

我正在尝试同时使用媒体查询和 JS。所以我需要对 4 种情况使用调整大小功能。 对于每种情况,我都需要删除图片,因此我必须在调整大小时以动态方式删除它们。 我有 4 个范围:1800+ - 1024 || 1024 - 640 || 640-320 || 320- 问题是即使分辨率在范围内,该功能也会启动并重新启动。 所以我想检测该功能何时启动,然后停止。 这是我所做的:

$(window).on('resize', function() {

  // Mosaic > 1024px
  var screenW = $(window).width();
  if (screenW > 1024) {
    var size = true;
    ....
  }
  if (screenW < 1024 && screenW > 640) {
    ...
  }
  ...
}

我不知道在检测到 size = true 时如何停止调整大小..

编辑: 谢谢大家!我现在有这个代码

function checkSize()
{
    var container = jQuery('#test');
    var screenW = jQuery(window).width();
    console.log(screenW);

    if (screenW > 1800 && current != 1800)
    {
        container.empty();
        jQuery('div#test').append("1800+\n") ;
        console.log('1800');
        current = 1800;
    }
    else if (screenW < 1024 && current != 1024)
    {
        container.empty();
        jQuery('div#test').append("1024+\n") ;
        console.log('1024');
        current = 1024;
    }
    else if (screenW < 640 && current != 640)
    {
        container.empty();
        jQuery('div#test').append("640+\n") ;
        console.log('640');
        current = 640;
    }
    else if (screenW <= 320 && current != 320)
    {
        container.empty();
        jQuery('div#test').append("320+\n") ;
        console.log('320');
        current = 320;
    }

}

而且我离我想要的错误也不远了,它工作得很好。例如 screenW This this fiddle..

【问题讨论】:

  • $(window).on('resize', function() { ==> 我的代码中已经有一个 .on
  • 一个不是on。不同的方法
  • 对我来说好吧!但它的工作方式与以前相同,刷新时消失的图片不会在调整大小时消失..

标签: javascript jquery resize media-queries


【解决方案1】:

编辑 您需要在加载时执行一次,然后在每次调整大小时执行它,但前提是您更改范围。 这是一个代码示例:

HTML:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<style>
    div#test {
        white-space:pre ;
    }
    div#minis {
        font-size:0 ;
    }
</style>
<div id="minis">
    <img src="https://lh6.googleusercontent.com/-LCEFh9RLZxk/AAAAAAAAAAI/AAAAAAAABwU/cIReqRyZR54/photo.jpg" width="50" />
    <img src="https://lh6.googleusercontent.com/-LCEFh9RLZxk/AAAAAAAAAAI/AAAAAAAABwU/cIReqRyZR54/photo.jpg" width="50" />
    <img src="https://lh6.googleusercontent.com/-LCEFh9RLZxk/AAAAAAAAAAI/AAAAAAAABwU/cIReqRyZR54/photo.jpg" width="50" />
    <img src="https://lh6.googleusercontent.com/-LCEFh9RLZxk/AAAAAAAAAAI/AAAAAAAABwU/cIReqRyZR54/photo.jpg" width="50" />
    <img src="https://lh6.googleusercontent.com/-LCEFh9RLZxk/AAAAAAAAAAI/AAAAAAAABwU/cIReqRyZR54/photo.jpg" width="50" />
    <img src="https://lh6.googleusercontent.com/-LCEFh9RLZxk/AAAAAAAAAAI/AAAAAAAABwU/cIReqRyZR54/photo.jpg" width="50" />
    <img src="https://lh6.googleusercontent.com/-LCEFh9RLZxk/AAAAAAAAAAI/AAAAAAAABwU/cIReqRyZR54/photo.jpg" width="50" />
    <img src="https://lh6.googleusercontent.com/-LCEFh9RLZxk/AAAAAAAAAAI/AAAAAAAABwU/cIReqRyZR54/photo.jpg" width="50" />
    <img src="https://lh6.googleusercontent.com/-LCEFh9RLZxk/AAAAAAAAAAI/AAAAAAAABwU/cIReqRyZR54/photo.jpg" width="50" />
    <img src="https://lh6.googleusercontent.com/-LCEFh9RLZxk/AAAAAAAAAAI/AAAAAAAABwU/cIReqRyZR54/photo.jpg" width="50" />
</div>
<div id="test"></div>

Javascript:

var current = null ;

function checkSize()
{
    var screenW = jQuery(window).width() ;

    if ( screenW > 1800 && current != 1800 )
    {
        // Do what you need to do for 1800+
        jQuery('div#test').append("1800+\n") ;
        showImages(10) ;
        current = 1800 ;
    }
    else if ( screenW > 1024 && screenW <= 1800 && current != 1024 )
    {
        jQuery('div#test').append("1024/1800\n") ;
        showImages(8) ;
        current = 1024 ;
    }
    else if ( screenW > 640 && screenW <= 1024 && current != 640 )
    {
        jQuery('div#test').append("640/1024\n") ;
        showImages(6) ;
        current = 640 ;
    }
    else if ( screenW > 320 && screenW <= 640 && current != 320 )
    {
        jQuery('div#test').append("320/640\n") ;
        showImages(4) ;
        current = 320 ;
    }
    else if ( screenW <= 320 && current != 0 )
    {
        jQuery('div#test').append("320-\n") ;
        showImages(2) ;
        current = 0 ;
    }
}

function showImages(number)
{
    var i = 1 ;
    jQuery('div#minis img').each(function(){
        if ( i > number ) jQuery(this).fadeOut() ;
        else jQuery(this).fadeIn() ;
        i++ ;
    }) ;
}

jQuery(window).resize(checkSize) ;
jQuery(document).ready(checkSize) ;

看看小提琴,看看它是否像你想要的那样工作: http://jsfiddle.net/HCc6E/2/

上一个答案 --------- 如果你真的希望它只被执行一次,你可以尝试 jQuery(window).off('resize') 而不是 var size = true。但我不明白为什么你不能只在你的情况下使用媒体查询:你能显示更多的代码或小提琴吗?

【讨论】:

  • 我希望它只执行一次,但如果我们从 320 传递到 1024 然后再到 320 它必须工作
  • 这应该是评论而不是答案
  • 感谢样品,非常有用。但是对于 .one,它的工作方式相同。我需要使用 js,因为随着宽度的减小,我需要擦除图片。这是问题所在,每次更改时我都需要从开始重新加载马赛克
  • 你叫什么擦除?你只是想在屏幕尺寸改变时隐藏它们?还是真的在物理上擦除文件?你能展示一下你现在拥有什么和/或你想要拥有什么吗(例如,你的 320 和 640 的屏幕截图)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多