使用 JavaScript 实现分屏视觉效果

时间: 2017-11-13阅读: 2207标签: 效果

今天这篇文章就来讲讲使用JavaScript来实现这种分屏的视觉UI效果。现在在网站上这种分屏视觉效果应用的也非常广泛,比如 Corsair website

HTML结构

先把基础结构样式弄好,要实现这个效果,需要使用div来构建两个panel。第一个赋予bottom类,另外一个为top类。然后使用一个类名为splitview来包裹起来。

<div class="splitview">
    <div class="panel bottom">
        <div class="content">

        </div>
    </div>   
    <div class="panel top">
        <div class="content">

        </div>
    </div>    
</div>

内容区域即content可以放任何东西,图片文字等等。

然后在splitview结构外面,再添加一个div类名为handle,用来加强表示分屏的视觉效果。

<div class="handle"></div>

样式

首先来写两个panel的样式,要实现这个效果需要用到绝对定位,所以要确保类名为top的panel在另外一个panel的上面。还有一点是为了可以自适应设备屏幕的大小,这里使用vw这个单位。

/* Panels. */
.splitview {
    position: relative;
    width: 100%;
    min-height: 45vw;
    overflow: hidden;
}

.panel {
    position: absolute;
    width: 100vw;
    min-height: 45vw;
    overflow: hidden;
}

为了区分两个panel,分别给两个panel赋予不同的背景颜色。确保top的z-index的值比另外一个panel大,就可以确保top这个panel在另外一个的上面。

.bottom {
    background-color: rgb(44, 44, 44);
    z-index: 1;
}

.top {
    background-color: rgb(77, 69, 173);
    z-index: 2;
}

要实现上面所说的分屏的效果,需要把一个panel的宽度设置为整个宽度的一半,得到如下图所示的效果:

JavaScript

现在整个UI效果已经完成,接下来就是使用JavaScript来实现分屏的交互效果。先定义一个函数,当DOM加载完之后才执行:

document.addEventListener('DOMContentLoaded', function() {

});

接下来先定义一些需要操作的基本变量,比如panel,handel等。

var parent = document.querySelector('.splitview'),
    topPanel = parent.querySelector('.top'),
    handle = parent.querySelector('.handle'),

定制handle

handle是用来加强分屏的视觉表现的。

/* Handle. */
.handle {
    height: 100%;
    position: absolute;
    display: block;
    background-color: rgb(253, 171, 0);
    width: 5px;
    top: 0;
    left: 50%;
    z-index: 3;
}

为了加强分屏的视觉表现,这里handle是一个5px宽的黄色线条,高度和内容区域的高度一样,z-index是3保证它在两个panel之上。

移动handle

当在视图上移动鼠标的时候,通过监听鼠标事件可以获取鼠标的坐标值即event.clientX,比如left等值。然后把值赋值给handle的left,这样就可以使handle随着鼠标的移动而移动。

parent.addEventListener('mousemove', function(event) {
        // Move the handle.
        handle.style.left = event.clientX + 'px';
});

同样为了实现跟随鼠标移动的分屏效果,还需要动态的改变panel的值,把panel的宽度实时根据鼠标移动的坐标值来改变即panel的宽度等于鼠标移动的值event.clientX

parent.addEventListener('mousemove', function(event) {
        // Move the handle.
        handle.style.left = event.clientX + 'px';

        // Adjust the top panel width.
        topPanel.style.width = event.clientX + 'px';
});

总结

一个简单的分屏视觉效果就完成了。你还可以通过样式来改变视觉的呈现,比如这里我通过CSS中的transform来使分屏呈现一个斜切的视觉效果,详细的代码可以去这里查看,demo地址

本文主要是从How to Create a Split-Screen Slider With JavaScript这篇文章整理而来,有删减,有疏漏或者理解不到位的地方,还请多多指教!

链接: http://www.fly63.com/article/detial/95

使用原生JS实现图片放大镜效果

前提先了解数学算法:求遮罩层mask宽度,大图、大图显示区、小图、遮罩层;小图是大图等比缩放的,遮罩层是大图显示区缩放的,小图/大图 = 遮罩层/大图显示区,遮罩层 = 大图显示区*(小图/大图);

CSS实现雨滴动画效果

今天我们要实现的是雨滴效果,不过实现雨滴前,我们先把毛玻璃的效果弄出来,没有玻璃窗,雨都进屋了,还有啥好敲打的。其实就是给一张图片,做了个模糊化的效果,看起来像毛玻璃的效果

纯css实现彩虹效果

实现思路:使用box-shadow画赤橙黄绿蓝靛紫7个弧形,拼接在一起;after伪元素写投影样式;彩虹和投影都有动画,用两个嵌套的div容器,父容器来控制图标显示的位置,子容器用来写彩虹的样式

CSS3转换

改变元素在页面中位置,大小,角度以及形状的一种方式:2D转换:只在x轴和y轴上发生转换效果,3D转换:增加了z轴的转换效果

纯css实现星级评分效果

纯css实现超酷炫的星级评分动画效果,实现思路:5个类型为radio的input,label标签修改样式背景图为星星,label标签给每个星星鼠标停留时加注名字,点击星星有放大旋转的动画

css按钮交互效果

是利用了:active和box-shadow两个特性来实现的。希望通过这个简单效果,能让更多的朋友喜欢上css。首先来说一下:active,就是当用户按住一个a标签的时候的意思,鼠标点击下去但没有松开的时候就这样样子啦。

Vue实现网页放大镜效果

组件使用less,请确保已安装loader,本组件为放大镜组件,传参列表为:width: 必传,设置放大镜的宽高(正方形),放大区域等同,放大倍数为2倍,picList:必传,传入图片列表

js实现放烟花效果

一个box中,点击其中的任意位置,会有烟花从正下方升起到点击处,并燃放出一圈圆形的烟花。代码如下:首先是布局以及样式:只给一个盒子的布局,燃放的烟花以及绽放的小烟花都是中js代码中创建。

js实现放大镜效果

使用电脑逛淘宝,京东等商城时,将鼠标移入图片中,图片会放大,之前一直在想这种是怎么实现的,前两天刚写出来,纯js实现的,无任何工具库。下面先来看下思路吧!刚学js的时候可能对于布局不是很重要

CSS实现DIV从隐藏到展示的过渡效果

CSS中有很多功能强大的方法,其中过渡属性transition就很牛叉。你不用写一行JavaScript代码,随便写点css就可以实现一个动画效果。下面结合我在W3C网站上看到的实例,举个栗子说明下

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全