EonerCMS——做一个仿桌面系统的CMS(十四)

简介:

  这次的功能不用我介绍,是的,就是要做那个win7下窗口超级预览的功能。为了方便,我就做个demo来演示,就不用图里的例子来做讲解了。

  首先,我们必须知道transform,它是CSS3中的新增属性,这次我们要用到的就是:transform:scale()。这里要提一点注意,scale()是不影响layout的,也就是scale()仅仅是视觉上效果不一样,实际的样式都是不变的,而且scale()的缩放是以中心缩放的,这就会造成一个浮动元素缩放后top、right、bottom、left在视觉上有偏移。

  具体我们还是来看下demo吧,演示界面是这个样子的

  右下角的蓝色层是可以拖动改变大小的,方便大家调整不同尺寸来展示超级预览功能,而左上角的“hover me”则是实现鼠标触发焦点显示出预览图的功能。代码不多,如下

  CSS

.tip{background-color:#ccc;width:180px;height:100px;display:none;position:relative;top:40px;left:40px}
.demo
{background-color:blue;width:200px;height:300px;position:absolute;top:150px;left:350px}
.drag
{position:absolute;right:0;bottom:0;width:10px;height:10px;background:red;cursor:nw-resize}

  JS

复制代码
$().ready(function(){
$('a').hover(function(){
//获得当前窗口的宽高
w = $('.demo').width();
h = $('.demo').height();
//计算left、top偏移量,保证超级预览中的缩略图始终居中
l = (w-180)/2*-1;
t = (h-100)/2*-1;
//计算缩放大小
if(w / h >= 1.8){
scale = 144/w;
}else{
scale = 80/h;
}
$('.demo').clone().appendTo('.tip').addClass('transform-scale');
$('.transform-scale').css({
width:w,
height:h,
left:l,
top:t,
'-webkit-transform':'scale('+scale+')',
'-moz-transform':'scale('+scale+')',
'-o-transform':'scale('+scale+')',
'-ms-transform':'scale('+scale+')'
});
$('.tip').fadeIn();
},function(){
$('.tip').hide().children().remove();
});

//改变窗口大小
$('.drag').on('mousedown',function(e){
cy = e.clientY;
cx = e.clientX;
h = $('.demo').height();
w = $('.demo').width();
$(window).on('mousemove',function(e){
_t = e.clientY;
_l = e.clientX;
$('.demo').css({width:(w-cx+_l)+"px"}).css({height:(h-cy+_t)+"px"});
}).on('mouseup',function(){
$(this).off('mousemove');
});
});
});
复制代码

  HTML

复制代码
<a href="###">hover me</a>
<div class="tip"></div>
<div class="demo">
<div class="drag"></div>
</div>
复制代码

  整体的思路就是,当在触发焦点时,复制一份蓝色窗口到预览区,通过计算得出缩放比,以保证预览图的大小不会超出预览区,然后就是上面有提到过的,因为缩放不会改变layout,仅仅是视觉效果,所以为了保证缩放后预览图能居中在预览区,我还计算了left、top的偏移量,最终效果就出来了,改变窗口大小后,能实时进行预览。

  源码下载:点击下载

  扩展阅读:《背景半透明最佳实践

  PS:昨天在闲逛时居然发现了这篇文章,真是对我莫大的支持啊,传送门


    本文转自胡尐睿丶博客园博客,原文链接:http://www.cnblogs.com/hooray/archive/2011/12/29/2305654.html,如需转载请自行联系原作者


相关文章
|
9月前
|
自然语言处理 安全 API
API First:模型驱动的阿里云API保障体系
本文介绍了阿里云在API设计和管理方面的最佳实践。首先,通过API First和模型驱动的方式确保API的安全、稳定和效率。其次,分享了阿里云内部如何使用CloudSpec IDL语言及配套工具保障API质量,并实现自动化生成多语言SDK等工具。接着,描述了API从设计到上线的完整生命周期,包括规范校验、企业级能力接入、测试和发布等环节。最后,展望了未来,强调了持续提升API质量和开源CloudSpec IDL的重要性,以促进社区共建更好的API生态。
|
前端开发 搜索推荐 JavaScript
Web前端网站(四)- 音乐播放器
【8月更文挑战第9天】页面整体色调背景采用柔和渐变的方式呈现,与主页面的“毒药水式”色彩搭配形成了强烈的对比;周边花瓣缓缓飘落到水面之上形成涟漪。整体给人一种温馨、浪漫的感觉,还可以通过中间的3个按钮来控制音乐的切换和播放效果。每一行代码都有详细注释~~~大家可以尽情创作
170 2
Web前端网站(四)- 音乐播放器
|
12月前
|
安全 Java API
SpringSecurity结合knife4j实现swagger文档
通过将Spring Security与Knife4j相结合,我们不仅能够为RESTful API提供强大的安全防护,还能保证API文档的易用性和可访问性,这对于API的设计、开发和维护来说至关重要。这种集成方式不仅提升了开发效率,也优化了API使用者的体验,是现代API驱动开发中不可或缺的一环。
466 0
|
存储 网络协议 算法
|
Java API 开发工具
解决 Android 依赖冲突
解决 Android 依赖冲突
468 0
|
Android开发 Kotlin
安卓Jetpack Compose+Kotlin, 使用ExoPlayer播放多个【本地】音频,播放完随机播放下一首,遇到播放错误,也自动播放下一首
使用Kotlin和Jetpack Compose开发的安卓应用中,实现了两个EvoPlayer同时播放res/raw目录下的音频。一个音轨播放人声(顺序播放),另一个播放背景音乐(随机播放)。每个音轨都有独立的播放和停止控制,且在播放结束或遇到错误时会自动切换到下一首。MediaPlayer置于ViewModel中,UI界面包含播放和停止按钮,控制两个音轨。每次切换音频前,还会随机调整播放速度在0.9到1.2之间。代码示例展示了如何创建ViewModel和UI以实现这一功能。
|
人工智能 搜索推荐 开发者
AI编程助手探索之旅:Amazon CodeWhisperer 提高编程效率的利器
随着人工智能技术的突飞猛进,编程领域也在经历着一场前所未有的变革。Amazon云科技的最新推出的AI编程助手Amazon CodeWhisperer,以其卓越的智能和效率,正在改变着开发者的编程方式。为了让更多的开发者能够深入了解和体验这一令人振奋的技术,我们启动了“用AI助力,提升编程效率 —— Amazon CodeWhisperer探索之旅”活动。本文将带您深入了解Amazon CodeWhisperer,并通过详细的实践,揭示其在实际应用中的巨大潜力。
303 0
|
JavaScript 前端开发 测试技术
理解 Proxy 和 Object.defineProperty:提升你的 JavaScript 技能(上)
理解 Proxy 和 Object.defineProperty:提升你的 JavaScript 技能(上)
理解 Proxy 和 Object.defineProperty:提升你的 JavaScript 技能(上)
|
XML 前端开发 数据安全/隐私保护
Shiro - RememberMe记住我功能实现
Shiro - RememberMe记住我功能实现
263 1
|
JSON fastjson 数据格式
几种Json工具包的解析速度对比
几种Json工具包的解析速度对比
415 0