【问题标题】:How to fade in - fade out three images with random place and random size?如何淡入 - 淡出随机位置和随机大小的三张图像?
【发布时间】:2017-12-07 19:48:49
【问题描述】:

我想放置一个以随机大小和随机位置随机淡入/淡出的 div。

我可以通过淡入/淡出随机显示三张图像,但我无法将它们随机放置在随机大小的位置。

http://jsfiddle.net/qq68m/139/

jquery:

jQuery(function(){
    function random(n) {
        return Math.floor(Math.random() * n);
    }
    var transition_time = 2500;
    var waiting_time = 100;
    var images = $('div#block img');
    var n = images.length;
    var current = random(n);
    images.hide();
    images.eq(current).show();

    var interval_id = setInterval(function () {
        images.eq(current).fadeOut(transition_time, function () {
            current = random(n);
            images.eq(current).fadeIn(transition_time);
        });
    }, 2 * transition_time + waiting_time);
})

html:

<div id="block">
    <img src="http://mobler.com.tr/wp-content/uploads/2017/07/rand1.png">
    <img src="http://mobler.com.tr/wp-content/uploads/2017/07/rand2.png">
        <img src="http://mobler.com.tr/wp-content/uploads/2017/07/rand3.png">

</div>

【问题讨论】:

  • 在此处分享您的代码
  • 对于随机放置,您需要使用具有随机顶部和左侧值的绝对 css 定位。其次,对于随机大小,您可以随机更改 css 比例。我希望这会有所帮助。
  • @viCky 感谢您的帮助。但我无法使 css 比例适应我的 div。 :(

标签: javascript jquery html css random


【解决方案1】:

这是我的解决方案。它允许您指定图像比例大小的范围,并确保无论比例如何,随机选择的位置都不会剪辑到容器之外。我希望这符合您的要求。

编辑:我更新了代码,现在非四边形图像也将保持其比例(如 Phil Murray 示例所示)。

如果按 css 高度/宽度设置大小不适合您,也许使用 CSS3 scaleX/scaleY 属性可能会给您带来更平滑的图像缩放结果。

如果您有任何其他问题,请在此帖子评论中提问。

jQuery(function(){
    function random(n) {
        return Math.floor(Math.random() * n);
    }
    var transition_time = 200;
    var waiting_time = 100;
    var images = $('div#block img');
    var n = images.length;
    var current = random(n);
    images.hide();
    images.eq(current).show();
    
    //get the size of the container
    var boxHeight = document.getElementById('block').offsetHeight;
    var boxWidth = document.getElementById('block').offsetWidth;
    
    //range of possible image scales
    var objectMaxHeight = 60;
    var objectMinHeight = 20;
    
    var interval_id = setInterval(function () {
        images.eq(current).fadeOut(transition_time, function () {
            current = random(n);
            
            //gets reference to selected image
            var $domImage = images.eq(current);
            
            //generates random heights and widths for the image to be shown in
            var generatedHeight = 
            		Math.floor(
                	Math.random() * (objectMaxHeight - objectMinHeight)
                 ) + objectMinHeight;

						// assigns values to the image
            $domImage.css('height', generatedHeight); 
            $domImage.css('width', "auto"); 
            
            var imageAutoWidth = $domImage.width();
            
            var generatedYLocation = Math.floor(
              Math.random() * (boxHeight - generatedHeight + 1)
            ) + 0;
            
            var generatedXLocation = Math.floor(
                Math.random() * (boxWidth - imageAutoWidth)
            ) + 0;
            
            $domImage.css('top', generatedYLocation);
            $domImage.css('left', generatedXLocation);
            $domImage.fadeIn(transition_time);
        });
    }, 2 * transition_time + waiting_time);
})
#block { 
  position: fixed;
  width: 300px;
  height: 300px;
  border: 1px solid red;
  background: yellow;
  overflow: hidden;
}

img {
  position:relative; 
  top: 0;
  left: 0;
  height: 100px;
  width: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="block">
    <img src="http://mobler.com.tr/wp-content/uploads/2017/07/rand1.png">
    <img src="http://mobler.com.tr/wp-content/uploads/2017/07/rand2.png">
    <img src="http://mobler.com.tr/wp-content/uploads/2017/07/rand3.png">
    <img src="https://www.fillmurray.com/g/200/500">
    <img src="https://www.fillmurray.com/g/500/200">
</div>

【讨论】:

  • 图像比例出现偏差。
  • 对,我已经解决了这个问题,现在应该可以正常工作了。如果您有任何其他问题,请发表评论。
  • 你是完美的。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2020-06-24
  • 2012-04-30
  • 2010-11-03
  • 2011-08-05
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 2012-01-16
相关资源
最近更新 更多