WPF特效-实现弧形旋转轮播图
项目遇到,琢磨并实现了循环算法,主要处理循环替换显示问题
(如:12张图组成一个圆弧,但总共有120张图需要呈现,如何在滑动中进行显示块的替换,并毫无卡顿)
处理的自己感觉比较满意,记录一下。
2D效果图:
2D动态Gif效果:
2D思路: Canvas作为承载控件,控制显示个数,以角度作为判断是否显示的标准。 同时图片以线程池或者延时加载的方式实现加载性能的优化。
2D循环关键:
private void UpdateLocation()
{
for (int i = 0; i < this.ElementList.Count; i++)
{
NavItem oItem = this.ElementList[i];
if(oItem.Degree - this.CenterDegree >= this.TotalDegree /2d)
oItem.Degree -= this.TotalDegree;
else if(this.CenterDegree - oItem.Degree > this.TotalDegree / 2d)
oItem.Degree += this.TotalDegree;
if (oItem.Degree >= 90d && oItem.Degree < 270d) // Degree 在90-270之间的显示
this.SetElementVisiable(oItem);
else
this.SetElementInvisiable(oItem);
}
}
3D效果图:
3D动态Gif效果:
3D思路:以Viewport3D 作为容器,ModelVisual3D 实现元素块的承载,转动效果通过控制Camera的Angle角度实现。
以显示块构成圆弧的角度以及Camera的旋转角度为依据控制元素块是否呈现或隐藏。
3D循环替换关键:
private void DoUpdateLayout()
{
for (int i = 0; i < this.ElementList.Count; i++)
{
InteractivePanel3D oVisualItem = this.ElementList[i];
if (oVisualItem.Degree + this.CameraAngleYZm.Angle >= this.TotalDegree / 2d)
oVisualItem.Degree -= this.TotalDegree;
else if (oVisualItem.Degree + this.CameraAngleYZm.Angle <= -this.TotalDegree / 2d)
oVisualItem.Degree += this.TotalDegree;
//元素块角度与3D场景旋转角度的角度差; 角度差在定义的范围内则元素块显示,否则隐藏
double dDistanceToCenter = Math.Abs(oVisualItem.Degree + this.CameraAngleY.Angle - COriginViewprotAngel);
if (dDistanceToCenter <= CBoundDegree)
this.SetVisualItemVisible(oVisualItem);
else
this.SetVisualItemInvisible(oVisualItem);
}
}
WPF特效-实现弧形旋转轮播图的更多相关文章
- WPF特效-绘制实时2D激光雷达图
原文:WPF特效-绘制实时2D激光雷达图 接前两篇: https://blog.csdn.net/u013224722/article/details/80738619 https://blog.cs ...
- JS封装动画框架,网易轮播图,旋转轮播图
JS封装动画框架,网易轮播图,旋转轮播图 1. JS封装运动框架 // 多个属性运动框架 添加回调函数 function animate(obj,json,fn) { clearInterval(ob ...
- jQuery自适应-3D旋转轮播图
3D旋转轮播图 本例源于(站长之家实例http://sc.chinaz.com/jiaoben/170215391070.htm) 其他相似示例(https://www.cnblogs.com/inc ...
- JS-特效 ~ 05. 缓动框架兼容封装/回掉函数/兼容透明度/层级、旋转轮播图、正则表达式、验证表单注册账号、
缓动函数中opcity 写百分值的值 JS一般不用小数运算,会照成精度丢失 元素的默*认透明度是 层级一次性赋值,不缓动 利用for…in为同一个父元素的子元素绑定属性 缓动框架兼容封装/回掉函数/ ...
- 原生JS实现旋转轮播图+文字内容切换
废话不多说,直接上图看效果: 需求:点击左右按钮实现切换用户图片与信息: 原理:点击右侧左侧按钮,把3号的样式给2号,2号的给1号,1号的给5号,5号的给4号,4号的样式给3号,然后根据现在是第几张图 ...
- roundabout插件使用(3d旋转轮播图)兼容IE8
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- JQuery实现旋转轮播图
css部分 <style> *{ margin:; padding:; } .container{ width:100%; height:353px; margin-top: 20px; ...
- 第124天:移动web端-Bootstrap轮播图插件使用
Bootstrap JS插件使用 > 对于Bootstrap的JS插件,我们只需要将文档实例中的代码粘到我们自己的代码中> 然后作出相应的样式调整 Bootstrap中轮播图插件叫作Car ...
- CSS3,3D效果轮播图
---恢复内容开始--- 大家还记得我昨天的3D拖拽立方体吗??我昨天还说过css还可以做轮播图,所以咱们今天就写一下,css的轮播图吧! ....这个轮播图主要是用CSS3里的transform的旋 ...
随机推荐
- 【3002】删去K个数字
Time Limit: 3 second Memory Limit: 2 MB [问题描述] 输入一个数字串S和整数K(K小于数字串S的长度),从S中删去K个数字,使剩余数字在保持相对位置不变的情况下 ...
- Engine工具栏按钮的使用详解
转自原文 Engine自定义控件实现toolbar功能 Engine提供的工具条能够轻易实现各种操作,非常方便,可是不好的地方就是太死板了,toolbar的图标都不能改.因此需要自己做按钮做控件去实现 ...
- [React Native] Disable and Ignore Yellow Box Warnings in React Native
Yellow box warnings in react native can be intrusive. We will use console.disableYellowBox to disabl ...
- 【JAVA编码专题】总结 分类: B1_JAVA 2015-02-11 15:11 290人阅读 评论(0) 收藏
第一部分:编码基础 为什么需要编码:用计算机看得懂的语言(二进制数)表示各种各样的字符. 一.基本概念 ASCII.Unicode.big5.GBK等为字符集,它们只定义了这个字符集内有哪些字符,以及 ...
- 神经网络 vs 大脑
海马区域(负责记忆的关键区域) 0. 常见概念 神经递质:neurotransmitter 在突触传递中是担当"信使"的特定化学物质.简称递质. 重要的神经递质有:乙酰胆碱: 1. ...
- 益智小游戏(app)
最好的益智类游戏要基于一定的数学原理. 一笔完成:(拓扑学,哥尼斯堡问题) 哥尼斯堡七桥问题
- 访问sharepoint站点自动使用当前用户名和密码登录
https://blog.csdn.net/zw_2011/article/details/7417123 1.把sharepoint站点添入可信站点. 点击菜单栏“工具”——〉“Internet ...
- 【30.49%】【codeforces 569A】Music
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- jQuery笔记-jQuery筛选器children()详解
jQuery的选择包含两种,一种是选择器,一种是筛选器.筛选器是对选择器选定的jQuery对象做进一步选择. children()是一个筛选器,顾名思义就是筛选孩子,筛选那些符合条件的孩子. 完整的格 ...
- PDF编译出现错误解决的方法————————【Badboy】
额 今天 在编译PDF时发现使用了一下STL中的z数值极限居然编译只是. return GetRangeConstraint(value <= std::numeric_limits::max ...