美文网首页
制作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