利用CSS3怎么做出不规则图片的切换特效制作

给大家带来一份源码,用css3怎么做出不规则图片的切换特效制作,有需要的朋友可以拿去用一下。

nbsp;html>TweenMax不规则图片切换特效
 
const TWO_PI = Math.PI * 2; var images = [], imageIndex = 0; var image, imageWidth = 768, imageHeight = 485; var vertices = [], indices = [], prevfrag = [], fragments = []; var margin = 50; var container = document.getElementById('container'); var clickPosition = [imageWidth * 0.5, imageHeight * 0.5]; window.onload = function() { TweenMax.set(container, {perspective:500}); // images from http://www.hdwallpapers.in var urls = [ 'images/1.jpg', 'images/2.jpg', 'images/3.jpg', 'images/4.jpg' ], image, loaded = 0; // very quick and dirty hack to load and display the first image asap images[0] = image = new Image(); image.onload = function() { if (++loaded === 1) { for (var i = 1; i < 4; i++) { images[i] = image = new Image(); image.src = urls[i]; } placeImage(); } }; image.src = urls[0];}; function placeImage(transitionIn) { image = images[imageIndex]; if (++imageIndex === images.length) imageIndex = 0; var num = Math.random(); if(num < .25) { image.direction = "left"; } else if(num < .5) { image.direction = "top"; } else if(num < .75) { image.direction = "bottom"; } else { image.direction = "right"; } container.appendChild(image); image.style.opacity = 0; if (transitionIn !== false) { triangulateIn(); }} function triangulateIn(event) { var box = image.getBoundingClientRect(), top = box.top, left = box.left; if(image.direction == "left") { clickPosition[0] = 0; clickPosition[1] = imageHeight / 2; } else if(image.direction == "top") { clickPosition[0] = imageWidth / 2; clickPosition[1] = 0; } else if(image.direction == "bottom") { clickPosition[0] = imageWidth / 2; clickPosition[1] = imageHeight; } else if(image.direction == "right") { clickPosition[0] = imageWidth; clickPosition[1] = imageHeight / 2; } triangulate(); build();} function triangulate() { for(var i = 0; i < 40; i++) { x = -margin + Math.random() * (imageWidth + margin * 2); y = -margin + Math.random() * (imageHeight + margin * 2); vertices.push([x, y]); } vertices.push([0,0]); vertices.push([imageWidth,0]); vertices.push([imageWidth, imageHeight]); vertices.push([0, imageHeight]); vertices.forEach(function(v) { v[0] = clamp(v[0], 0, imageWidth); v[1] = clamp(v[1], 0, imageHeight); }); indices = Delaunay.triangulate(vertices);} function build() { var p0, p1, p2, fragment; var tl0 = new TimelineMax({onComplete:buildCompleteHandler}); for (var i = 0; i < indices.length; i += 3) { p0 = vertices[indices[i + 0]]; p1 = vertices[indices[i + 1]]; p2 = vertices[indices[i + 2]]; fragment = new Fragment(p0, p1, p2); var dx = fragment.centroid[0] - clickPosition[0], dy = fragment.centroid[1] - clickPosition[1], d = Math.sqrt(dx * dx + dy * dy), rx = 30 * sign(dy), ry = 90 * -sign(dx), delay = d * 0.003 * randomRange(0.9, 1.1); fragment.canvas.style.zIndex = Math.floor(d).toString(); var tl1 = new TimelineMax(); if(image.direction == "left") { rx = Math.abs(rx); ry = 0; } else if(image.direction == "top") { rx = 0; ry = Math.abs(ry); } else if(image.direction == "bottom") { rx = 0; ry = - Math.abs(ry); } else if(image.direction == "right") { rx = - Math.abs(rx); ry = 0; } tl1.from(fragment.canvas, 1, { z:-50, rotationX:rx, rotationY:ry, scaleX:0, scaleY:0, ease:Cubic.easeIn }); tl1.from(fragment.canvas, 0.4,{alpha:0}, 0.6); tl0.insert(tl1, delay); fragments.push(fragment); container.appendChild(fragment.canvas); }} function buildCompleteHandler() { // add pooling? image.style.opacity = 1; image.addEventListener('transitionend', function catchTrans() { fragments.forEach(function(f) { container.removeChild(f.canvas); }); fragments.length = 0; vertices.length = 0; indices.length = 0; placeImage(); this.removeEventListener('transitionend',catchTrans,false); }, false); } //////////////// MATH UTILS////////////// function randomRange(min, max) { return min + (max - min) * Math.random();} function clamp(x, min, max) { return x max ? max : x);} function sign(x) { return x < 0 ? -1 : 1;} //////////////// FRAGMENT////////////// Fragment = function(v0, v1, v2) { this.v0 = v0; this.v1 = v1; this.v2 = v2; this.computeBoundingBox(); this.computeCentroid(); this.createCanvas(); this.clip();};Fragment.prototype = { computeBoundingBox:function() { var xMin = Math.min(this.v0[0], this.v1[0], this.v2[0]), xMax = Math.max(this.v0[0], this.v1[0], this.v2[0]), yMin = Math.min(this.v0[1], this.v1[1], this.v2[1]), yMax = Math.max(this.v0[1], this.v1[1], this.v2[1]); this.box = { x:Math.round(xMin), y:Math.round(yMin), w:Math.round(xMax - xMin), h:Math.round(yMax - yMin) }; }, computeCentroid:function() { var x = (this.v0[0] + this.v1[0] + this.v2[0]) / 3, y = (this.v0[1] + this.v1[1] + this.v2[1]) / 3; this.centroid = [x, y]; }, createCanvas:function() { this.canvas = document.createElement('canvas'); this.canvas.width = this.box.w; this.canvas.height = this.box.h; this.canvas.style.width = this.box.w + 'px'; this.canvas.style.height = this.box.h + 'px'; this.canvas.style.left = this.box.x + 'px'; this.canvas.style.top = this.box.y + 'px'; this.ctx = this.canvas.getContext('2d'); }, clip:function() { this.ctx.save(); this.ctx.translate(-this.box.x, -this.box.y); this.ctx.beginPath(); this.ctx.moveTo(this.v0[0], this.v0[1]); this.ctx.lineTo(this.v1[0], this.v1[1]); this.ctx.lineTo(this.v2[0], this.v2[1]); this.ctx.closePath(); this.ctx.clip(); this.ctx.drawImage(image, 0, 0); this.ctx.restore(); }};//@ sourceURL=pen.js 

登录后复制

不规则图片的切换特效制作的代码就是这些了,更多精彩请关注【创想鸟】其它相关文章!

相关阅读:

怎么用CSS3媒体查询

立即学习“前端免费学习笔记(深入)”;

怎么用CSS3媒体查询

立即学习“前端免费学习笔记(深入)”;

怎么用CSS3媒体查询

立即学习“前端免费学习笔记(深入)”;

以上就是利用CSS3怎么做出不规则图片的切换特效制作的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3121403.html

(0)
上一篇 2025年3月29日 17:50:37
下一篇 2025年2月18日 13:03:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 怎么用CSS3做出灯光照射显示文字动画

    有时候我们需要做这么一种特效,用灯光照射,然后显示文字动画,那么今天我们就来给大家带来灯光照射显示文字动画的源码 nbsp;html>    CSS3 实现灯光照射显示文字动画                   5iweb.com.…

    编程技术 2025年3月29日
    000
  • 怎样用css3做出图标效果

    说到现在的公司项目,相信不少公司的前端都是一团乱麻,不仅仅是因为js没有框架用,css也是不用框架,这样就导致了项目如果需要是升级或者需要维护的时候就特别的困难。 最近领导决定花大时间整理一下css样式,用他的一句话来说就是为后来者造福。 …

    编程技术 2025年3月29日
    100
  • CSS3的loading特效怎么制作

    css3的loading特效怎么制作?为什么要做loading特效?loading特效怎么设置?今天我们就给大家详细介绍一下。 nbsp;html>          CSS3 loading特效                   …

    编程技术 2025年3月29日
    100
  • CSS网页错位怎么处理

    在我们制作网页的时候,必须要注意几个点,才能让自己的网页美观流畅,那么如果css网页错位怎么处理呢?接下来给大家带来网页错位的处理方法以及预防方法。 为什么计算宽度 计算网页像素宽度是为了CSS网页布局整齐与兼容。常见的我们布局左右结构网页…

    编程技术 2025年3月29日
    100
  • CSS里的if条件hack怎么写

    今天为大家讲解div+css中条件hack知识与教程实例,各位朋友可以借鉴一下我们的这个例子。希望下面的案列对你有所帮助。 IE的CSS if条件Hack- css hack  为大家讲解DIV+CSS中if条件hack知识与教程实例 目录…

    编程技术 2025年3月29日
    100
  • CSS3里怎么实现首页穿墙广告效果

    如果大家进过拉钩网的话一定会对他们的网站首页影响深刻,首页的穿墙广告效果是非常炫酷的,那么这个穿墙广告的效果怎么实现呢?今天我们就带大家来操作一下。用css3来实现穿墙效果的广告。 nbsp;html>                …

    编程技术 2025年3月29日
    100
  • CSS3里怎么实现提示文字的弹窗效果

    文字的弹窗效果相信大家都有做过,不过在css3里,这种效果可以不需要额外的js代码来操纵,我们今天就给大家来实现一个不用js的提示文字的弹窗效果。 Css代码 [data-tips] {         position: relative…

    编程技术 2025年3月29日
    100
  • CSS3中过渡动画怎么使用

    我们知道,在css3中有一个 transition属性,它可以让动画在css层面实现,既不是利用setinterval(),不是定时器,而是底层c++在渲染,这样就使渲染动画的质量、丝滑程度都要远远优于js、jquery。我们今天就来看一下…

    编程技术 2025年3月29日
    100
  • 使用CSS3做出带有光晕流星旋转光环的效果

    今天教大家的这一份代码是用css3做出带有光晕的流星旋转光环的效果,感兴趣的朋友可以自己动手实践一下,案列代码如下: html {width: 100%;height: 100%;}body {width: 100%;height: 100…

    编程技术 2025年3月29日
    100
  • CSS3的主要功能应用

    我们知道css3虽然目前为止还没有正式成为标准,但是ie9+, chrome, firefox等现代浏览器全部都支持css3,它提供了很多以前用js和切图才能完成的功能,下面就给大家详细的介绍一下有哪些。 1.圆角 2.多背景 3.渐变色 …

    编程技术 2025年3月29日
    100

发表回复

登录后才能评论