1.谁有flash展示酷炫一点的源码
2.你不知道的Popperjs上篇
谁有flash展示酷炫一点的源码
import mx.utils.Delegate;
import flash.display.BitmapData;
var numOfItems:Number;
var radiusX:Number = ;
var radiusY:Number = ;
var centerX:Number = Stage.width/2;
var centerY:Number = Stage.height/2;
var speed:Number = 0.;
var perspective:Number = ;
var home:MovieClip = this;
var tooltip:MovieClip = this.attachMovie("tooltip", "tooltip", );
tooltip._alpha = 0;
var tool_txt_ary:Array = new Array();
tool_txt_ary[0] = ".2寸笔记本";
tool_txt_ary[1] = ".6寸笔记本";
tool_txt_ary[2] = "金刚系列";
tool_txt_ary[3] = "靓酷系列";
tool_txt_ary[4] = "全能王系列";
tool_txt_ary[5] = "网吧电脑系列";
tool_txt_ary[6] = "雅典系列";
var numOfItems:Number = 7;
for (var i = 0; i<numOfItems; i++) {
var imageBmp:BitmapData = BitmapData.loadBitmap("icon"+i+".png");
var t = home.attachMovie("item", "item"+i, i+1);
t.angle = i*((Math.PI*2)/numOfItems);
t.onEnterFrame = mover;
t.toolText = _root.tool_txt_ary[i];
t.icon.inner.attachBitmap(imageBmp,1);
t.r.inner.attachBitmap(imageBmp,1);
t.icon.onRollOver = over;
t.icon.onRollOut = out;
t.icon.onRelease = released;
}
function over() {
home.tooltip.tipText.text = this._parent.toolText;
home.tooltip._x = this._parent._x;
home.tooltip._y = this._parent._y-this._parent._height/2;
home.tooltip.onEnterFrame = Delegate.create(this, moveTip);
home.tooltip._alpha = ;
home.tooltip.tipText._visible = true;
}
function out() {
delete home.tooltip.onEnterFrame;
home.tooltip._alpha = 0;
home.tooltip.tipText._visible = false;
}
var moved = true;
function released() {
moved = false;
speed = 0;
this.onEnterFrame = function() {
if (home._y>-) {
home._y -= 2;
home.bg_map._y+=2;
} else {
_root.attachMovie("messageBox","messageBox",this.getNextHighestDepth(),{ _x:0, _y:});
messageBox.click_btn.onPress = function() {
this._parent.black.onEnterFrame = function() {
if (home._y<0) {
home._y += 2;
home.bg_map._y-=2;
} else {
home._y = 0;
moved = true;
this._parent.removeMovieClip();
}
};
};
messageBox.messages.tipText.text="";
messageBox.menu1.screch_txt.text="";
messageBox.messages.tipText.text = this._parent.toolText;
messageBox.menu1.screch_txt.text = "金翔云-<"+this._parent.toolText+">";
delete this.onEnterFrame;
}
};
}
function moveTip() {
home.tooltip._x = this._parent._x;
home.tooltip._y = this._parent._y-this._parent._height/2;
}
function mover() {
this._x = Math.cos(this.angle)*radiusX+centerX;
this._y = Math.sin(this.angle)*radiusY+centerY;
var s = (this._y-perspective)/(centerY+radiusY-perspective);
this._xscale = this._yscale=s*;
this.angle += this._parent.speed;
this.swapDepths(Math.round(this._xscale)+);
}
this.onMouseMove = function() {
if (moved) {
speed = (this._xmouse-centerX)/;
}
};
你不知道的Popperjs上篇
ElementUI中Tooltip、Select、Cascader、TimePicker等组件是如何实现提示框定位到目标元素的?答案是借助于Popperjs,本文将深入探讨Popperjs的用法和特性。
在ElementUI的跃云授权源码源码中首次了解到Popperjs,但不清楚其具体版本。通过对比ElementUI代码与Popperjs 0.5.2版本,发现二者高度相似,因此可以判断ElementUI使用的是0.5.2版本的Popperjs。接下来,我们将从0.5.2版本开始,学习Popperjs的使用。
Popperjs的主要功能是将一个DOM元素定位到目标DOM元素附近,例如Tooltip、Popover、Popconfirm、pytorch 源码阅读Dropdown、Select等组件的提示框或弹窗位置。通过`getBoundingClientRect()`方法获取目标元素的位置,设置Popper元素的样式,使得其位于目标元素的右侧。
实现定位的基本思路是获取目标元素的位置,将Popper元素设置为固定定位,并根据目标元素的node module源码`right`和`top`值调整自己的位置。考虑到兼容性问题,对于IE9及以下浏览器,需要对`getBoundingClientRect()`方法进行兼容性处理。
除了基本功能实现,Popperjs还提供了丰富的扩展使用场景,如在不同方位定位Popper元素。通过配置属性`placement`,可以指定Popper元素的caffe源码brewmap定位方位,如`top-start`、`top-end`、`bottom-start`等。
为了实现不同方位的定位,Popperjs内部定义了`baseOffsets`数组,用于存储不同方位的默认位置。在计算最终位置时,根据`placement`值和`start`、vb算法源码`end`属性进行定位。此外,还需要考虑`margin`值对元素大小的影响,通过`getOuterSizes()`函数计算Popper元素的实际大小。
实现定位的代码中还包含了对`Window.getComputedStyle()`方法的使用,以获取元素的样式属性值。`_getOffsets`函数用于获取参考元素和Popper元素的位置和尺寸,计算最终的定位信息。在定位过程中,`_getOffsets`函数中使用了`shift`函数调整位置,确保`right`和`bottom`值的正确计算。
为了提升定位性能,可以利用CSS3硬件加速。通过`transform`属性实现元素的平移,避免页面重排和重绘。同时,需要对计算值进行四舍五入处理,以避免字体模糊。考虑到浏览器兼容性问题,需要添加获取当前浏览器支持的前缀属性。
最后,将定位功能封装在`applyStyle`函数中,提供了一套完整的定位解决方案。此外,Popperjs还支持滚动容器、保持DOM上下文、兼容性、可配置性、避免裁剪和溢出、快速翻转等特性。
本文仅介绍了Popperjs的扩展使用场景和CSS3硬件加速的基本概念。下篇将深入探讨保留DOM上下文、处理滚动条、裁剪和溢出、快速翻转等场景,以及如何进行自定义扩展。敬请期待。