美文网首页
制作web蒙版

制作web蒙版

作者: 天海相接 | 来源:发表于2018-03-15 19:27 被阅读19次

今天做项目需要制作蒙版。根据实际经验来看。基于ios比web制作蒙版容易太多了。为什么web制作蒙版这么难呢?在我看来因为web框架冲突,从另一方面看这也是web快速发展且比较随意的侧证。 下面进入正题。


脱离标准文档流

首先很多框架对对使用了某个class值的元素及其子元素进行改造。为了避免产生意外——蒙版要和页面主要文档流要分开!简单说所有蒙版元素放到body元素的最底部,然后在一个你认为爽的地方设置蒙版position:absolute。这样蒙版成功脱离标准文档流。

html文件,蒙版放在这里
</footer>
  <div class="mengban_text_con">
    <div class="title"></div>
    <div class="text"></div>
  </div>   
</body>
</html>
css文件,设置position
.mengban_text_con
{
  position: absolute;
  background:rgba(13, 89, 131, 0.9);
  filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=#8b0d5583,endcolorstr=#8b0d5583);
}

罩住元素

目前公司对前端的要求越来越高,前端开发工程师应当具备适配多终端。那么问题来了:如何罩住一个可能随屏幕宽度而改变位置大小的元素。准备好了吧?

写一个类专门处理位置依赖关系
function keep_within_bounds(ele)
{
    this.ele = $(ele);    //jquery对象也可以再包裹

                              //通过下面这个方法呢建立与另外一个元素的位置宽高依赖关系
                              //ele_prev:依赖元素
                              //x:相对依赖元素的水平偏移量。值若在再(0,1)之间,偏移量为依赖元素宽与x的乘积;若大于1,偏移x像素
                              //y:相对依赖元素的垂直偏移量。值若在再(0,1)之间,偏移量为依赖元素宽与x的乘积;若大于1,偏移y像素
                              //width:相对依赖元素的宽度。值若在再(0,1)之间,宽度为依赖元素宽与width的乘积;若大于1,宽度为依赖元素宽度+width
                              //height:相对依赖元素的宽度。值若在再(0,1)之间,宽度为依赖元素宽与height的乘积;若大于1,宽度为依赖元素宽度+height
    this.setframeWithEle_x_y_w_h = function(ele_prev,x,y,width,height)
    {
    
    var ele = this.ele;   
    var ele_prev = $(ele_prev);
    var x = x;
    var y = y;
    var width = width;
    var height = height;
    
    $(window).on(
    'resize',
    {ele:ele,ele_prev:ele_prev,x:x,y:y,width:width,height:height},
    function(event)
    {
        var ele = event.data.ele;
        var ele_prev = event.data.ele_prev;
        var x = event.data.x;
        var y = event.data.y;
        var width = event.data.width;
        var height = event.data.height;
        if(0<x && x<1)
        {x = ele_prev.width() * x}
        if(0<y && y<1)
        {y = ele_prev.width() * y}
        if(width<=1)
        {width = ele_prev.width() * width;}
        else
        {width += ele_prev.width()}
        if(height<=1)
        {height = ele_prev.height() * height;}
        else
        {height += ele_prev.height()}
        ele.css('position','absolute')
        ele.css({'left':ele_prev.offset().left - x + 'px',
                 'top':ele_prev.offset().top - y + 'px',
                 'width':width + 'px',
                 'height':height + 'px'})
    });
}
}
实例化对象,调用方法
//---当页面准备好,pageshow之前---
$('document').ready(function(){
  var ser_row1_row = $('.mengban_text_con');
  var ser_row1_row_prev = $('.mengban_text_con_b');
  var b = new keep_within_bounds(ser_row1_row);
  b.setframeWithEle_x_y_w_h(ser_row1_row_prev,0,0,1,1);
      $(window).resize();      //主动触发一次resize事件
});

这样,当依赖元素位置宽高随着屏幕宽度变化而变化后,在window的resize事件监听者中重新计算蒙版的位置和宽高。谢谢

相关文章

网友评论

      本文标题:制作web蒙版

      本文链接:https://www.haomeiwen.com/subject/brghqftx.html