图像幻灯片计算(位置,索引,which..)

Posted

技术标签:

【中文标题】图像幻灯片计算(位置,索引,which..)【英文标题】:Image Slide Calculation (position,index,which..) 【发布时间】:2014-05-21 13:05:35 【问题描述】:

目标

为低内存设备创建响应式幻灯片。(想象一组高分辨率图像。移动设备会崩溃)。我只想显示一个图像并预加载 N 个图像。

场景

假设我有 77 张图片(nI=77,变量)。 Obiovsly 我想加载第一张图片,但也想每边预加载 2 张图片(nP=2,变量)。 总共有 5 个框(center, 2left, 2right)。nB=nP*2+1.

在初始化时,我想按如下方式显示框/图像(数字是图像索引)

[75][76][0][1][2]

0,第一张图片是atm唯一可见的图片。

现在是棘手的部分。

如果我按<(下一个),静态可视化是:

[76][0][1][2][3]

但每个盒子都会移动!因此,如果我们从默认位置集开始:

[75][76][0][1][2]//image index
[ 0][ 1][2][3][4]//box index
[-2][-1][0][1][2]//box position

<

[76][0][1][2][ 3]//image index
[ 1][2][3][4][ 0]//box index
[-2][-1][0][1][2]//box position

按左键将以下图像加载到第一个框中,将第一个框移动到最后一个位置,每隔一个框向左移动(一个偏移宽度)。

>

[74][75][76][0][1]//image index
[4][ 0][ 1][2][3]//box index
[-2][-1][0][1][2]//box position  

按右将前一个图像加载到最后一个框,将最后一个框移动到第一个位置,每隔一个框向右移动(一个偏移宽度)。

一些相关的js

var I=ARRAYOFIMAGES,
    nI=images.length,
    nP=2,
    nB=nP*2+1,
    nC=0,
    slideWidth=slide.offsetWidth; // CURRENT IMAGE INDEX 200px variable

function defaultPos(a,b)//[-400, -200, 0, 200, 400] 
 for(a=[],b=0;b<nB;b++)
  a[b]=(b-nP)*slideWidth
 
 return a

function currentInd(a,b)//[75, 76, 0, 1, 2] 
 for(b=[],a=0;a<nB;a++)
  b[a]=(a+nC-nP+nI)%nI
 
 return b

function next(e)
 nC=++nC%nI;
 d=1; // direction 
 calculate()

function prev(e)
 nC=(--nC+nI)%nI;
 d=0;
 calculate()

function calculate()
 //for(BOXES)
 // if(ISIMAGE2CHANGE)box[l].style.backgroundImage='url('+I[IMAGEINDEX]+')')
 // box[l].style.webkitTransform='translate3d('+POSITION+'px'+',0,0)';
 //

部分工作演示

第一个演示

http://jsfiddle.net/VfYR4/

新演示(较短但无法加载正确的图像)

http://jsfiddle.net/7Nedw/1/

注意:将延迟调整为-webkit-transition:-webkit-transform 1000ms ease 1000ms;,看看发生了什么。

问题

数学是错误的。如果索引为 0 并且我向后移动,则位置和索引被弄乱了。

该函数返回错误的加载索引、位置以及加载哪个框。

【问题讨论】:

我也做过同样的工作。我正在预加载 4 张图片,第一张是向用户显示的,两张图片就在它的右边。并留下一张图像。如果你也想这样做,请告诉我。 不错,但我希望能够控制每侧预加载的图像数量。而且在每一侧我想预加载相同数量的图像。 【参考方案1】:

像这样给你的 html 标记

 <img src="" data-src="images/1.jpg" />
 <img src="" data-src="images/2.jpg" />
 <img src="" data-src="images/3.jpg" />
 <img src="" data-src="images/4.jpg" />

并使用此方法,当您按下左键或右键时:

function preLoadImages() 
        var $image = $(".my-image");
        var $imageUnloaded = $(".my-image[src='']");

        for(var i=current;i<current+4;i++)     //(current+1) is image index shown to user
            var j = (i+$image.length)%$image.length;
            console.log("Image to be loaded : "+j);
            var $this  = $($image[j]);
            if($this.attr('src') == '') 
                $this.attr('src',$this.data('src'));
            
        
    

如果您想更改每侧预加载图像的数量,您可以稍微更改逻辑。

【讨论】:

感谢您的帮助,但这并不能解决我的问题。顺便说一句,请不要 jquery,我不想更改标记或添加无用的变量。

以上是关于图像幻灯片计算(位置,索引,which..)的主要内容,如果未能解决你的问题,请参考以下文章

FFMPEG 图像到视频缩放起始位置

jQuery Cycle 插件 - 如何返回当前显示幻灯片的索引号?

幻灯片菜单正在推动其他元素

如何修复自动图像移动

垂直对齐包含 div 内的绝对定位 div

如何使用Aspose.Slides提取幻灯片中的图像