返回首页


{A}目录{A2的}{A3的}{A4纸}{A5的}{A6的}{A7的}{A8的}{A9的}{A10的}{A13号}{A14高速公路}简介
疏散宝丽来的第一部分是一个项目,我为我的的朋友Janaina罗西・莫雷拉,在巴西的剧团工作的发展名为quot;正如Bárbaras做Multeatroquot的;
该项目的目标是宣传公司的工作,并在同一时间提供了一个很好的音频和视觉体验的游客,依托于多媒体, 视频,影像,诗歌和回忆,更好地捕捉公司的艺术精髓。
有很多可以发展的途径之一,通常在一种有序的方式浏览照片集。散乱宝丽是一个不同的方法,喜欢当你把一个旧箱子的图片,删除表上的所有这些,并开始随机挑选。本文涉及这项技术,并希望以某种方式对你有帮助。{A17中}系统需求
为了运行的散乱的宝丽来连接到这篇文章的样品,你必须有一个浏览器支持CSS3 2D变换:
{S}Internet Explorer 9的或上级火狐野生动物园铬宝丽盒
{S2的}
宝丽盒的元素,将持有的图片,并接收鼠标功能所需的一些事件。
这是强制性的,你有一个polaroid_box格,在您的网页或图片持有人可以作为另一个。

<body>

    <div class="polaroid_box">

    </div>

</body>
载入图像
{S3的}
加载的图像在一个简单的字符串数组,它描述的图像的URL路径:{C}
一旦数组被加载,可以致电createPolaroids,功能呈现给定的父元素内所有需要的DOM元素:
...

    maxZIndex = images.length;

    createPolaroids($('.polaroid_box'), images);

...
{A20的}创建宝丽
{四至}
在这里,最重要的部分显然是创建DOM元素,会使我们在页面的偏振片。请注意我们将在很大程度上依赖jQuery JavaScript框架。这既减少最枯燥的工作,也确保我们将避免跨浏览器的问题。{体C3}{A21号}生成随机的位置和旋转
我们需要产生随机位置和旋转每个宝丽来,否则不能被称​​为"scatteredquot;偏振片。因此,所有在这里,我们需要做的是产生属于我们的屏幕上可以接受的边界之间的数字(也就是说,图片包含在一个盒子里,所以我们不希望我们的照片脱落在屏幕上)。{的C4}
现在,我们已经收集了宝丽来所需的所有数据,我们创建了一个新的宝丽莱类型,保存这些信息。这将是有益的封装数据提供操纵偏振片的方法。{C5的}
然后将信息提供宝丽来作为一个构造的功能,然后将举行的实例参数:{5233}{A22号}定位和旋转宝丽
{五}
宝丽来加载数据后,我们就可以调用updateLayout原型的功能,将相应更新所需的CSS属性:{C7-}
重要的是要注意到,在上面的代码段的最后一行提供的主流浏览器的CSS转换:WebKit的变换:Chrome和SafariMOZ-变换:火狐msTransform:Internet Explorer中{A23}使用CSS3盒阴影
{六}
CSS3盒阴影的阴影,概述了我们的照片。这是一个不错的功能,使我们的网页视觉吸引力。但由于发生在这个世界上最漂亮的东西,你应该使用它与节制。一个框的阴影,需要激烈的加工,这取决于你如何使用它。我们的宝丽CSS类定义与框阴影的偏移量(4,4)和32个像素的深度: {C8的}
正如您稍后将看到,在这篇文章中,我们删除宝丽动画,性能更好的效益,在框阴影。作为小费,它可能是一个好主意,放弃使用箱阴影,代之以一个静态的png图片(PNG图像允许透明度)。,从而提高了性能。{A24的}拖放拍立得
应用程序知道宝丽来是被拖到存储宝丽来在selectedPolaroid变量的实例。当你点击一些宝丽,宝丽来的mousedown事件将被触发,将存储selectedPolaroid。
$('.polaroid').mousedown(function (event) {

    var id = $(this).attr('id');

    var i = id.replace('polaroid', '');



    var polaroid = polaroids[i - 1];



    if (polaroid.scale == minScale) {

        polaroid.zIndex = maxZIndex++;

        polaroid.updateLayout();



        if (selectedPolaroid) {

            selectedPolaroid = null;

        }

        else {

            selectedPolaroid = polaroid;

            selectedPolaroid.xOffset = event.pageX - selectedPolaroid.left;

            selectedPolaroid.yOffset = event.pageY - selectedPolaroid.top;

        }

    }

    else {

        if (zoomedPolaroid.id == polaroid.id) {

            polaroid.drop();

        }

    }

});

从这个角度上,任何鼠标移动将触发mousemove事件,宝丽来框和选定的宝丽莱位置将被更新:{C10的}
的拖放式结束后,当你松开鼠标按钮。在这一点上,我们设置selectedPolaroid的变量为null。{C11的}{A25}拉宝丽来
在某些时候,你发现有趣图片,希望看到更接近。所以,你双击它。这将触发动画功能在我们的应用程序,将带来一个宝丽来前。画面看起来更大,在屏幕中心的完美直。这是通过一个动画,这是此应用程序的更复杂的部分,要更好稍后解释。一旦宝丽来,我们设置zoomedPolaroid的变量和等待,直到用户下降或双击另一张照片。{C12的}{A26}删除宝丽
放大宝丽被丢弃时,它的用户点击或双击另一个偏振片。这将启动反向动画,和宝丽来将离开屏幕的中心,并回到它以前的位置,规模,和旋转角度。通过JavaScript {A27高速公路}生动活泼的视线
{七}
动画是复杂的部分。他们需要的目标规模,目标旋转角度,以及目标位置。由于宝丽来可去中心或即将回到它以前的位置,我们避免重复代码封装里面的动画功能的核心功能。
首先,我们计算的增量(一个角度,另一个为一体的规模,和两个三角洲的位置)。然后我们计算的步骤(即增量每次迭代将适用于目前动画值)。然后,我们开始setInterval函数重新宝丽来,旋转,和更新底层的DOM元素,动画,直到达到目标值。
polaroid.prototype.animate = function (targetScale, targetRotation, 

         targetLeft, targetTop, beginCallback, endCallback) {

    var pol = this;



    if (pol.isMoving)

        return;



    pol.isMoving = true;



    var parentWidth = this.$parentEl.width();

    var parentHeight = this.$parentEl.height();



    var polaroid = pol;



    if (beginCallback)

        beginCallback(polaroid);



    var angleDelta = targetRotation - polaroid.rotation;

    var scaleDelta = targetScale - polaroid.scale;

    var leftDelta = targetLeft - polaroid.left;

    var topDelta = targetTop - polaroid.top;



    var steps = animationSteps;

    var scaleStep = scaleDelta / steps;

    var rotationStep = angleDelta / steps;

    var leftStep = leftDelta / steps;

    var topStep = topDelta / steps;



    var interval;



    var rotation = polaroid.rotation;

    var scale = polaroid.scale;

    var left = polaroid.left;

    var top = polaroid.top;



    var $polaroid = $('#polaroid' + pol.id);



    $polaroid.css('z-index', 100);



    $polaroid.css({ "-moz-box-shadow": "0 0 0 #fff" });

    $polaroid.css({ "-webkit-box-shadow": "0 0 0 #fff" });

    $polaroid.css({ "box-shadow": "0 0 0 #fff" });



    var interval = setInterval(function () {

        if (

                (scaleStep > 0 && scale >= targetScale) ||

                (scaleStep < 0 && scale <= targetScale)

            ) {

            scale = targetScale;

        }



        $polaroid.css({ WebkitTransform: 'rotate(' + rotation + 

                        'deg) scale(' + scale + ')' });

        $polaroid.css({ '-moz-transform': 'rotate(' + rotation + 

                        'deg) scale(' + scale + ')' });

        $polaroid.css({ msTransform: 'rotate(' + rotation + 



                        'deg) scale(' + scale + ')' });

        $polaroid.css('left', left + 'px');

        $polaroid.css('top', top + 'px');



        if (scale == targetScale) {

            $polaroid.css({ "-moz-box-shadow": "4px 4px 32px #000" });

            $polaroid.css({ "-webkit-box-shadow": "4px 4px 32px #000" });

            $polaroid.css({ "box-shadow": "4px 4px 32px #000" });



            pol.isMoving = false;



            clearInterval(interval);



            rotation = targetRotation;

            scale = targetScale;

            left = targetLeft;

            top = targetTop;



            pol.rotation = targetRotation;

            pol.scale = targetScale;

            pol.left = targetLeft;

            pol.top = targetTop;



            pol.updateLayout();



            if (endCallback)

                endCallback(polaroid);

        }



        rotation += rotationStep;

        scale += scaleStep;

        left += leftStep;

        top += topStep;

    }, 5);

};
最后的注意事项{A28}
我希望你喜欢的文章和代码。我想在这里介绍的技术是简单而有用的。请留下评论,让我知道你想想看,在下面的部分。{A29}历史2011年8月28日:初始版本。 |马塞洛・里卡多・奥利维拉:Sophia_xd

回答

评论会员:游客 时间:2012/02/04
赛义德・巴沙尔:很不错的文章,我喜欢你的代码。我只是想讨论性能问题。我已经运行演示应用了9.5s,只有21张。您的图像大多是400x400的。你双击缩放图像。为了提高性能,这是更好,如果图像是在100x100的大小,双击后在一个特定的图像应用程序从服务器下载原有的优良品质形象。这将提高100图片加载时间甚至:马塞洛・里卡多・奥利维拉
感谢非常,赛义德。是的,你是正确的,有关性能。我已经更新了现场演示,为每个图像的最小化版本,以减少加载时间。此外,还有一个隐藏的分区异步渲染图像。当您双击图像,全尺寸的图像呈现。现在我更新的文章。
欢呼声中,
马塞洛
有没有免费的午餐。让我们等待的晚餐。

采取} {A30的看看这里的代码项目
评论会员:赛义德・巴沙尔 时间:2012/02/04
感谢您的评论。我看到的图像的最小化你正在使用的版本,但在第一次载入原来的400x400的图像下载。请固定的问题,它正在13.8s之前,它是9.5。从你的评论,我理解,图像不应该没有双击下载的异步。此外,如果你用更多更好的图像质量和更大的差异可能是更好地了解,到目前为止,它会给你更好的观点,我明白了。

感谢
评论会员:游客 时间:2012/02/04
|戴夫克尔:这是严重很酷的东西,辉煌的文章
!马塞洛・里卡多・奥利维拉
评论会员:游客 时间:2012/02/04
感谢的客气话,戴夫欢呼声中,马塞洛有没有免费的午餐。让我们等待的晚餐。采取}{A30的看看这里中的代码项目
沙基尔伊克巴尔:很不错的文章
-----------------------------
沙基尔伊克巴尔
------------------------------
评论会员:游客 时间:2012/02/04
马塞洛・里卡多・奥利维拉:非常感谢,沙基尔欢呼声中,马塞洛有没有免费的午餐。让我们等待的晚餐。以1{A30的}看看代码项目在这里|。马塞洛・里卡多・奥利维拉
优秀我记得有1小孩,但我们的很多这些有底部说明
评论会员:游客 时间:2012/02/04
马塞洛・里卡多德奥利韦拉
多谢了!我还记得未来的宝丽来相机,当我还是个孩子的照片,它是像魔术

欢呼声中,
马塞洛
有没有免费的午餐。让我们等待的晚餐。

采取} {A30的看看这里
中的代码项目
评论会员:游客 时间:2012/02/04
。萨拉夫Talukder:我是通过你的代码试图找出浏览,如果可以在每个宝丽来的底部添加一个文本框只是怀旧,我觉得。{S10的}磨破的名字说,就是这一切
马塞洛・里卡多・奥利维拉
评论会员:游客 时间:2012/02/04
所有的方式。尼斯和清洁(精益和平均隐含{S8的})作为一个侧面说明,它的执行方式上的IE9优于FF或浏览器的最新版本(努力保持计数)。在Chrome和FF,我可以看到,尤其是在一些帧动画(S)双击开始。{S12的}所有最好的,丹
BrianBissell
评论会员:游客 时间:2012/02/04
太感谢你了是的,我注意到对IE9的运行速度更快。太糟糕了,WINXP用户使用IE8无法从IE8,IE9的更新。欢呼声中,马塞洛有没有免费的午餐。让我们等待的晚餐。采取}{A30的看看这里的代码项目
马塞洛・里卡多・奥利维拉
评论会员:游客 时间:2012/02/04
真的很好..{S8的},萨拉夫Talukder看看我的最新文章:{A35号}:mahendren
感谢的人,很高兴你喜欢它{S8的}
有没有免费的午餐。让我们等待的晚餐。

采取} {A30的看看这里
中的代码项目
评论会员:游客 时间:2012/02/04
马塞洛・里卡多・奥利维拉。真棒使用,明确和理解击穿,干净的代码谢谢
埃斯Harlinn
评论会员:游客 时间:2012/02/04
感谢布莱恩,我很高兴你喜欢它{S8的}有没有免费的午餐。让我们等待的晚餐。采取}{A30的看看这里中的代码项目
马塞洛・里卡多・奥利维拉
评论会员:游客 时间:2012/02/04
写得很好,支持大多数浏览器
Meshack Musundi
评论会员:游客 时间:2012/02/04
,谢谢mahendren欢呼声中,马塞洛有没有免费的午餐。让我们等待的晚餐。采取}{A30的看看这里中的代码项目
马塞洛・里卡多・奥利维拉:写得很好的文章马塞洛,出色的工作,S16号}
,埃斯Harlinn
高级建筑师,软件 - Goodtech项目服务
评论会员:IlkaGuigova 时间:2012/02/04
埃斯嗨,。,谢谢!很高兴你喜欢它。
欢呼声中,
马塞洛
有没有免费的午餐。让我们等待的晚餐。

采取} {A30的看看这里的代码项目
评论会员:游客 时间:2012/02/04
{马塞洛・里卡多・奥利维拉:干得漂亮马塞洛的S12}这使我想起我的东西,在WPF中,我做了一些时间。{S8的}欢呼!