试卷袋封面打印项目总结--兼容处理

项目描述:改变了以往老师们手写相同试卷封面的方式,使用线上系统填写,一键打印,多份生成。提高效率,避免不必要的工作。

 为何要处理浏览器兼容性:

  浏览器内核主要分为两种:渲染引擎 和 JS引擎( 例如谷歌的V8 );内核更倾向于渲染引擎。

  • CSS兼容
  • JS兼容

一开始随着互联网的发展,不同浏览器之间的开发标准没有统一,到了最后才一致使用W3标准。

一、添加meta

项目中用到了比较多的meta属性,这里顺便介绍一下

  meta就是告诉浏览器( 如何显示内容或重新渲染页面 ),搜索引擎(关键字)。相当新学期在讲台上自我介绍( html 的meta属性 ),自己喜欢什么,讨厌什么。让班主任(搜索引擎)更了解你。

常见属性:

<meta name="viewport" content="width=device-width, initial-scale=1.0,  user-scalable=no"> //用于媒体查询
<meta name="renderer" content="webkit|ie-stand">  //强制Chromium内核,能使用标准模式就是用标准模式
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" /> //优先使用最新的ie版本

二、当时不明白的细节

  1. href、src区别?

    href( Hypertext Reference ) 网络资源位置,浏览器识别当前资源是一个样式表,页面解析不会暂停,另开线程加载CSS资源,同时生成 DOM 和 CSSOM

    src( Source )属性仅仅嵌入当前资源到当前文档元素定义的位置,在浏览器下载(等到DOMContentLoaded事件后执行),编译,执行这个文件之前页面的加载和处理会被暂停。这个过程与把js文件放到<script>标签里类似。这也是建议把JS文件放到底部加载的原因。当然,img标签页与此类似。浏览器暂停加载直到提取和加载图像。

    请求资源类型不同

    • href指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的联系。
    • 在请求src资源时会将其指向的资源下载应用在文档中,并替换当前内容

   2.不要使用table标签(因为一开始我不熟练css)

    • able标签解压后占用较多的字节
    • Tablle会阻挡浏览器渲染引擎的渲染顺序
    • able里显示图片时需要你把单个、有逻辑性的图片切成多个图
    • 一旦学了CSS知识,你会发现使用table做页面布局会变得更麻烦

三、处理兼容

CSS兼容,避免使用css3属性

1.采用重置通用属性样式

2.透明兼容样式

opacity: 0.5;
filter: alpha(opacity = 50); //IE6-IE8我们习惯使用filter滤镜属性来进行实现
filter: progid:DXImageTransform.Microsoft.Alpha(style = 0, opacity = 50); //IE4-IE9都支持滤镜写法progid:DXImageTransform.Microsoft.Alpha(Opacity=xx)
交互兼容性(javascript)

3.宽度兼容

标准模型:  box-sizing:content-box   //width = content    
盒子模型:   border-box   // width = content+padding+border  

4.使用浏览器私有属性

说到私有属性的出现也是因为制定HTML和CSS标准的组织W3C动作很慢。

-moz代表firefox浏览器私有属性

-ms代表IE浏览器私有属性

-webkit代表chrome、safari私有属性

-o代表opera私有属性

对于书写顺序一定要注意,兼容性写法放到前面,把标准写法放到最后

-webkit-transform:rotate(-3deg); /*为Chrome/Safari*/
-moz-transform:rotate(-3deg); /*为Firefox*/
-ms-transform:rotate(-3deg); /*为IE*/
-o-transform:rotate(-3deg); /*为Opera*/
transform:rotate(-3deg);


JS兼容

一、event事件

事件对象

event = event || window.event

事件流捕获dom目标

var e=e||window.event;
var Target=e.target||e.srcElement;//获取target的兼容写法,后面的为IE
var from=e.relatedTarget||e.formElement;//鼠标来的地方,同样后面的为IE... var to=e.relatedTarget||e.toElement;//鼠标去的地方

滚轮事件

document.addEventListener("DOMMouseScroll",function(event){
   alert(event.detail);//若前滚的话为 -3,后滚的话为 3
},false)
//非火狐中的滚轮事件
document.onmousewheel=function(event){
   alert(event.detail);//前滚:120,后滚:-120
}

设置监听事件

  function addEvent(obj,type,fn){//添加事件监听,三个参数分别为 对象、事件类型、事件处理函数,默认为false
        if (obj.addEventListener) {
            obj.addEventListener(type,fn,false);//非IE
        } else{
            obj.attachEvent('on'+type,fn);//ie,这里已经加上on,传参的时候注意不要重复加了
        };
    }
    function removeEvent(obj,type,fn){//删除事件监听
        if (obj.removeEventListener) {
            obj.removeEventListener(type,fn,false);//非IE
        } else{
            obj.detachEvent('on'+type,fn);//ie,这里已经加上on,传参的时候注意不要重复加了
        };
    }

  

二、dom相关获取

获取节点、类节点——通过浏览器获取标签结点,然后匹配每个节点的类名

function getByClass(sClass,oParent){
        var  Parent = oParent || document;//先获取所有的子元素
        var oEle = Parent.getElementsByTagName('*'); //声明一个空数组用来存放获取到的元素
        var newArr=[];//如果是常规浏览器,document.getelementsByClassName方法为true,则直接使用
        if(Parent.getElementsByClassName){
            return Parent.getElementsByClassName(sClass);//没有这种方法的话,则需要拿到所有的子元素,再做判断
        }else{  //遍历所有的子元素,得到所有的className;
            for(var i=0;i<oEle.length;i++){//将得到的 className 用数组保存
                var cn =  oEle[i].className;
                var arr = cn.split(" ");
                    if(arr[j] == sClass){
                        newArr.push(oEle[i]);
                        break;
                    } 
                }  
            }
                return newArr;
        }
    }

  

处理事件流事件

var e=e||window.event;
        if (e.preventDefault) {//阻止默认事件
            e.preventDefault();//W3C标准
        }else{
            e.returnValue='false';//IE..
        }
    
    if (e.stopPropagation) {//事件冒泡
            e.stopPropagation();//W3C标准
        }else{
            e.cancelBubble=true;//IE....
        }

设置setAttribute

object.setAttribute(“style”,“position:absolute;left:10px;top:10px;”)

在IE8、Chrome、火狐、Opera10中都能设置成功;但是在IE7下无法设置。

object.setAttribute(“cssText”,“position:absolute;left:10px;top:10px;”)

设置innerText

var div = document.getElementById("content");
function getInnerText(element) {
    return (typeof element.textContent == "string") ? element.textContent : element.innerText;
}
function setInnerText(element, text) {
    if (typeof element.textContent == "string") {
        element.textContent = text;
    } else {
        element.innerText = text;
    }
}
setInnerText(div, "Hello world!");
alert(getInnerText(div)); //"Hello world!"

  

原文地址:https://www.cnblogs.com/jiox/p/14521318.html