精华内容
下载资源
问答
  • 2、出现问题 ios下正常,长按A识别到A的微信,长按B识别到B的微信 安卓下,长按A识别A,长按B识别A;也就是只能识别其中一二维码 3、分析 微信识别二维码的原理机制  这里采用的逻辑...

    1、需求

      在项目中h5页面内有文章资讯模块,文章详情页里面底部放了公司二维码,然后用户分享的时候,会带上分享者二维码,并且并排展示,用户长按哪个就识别哪个图片二维码;

    2、出现问题

    • ios下正常,长按A识别到A的微信,长按B识别到B的微信
    • 安卓下,长按A识别A,长按B识别A;也就是只能识别其中一个二维码

    3、分析

    • 微信识别二维码的原理机制

     

      这里采用的逻辑是截屏识别,当客户端发现用户在网页的img标签内进行长按操作时,会立刻截屏并且启动二维码识别算法。所以这里用于二维码识别的图片是截屏,而不是之前有人提到的img标签中的图片。为什么要用截屏,这也是一个开发时候的思考。客户端截屏时候,可以不用考虑网络传输等因素,最快的得到识别结果,否则就需要走一次图片下载的逻辑,用户长按后等待的时间会加长,体验上也失去了快感。---引用《网页中二维码识别规则

     至于为何ios可以识别成功,安卓只能识别其中一个,其实我也说不清。。。。

    4、解决办法

    • 引导用户点击图片,图片弹出展示,然后再提示用户长按识别
    • 判断在安卓手机下处理:页面中再加一个img标签C,默认宽高能包含两个小的img标签(A和B),透明。长按A的时候监听touchstart事件,把当前点击的图片A的src赋给C,层级变高,就可以识别不同的二维码了

    5、部分代码

     1<div class="wechat qrcodeBox">
     2  <div class="ullget">
     3    <dt>
     4      <img src="../image/com_logo.jpeg" alt="有获社区服务号" class="qrcode qrcode1">
     5    </dt>
     6    <dd>
     7      长按进入有获微课
     8    </dd>
     9  </div>
    10  <div class="share">  
    11    <dt>
    12      <img :src="article.ref_qrcode" alt="二维码" class="qrcode qrcode2">
    13    </dt>
    14    <dd>
    15      长按召唤小编
    16    </dd>  
    17  </div> 
    18  <img src="../image/search.png" class="realQrcode" />
    19</div>
    $(document).on('touchstart', '.qrcode1', function () {
        $('.realQrcode').attr('src', $(this).attr('src'));
        $('.realQrcode').css('z-index', '10');
    }).on('touchstart', '.qrcode2', function () {
        $('.realQrcode').attr('src', $(this).attr('src'));
        $('.realQrcode').css('z-index', '10');
    }).on('touchend', '.qrcode', function () {
        $('.realQrcode').css('z-index', '-1');
    }).on('touchcancel', '.qrcode', function () {
        $('.realQrcode').css('z-index', '-1');
    })

    6、遗留

      我的安卓手机下(MI8SE),我两个微信号,然后发现系统自带的微信分身,识别的时候,这个方法是无效的,不知道怎么个情况。有了解的朋友可以交流交流

      

    转载于:https://www.cnblogs.com/wangyongshf/p/10576983.html

    展开全文
  • android 两个播放器同时播放视频

    千次阅读 2019-04-18 21:23:39
    产品经理说:要实现两个播放器同时播放不同的视频,暂停啊快进啊播放完成啊这些状态都要同步,播放过程中如果出现某一个视频在缓冲中,那么另外一个视频就得等待缓冲视频缓冲完成,然后才继续播放。 因为之前接触...

    需求

    产品经理说:要实现两个播放器同时播放不同的视频,暂停啊快进啊播放完成啊这些状态都要同步,播放过程中如果出现某一个视频在缓冲中,那么另外一个视频就得等待缓冲视频缓冲完成,然后才继续播放。

    因为之前接触播放器的经验不多,所以感觉无从下手,生无可恋,不知道怎么同步,也不知道如何让一个视频等待另外一个视频。

    先上代码链接,效果视频在res的raw文件夹下,大家可以看下效果视频然后再看是否符合自己的实际需求
    github

    问题

    1. 如果某一个播放器还在初始化,但是另外一个已经准备好开始播放了,这时候我们需要暂停播放中的,等前边一个播放器初始化好了,再一起继续播放。
    2. 如何做到某一个播放器在缓冲中,让另外一个播放器等待呢?等缓冲完成之后再两个播放器同时播。
    3. 快进或者快退之后,需要等待两个播放器都缓冲好了才继续播。

    分析

    • 第一:其实上边所有的基础,都是基于一个前提,就是以第一个播放器的状态和进度为基准,后边的播放器都向它对齐。
    • 第二:我们必须在计时器中进行上述问题的处理,因为计时器每隔1s就更新一次,有问题或者不同步能及时纠正。
    • 第三:如果有一个播放器是准备中或者缓冲中,就暂停其他播放器,这个暂停为自动暂停,缓冲完成之后是可以继续播放的。

    知道思路,剩下的就是编码体力活了。代码如下

    判断两个播放器进度是否一致(这里有个容错参数,只要播放器进度差值小于2000都算进度一致)

    private boolean judgePlayerProgressSame(int currentFlag, int otherFlag) {
       	int currentProgress = mProgressArray.get(currentFlag);
       	int otherProgress = mProgressArray.get(otherFlag);
       	int abs = Math.abs(currentProgress - otherProgress);
    
       	return abs < 2000;
       }
    

    当两个播放器状态一致时,判断进度差值是否一样,如果不同则暂停所有播放器,然后将第二个播放器的进度seekTo到第一个播放器的进度。
    如果当前状态是自动暂停,则两个播放器继续播放

    private void playerStateSame(int flag, int otherFlag) {
       		int currentPlayState = mStateArray.get(flag);
       		Log.e(TAG, "setVideoProgress 两个播放器状态一致," + mStateArray.get(0) + "--" + mStateArray.get(1));
    
       		if (currentPlayState == PlayerConstant.CURRENT_STATE_PLAYING) { // 正在播放
       			boolean same = judgePlayerProgressSame(flag, otherFlag);
       			if (!same) {
       				Log.e(TAG, "setVideoProgress 两个播放器状态都是播放中,但是前后时间不一致");
       				pauseAllPlayerByMyself();
       				seekToSameProgress();
       			}
    
       		} else if (currentPlayState == PlayerConstant.CURRENT_STATE_PAUSE_MYSELF) { // 开始播放
       			boolean same = judgePlayerProgressSame(flag, otherFlag);
       			Log.e(TAG, "setVideoProgress 两个播放器状态都是自我暂停中,但是前后时间不一致");
       			if (same) {
       				playAllPlayerByMyself();
       			}
       			// else {
       			// seekToSameProgress();
       			// }
       		}
       	}
    

    暂停所有播放器,将其他播放器进度seekTo到第一个播放器的进度。

    private void pauseAllPlayerByMyself() {
       	for (PlayerController controller : mPlayerControllerList) {
       		controller.pauseByMyself();
       	}
       }
       
    private void seekToSameProgress() {
       	PlayerController otherController = getPlayerControllerByFlag(1);
       	int progress = mProgressArray.get(0);
       	otherController.seekTo(progress);
       }
    

    如果两个播放器状态不一致,则暂停播放器

    private void playerStateDifferent(int flag, int otherFlag) {
       		int currentState = mStateArray.get(flag);
       		int otherState = mStateArray.get(otherFlag);
    
       		if (currentState == PlayerConstant.CURRENT_STATE_PLAYING && otherState == PlayerConstant.CURRENT_STATE_PREPARING) {
       			Log.e(TAG, "一个播放中,一个是准备中");
       			PlayerController playerController = getPlayerControllerByFlag(flag);
       			playerController.pauseByMyself();
    
       		} else if (currentState == PlayerConstant.CURRENT_STATE_PLAYING && otherState == PlayerConstant.CURRENT_STATE_PAUSE_MYSELF) {
       			Log.e(TAG, "一个播放中,一个是自我暂停");
       			PlayerController playerController = getPlayerControllerByFlag(flag);
       			playerController.pauseByMyself();
       		}
       	}
    

    当播放器缓冲完成的时候,需要判断是不是自我暂停状态(也就是播放器自己暂停状态)

    @Override public void onSeekComplete(int flag) { // 快进完成
       		if (mPlayerControllerList.size() > 1) {
    
       			if (mStopTrackingTouchStatus == PlayerConstant.CURRENT_STATE_PAUSE) {
       				getPlayerControllerByFlag(flag).goOnPlayOnPause();
       				return;
       			}
    
       			if (mStateArray.get(flag) == PlayerConstant.CURRENT_STATE_SEEKING) {
       				pausePlayerByMyself(flag);
       			}
    
       			int otherFlag = getOtherFlag(flag);
       			if (judgePlayerStateSame(flag, otherFlag)) {
       				int currentPlayState = mStateArray.get(flag);
       				if (currentPlayState == PlayerConstant.CURRENT_STATE_PAUSE_MYSELF || judgePlayerProgressSame(flag, otherFlag)) { // 开始播放
       					Log.e(TAG, "快进完成,执行播放" + flag);
       					playAllPlayerByMyself();
       				}
       			}
       		}
       	}
    

    播放器的常量值

    public static final int	CURRENT_STATE_NORMAL= 0;	// 正常
    
       public static final int	CURRENT_STATE_PREPARING= 1;	// 准备中
    
       public static final int	CURRENT_STATE_PREPARING_CHANGING_URL	= 2;
    
       public static final int	CURRENT_STATE_PLAYING= 3;	// 播放中
    
       public static final int	CURRENT_STATE_PAUSE= 5;	// 暂停-用户暂停
    
       public static final int	CURRENT_STATE_PAUSE_MYSELF= 50;	// 暂停-因为两个视频进度不一致自动暂停
    
       public static final int	CURRENT_STATE_AUTO_COMPLETE= 6;	// 播放完成
    
       public static final int	CURRENT_STATE_ERROR= 7;	// 错误
    
       public static final int	CURRENT_STATE_SEEKING= 8;	// 快进快退加载中
    
    展开全文
  • 两个led并联在和一个电阻串联,出现两个led不同时亮时只能红色的led可以量,两个led可以单独亮。 连接方法如下。 原因分析: 由于两个led一个是红色一个是蓝色,怀疑是参数不一致导致的。查看两个led数据手册...

     

             两个led并联在和一个电阻串联,出现两个led不同时亮时只能红色的led可以量,两个led可以单独亮。

    连接方法如下。

     

    原因分析:

    由于两个led一个是红色一个是蓝色,怀疑是参数不一致导致的。查看两个led数据手册Vf导通电压,如下图所示:

    蓝色led正向导通压降

     

    红色led正向导通压降

     

    之后又拿万用表二极管档测量二极管正向导通压降,红色led为2V,蓝色led为2.5v。

    结论:

    由于红色LED导通压降低,当红色led导通时,led两端电压被嵌位在2V,虽然两个led连接到不同的IO口上,但是当lO为低电平时,电平基本等于参考地。所以两个led可以等效成并联,所以蓝色led两端电压等于2V,所以led蓝灯不亮。

    解决办法:

    1. 两个led分别串联两个不同的限流电阻。
    2. 选择导通电压一致的二极管。

     

    csdn 的博客不支持word了,网页版真心难用。

     

     

    展开全文
  • “appearance”功能听起来蛮大的,不过可惜的是,目前各个浏览器厂商各自为政,还无法达到统一的标准,至今天也只有两个内核的浏览器可以使用,其一是“webkit”,其二是“ff”的,也就是说在使用“appearances”时...

    1、-webkit-appearance   

    参考 :http://www.w3cplus.com/css3/changing-appearance-of-element-with-css3.html

    使用“-webkit-appearance: none; ”来改变按钮在iPhone下的默认风格,其实我们可以反过来思路,使用“appearance”属性,来改变任何元素的浏览器默认风格,简单的说,你可以使用“appearance”属性将“段落p”渲染成button的风格,也可以渲染成“输入框”、“选择框”等效果。

    大家都知道每个浏览器对HTML元素渲染都不一样,比如说“button”,在chrome和ff中,渲染出来的效果都是不尽相同的。这样一来就有了今天这个思路,利用浏览器的对元素的默认渲染风格,我们可以使用“appearance”属性对任何元素的渲染风格改变,最简单的来说,我要把“a”链接默认显示成“按钮”风格,那么我们可以使用“appearance”设置为“button”。

    “appearance”功能听起来蛮大的,不过可惜的是,目前各个浏览器厂商各自为政,还无法达到统一的标准,至今天也只有两个内核的浏览器可以使用,其一是“webkit”,其二是“ff”的,也就是说在使用“appearances”时,需要加上各浏览器厂前缀。

    appearance使用方法:

    .elmClass{
       -webkit-appearance: value;
       -moz-appearance:    value;
       appearance:         value;
    }
    

    接下来我们一起来看个简单的实例:

    <p class="lookLikeAButton">我是一个段落P元素 </p>
    <p class="lookLikeAListbox">我是一个段落P元素 </p>
    <p class="lookLikeAListitem">我是一个段落P元素 </p>
    <p class="lookLikeASearchfield">我是一个段落P元素 </p>
    <p class="lookLikeATextarea">我是一个段落P元素 </p>
    <p class="lookLikeAMenulist">我是一个段落P元素</p>
    

    接下来,使用“appearance”属性来改变上面“P”元素的风格:

    /*看起来像个按钮,以按钮的风格渲染*/
    .lookLikeAButton{
         -webkit-appearance:button;
         -moz-appearance:button;
    }
    /*看起来像个清单盒子,以listbox风格渲染*/
    .lookLikeAListbox{
         -webkit-appearance:listbox;
         -moz-appearance:listbox;
    }
    /*看起来像个清单列表,以listitem风格渲染*/
    .lookLikeAListitem{
         -webkit-appearance:listitem;
         -moz-appearance:listitem;
    }
    /*看起来像个搜索框,以searchfield风格渲染*/
    .lookLikeASearchfield{
         -webkit-appearance:searchfield;
         -moz-appearance:searchfield;
    }
    /*看起来像个文本域,以textarea风格渲染*/
    .lookLikeATextarea{
         -webkit-appearance:textarea;
         -moz-appearance:textarea;
    }
    /*看起来像个下接菜单,以menulist风格渲染*/
    .lookLikeAMenulist{
         -webkit-appearance:menulist;
         -moz-appearance:menulist;
    }
    

    经过“appearance”的属性值设置后,段落P的默认风格就被改变了,如图所示:

    当然上面的属性只是“appearance”中的一部分,我搜集了一下webkit和Mozilla下的appearance给大家参考:

    Webkit下的appearance属性值

    checkbox
    radio
    push-button
    square-button
    button
    button-bevel
    listbox
    listitem
    menulist
    menulist-button
    menulist-text
    menulist-textfield
    scrollbarbutton-up
    scrollbarbutton-down
    scrollbarbutton-left
    scrollbarbutton-right
    scrollbartrack-horizontal
    scrollbartrack-vertical
    scrollbarthumb-horizontal
    scrollbarthumb-vertical
    scrollbargripper-horizontal
    scrollbargripper-vertical
    slider-horizontal
    slider-vertical
    sliderthumb-horizontal
    sliderthumb-vertical
    caret
    searchfield
    searchfield-decoration
    searchfield-results-decoration
    searchfield-results-button
    searchfield-cancel-button
    textfield
    textarea
    

    Mozilla下的appearance属性值

    none
    button
    checkbox
    checkbox-container
    checkbox-small
    dialog
    listbox
    menuitem
    menulist
    menulist-button
    menulist-textfield
    menupopup
    progressbar
    radio
    radio-container
    radio-small
    resizer
    scrollbar
    scrollbarbutton-down
    scrollbarbutton-left
    scrollbarbutton-right
    scrollbarbutton-up
    scrollbartrack-horizontal
    scrollbartrack-vertical
    separator
    statusbar
    tab
    tab-left-edge Obsolete
    tabpanels
    textfield
    textfield-multiline
    toolbar
    toolbarbutton
    toolbox
    -moz-mac-unified-toolbar
    -moz-win-borderless-glass
    -moz-win-browsertabbar-toolbox
    -moz-win-communications-toolbox
    -moz-win-glass
    -moz-win-media-toolbox
    tooltip
    treeheadercell
    treeheadersortarrow
    treeitem
    treetwisty
    treetwistyopen
    treeview
    window
    

    大家要是感兴趣的话可以看看下面的相关介绍:

    1.  Mozilla Docs for -moz-appearance
    2.  Trent Walton on Webkit Appearance
    3.  Shaun Inman on Disabling Inner Text Shadow of Text Inputs on iPad
    4.  CSS3 Spec
    5.  CSS property: -webkit-appearance

    最后在提醒大家一回,目前在IE系列和Opera浏览器上不支持“appearance”,而且Safari也只有3.0版本以上支持,而在Chrome和Firefox以及移动设置浏览器上得到较好的支持。如果大家对此感兴趣,自己可以私下一个下个尝试上面的属性值,给大家带来何种效果。


    2、-webkit-box-shadow

    参考:http://www.w3cplus.com/content/css3-box-shadow

    本文我们搁下IE不谈,只谈谈box-shadow的具体使用方法

    语法:

    E {box-shadow: <length> <length> <length>?<length>?||<color>}
    也就是:
    E {box-shadow:inset x-offset y-offset blur-radius spread-radius color}
    换句说:
    对象选择器 {box-shadow:投影方式 X轴偏移量 Y轴偏移量 阴影模糊半径 阴影扩展半径 阴影颜色}
    

     

    box-shadow和text-shadow一样可以使用一个或多个投影,如果使用多个投影时必须需要用逗号“,”分开。

    取值:

    box-shadow属性至多有6个参数设置,他们分别取值:

    阴影类型:此参数是一个可选值,如果不设值,其默认的投影方式是外阴影;如果取其唯一值“inset”,就是将外阴影变成内阴影,也就是说设置阴影类型为“inset”时,其投影就是内阴影;

    X-offset:是指阴影水平偏移量其值可以是正负值可以取正负值,如果值为正值,则阴影在对象的右边,反之其值为负值时,阴影在对象的左边;

    Y-offset:是指阴影的垂直偏移量,其值也可以是正负值,如果为正值,阴影在对象的底部,反之其值为负值时,阴影在对象的顶部;

    阴影模糊半径:此参数是可选,,但其值只能是为正值,如果其值为0时,表示阴影不具有模糊效果,其值越大阴影的边缘就越模糊;

    阴影扩展半径:此参数可选,其值可以是正负值,如果值为正,则整个阴影都延展扩大,反之值为负值是,则缩小

    阴影颜色:此参数可选,如果不设定任何颜色时,浏览器会取默认色,但各浏览器默认色不一样,特别是在webkit内核下的safari和chrome浏览器将无色,也就是透明,建议不要省略此参数。

    浏览器的兼容:

    我们这里还涉及到一个各浏览器前缀的问题,比如说Mozilla内核的-moz,webkit内核的-webkit。经测试在最新版的Firefox和Google Chrome浏览器都无需加上前缀,但在safari中还是需要前缘的,为了能兼容支持的各大浏览器,我们在书写box-shadow的格式应该这样

    //Firefox4.0-
    -moz-box-shadow: 投影方式 X轴偏移量 Y轴偏移量 阴影模糊半径 阴影扩展半径 阴影颜色;
    //Safari and Google chrome10.0-
    -webkit-box-shadow: 投影方式 X轴偏移量 Y轴偏移量 阴影模糊半径 阴影扩展半径 阴影颜色;
    //Firefox4.0+ 、 Google chrome 10.0+ 、 Oprea10.5+ and IE9
    box-shadow:  投影方式 X轴偏移量 Y轴偏移量 阴影模糊半径 阴影扩展半径 阴影颜色;
    

     

    box-shadow的特征:

    较之ps制作出来的图片相比,CSS3的box-shadow可以通过改变其参数得到不同的效果,如:改变阴影偏移量的设置,我们可以使用阴影只在对象的上下左右的任一边出现,也可以让其出现在其中的某几个边上;其二可以随时调节阴影大小,边缘模糊度,阴影颜色,其三可以随时更改为内阴影,另外还可以设置多个阴影效果

    我们先来看一个简单的实例:

    .demo1 {
      -webkit-box-shadow: 3px 3px 3px;
      -moz-box-shadow: 3px 3px 3px;
      box-shadow: 3px 3px 3px;
    }
    

     

    Firefox/Opera下效果   Safari/Chrome下效果

    回到上面那个实例,其实在webkit内核的浏览器Safari、Google Chrome里不会有任何阴影效果,虽然W3C标准里说颜色是可选择的,但是在没有给出颜色的时候 ,safari/chrome和firefox表现不同,在webkit内核的浏览器下阴影表现为透明色而mozilla和oprea下表现为黑色。基于这样的原因,大家在使用box-shadow时不要忘了加上阴影颜色的值。

    根据上面的现像,我们来看一个box-shadow有关阴影是否会被计算为内容的实例。

    <div class="outer">
      <div class="inter"> </div>
    </div>   
    

     

    我们把外面div设置为100px*100px,里面div设置为60px*60px,并在里面的div上加上一个向下向右偏移50px的绿色阴影,我们看看多出来的阴影会怎么样?

      .outer {
        width: 100px;
        height: 100px;
        border: 1px solid #ccc;
      }
      .inter {
        width: 60px;
        height: 60px;
        margin: 10px auto;
        background: #f69;
        -webkit-box-shadow: 50px 50px green;
        -moz-box-shadow: 50px 50px green;
        box-shadow: 50px 50px green;
      }
     

    从各大浏览中的效果我们可以看出,阴影多出来的阴影会撑破容器跑出来。标准里有一张图,描述了box-shadow的工作方式,这张图直观告诉我们如何使用box-shadow

    这张图可以告诉我们很多信息,比如说borer-radius圆角,阴影扩展、阴影模糊以及padding是如何影响对象阴影的:非零值的border-radius将会以相同的作用影响阴影的外形,但border-image不会影响对象阴影的任何外形;对象阴影同box模型的层次一样,外阴影会在对象背景之下,内阴影会在边框之下背景之上。所以整个层级就是:边框>内阴影>背景图片>背景颜色>外阴影。因为大家都知道,我们的背景图片是在背景颜色之上的。

    IE滤镜方法:

    在前面我们讲过,IE9以下是不支持CSS3的box-shadow的,但为了处理这个兼容问题,我们可以在IE下使用IE的shadow阴影滤镜来实现

       filter: progid:DXImageTransform.Microsoft.Shadow(color=’颜色值’, Direction=阴影角度(数值), Strength=阴影半径(数值));
    

     

    注意:该滤镜必须配合background属性一起使用,否则该滤镜失效。除了使用滤镜的方法外,我们还有一种方法可以实现IE下的效果。那就是使用jQuery的插件jquery.boxshadow.js。那么具体如何使用呢?其实很简单,你先下载这个jquery.boxshadow.js插件到你的项目中,接着把jquery版本库和jquery.boxshadow.js加载到页面上,如

       <script type="text/javascript" src="../js/jquery.min.js"></script>
       <script type="text/javascript" src="../js/jquery.boxshadow.js"></script>
    

     

    然后你可以创建一个单独的js文件来处理,或者直接在页面的<head></head>里欠入一个<script> </script>,我们这里就只例出一个直接在head插入的解决办法:

      $(document).ready(function(){
        if($.browser.msie) {
          $('.demo1').boxShadow(0,0,5,"#888"); //demo1元素使用了box-shadow
          $('.demo2').boxShadow(-10,-10,5,"#f36"); //demo2元素使用了box-shadow
        }
      });
    

     

    上面我们了解了CSS3的box-shadow相关基础知识,那么下面我们通过一些实例来巩固一下box-shadow的具体用法:

    如果没有进行特殊说明,我们这里的实例所用的HTML代码都如下,只是改变第二个class名称,如demo1 demo2等:

      <div class="demo demo2></div>
    

     

    基本的CSS样式

      .demo {
        width: 100px;
        height: 50px;    
        background: #f69;
      }
    

     

    提醒大家:为了节约时间,下面的css代码中我只写了一个box-shadow,但是大家在实际应用中一定要记得把:-webkit-box-shadow和-moz-box-shadow加上去,不然在safari和chrome浏览器下是会没有任何效果的,这个我们在前面提过,此处不详说。

    效果一:单边效果

     .dome2 {
       box-shadow: -2px 0 0 green, //左边阴影
       0 -2px 0 blue, //顶部阴影
       0 2px 0 red, //底部阴影
       2px 0 0 yellow; //右边阴影
     }
    

     

    上例中,我们分别对对象的四个边进行了box-shadow的设置,只不过我们使用了多层次的box-shadow应用,如果只需要在对象某一边应用阴影时,我们可以删除不使用阴影的设置。给对象四边设计阴影,我们是通过改变x-offset和y-offset的正负值来实现,其中x-offset为负值时,生成左边阴影,为正值时生成右边阴影,y-offset为正值是生成底部阴影,为负值时生成顶部阴影。并且把模糊半径设置为0,如果不设置为0的话那么其他三边也将会有阴影,并且此处还涉及到一个多阴影的顺序问题。当给同一个元素使用多个阴影属性时,需要注意它的顺序,最先写的阴影将显示在最顶层,如我们将上面的实例变一下,给其加上模糊值,将更能看出效果:

      .demo3 {
        box-shadow: -2px 0 5px green,0 -2px 5px blue,0 2px 5px red,2px 0 5px yellow;
      }
    

     

    这样我们上例中:左边的放在了第一,其green阴影色在顶边的blue上,而顶边的blue在又在右边的yellow上,右这的yellow却在底边的red上。所以应用多次阴影的写法一定要注意其顺序问题,特别的当阴影的模糊值不一样的情况之下,另外有些网站介绍说可以写成下面的形式,但我经过多个浏览器测试,这种写法是无效的,

      .demo4 {
        /*这种写法是错误的(,网上有介绍说可以这样书写,但我测试多次未见效果,所以本人提倡不要这样书次,以免造成不必要的错误)*/
        box-shadow: -2px 0 0 green,box-shadow: 0 -2px 0 blue,box-shadow: 0 2px 0 red,box-shadow: 2px 0 0 yellow;
      }
    

     

    从上图的效果中也再一次证明了上面的写法是不正确的,希望大家在实际应用中时一定要注意多层次阴影的书写方法。同时也提醒大家在网上看相关资料时一定不能尽信,最好是能自己抽空验正一下。

    在使用多层次的阴影时还需注意一个细节问题,如果前面的阴影模糊值小于后面的阴影模糊值,那么前面的显示在后面之上,如果前面阴影的模糊值大于后面的阴影模糊值,那么前面的阴影将遮住后面的阴影效果。如下面例子:

     /*第一个阴影模糊半径值小于第二阴影模糊半径*/
     .demo5 {
       box-shadow: 0 0 5px red,0 0 15px blue;
     }
      
     /第一个阴影模糊半径大于第二阴影模糊半径*/
     .demo6 {
       box-shadow: 0 0 15px red, 0 0 5px blue;
     }
    

     

    实例效果再次证明:左图中我们可以看见红色阴影在兰色阴影之上并没有遮盖蓝色阴影,因为我们红色的阴影模糊值只有5px,比蓝色的15px模糊值要小;而右图中我们只能看到红色的阴影,那是因为我们第一个红色阴影的模糊半径大于第二个兰色的模糊半径,所以红色的阴影把蓝色的阴影遮盖住了。这一点大家可记住了。

    效果二:四边具有相同的阴影效果(只设置阴影模糊半径和阴影颜色)

      .demo7 {
        box-shadow: 0 0 5px rgb(250,0,0);
      }
    

     

    我们在这里设置的是HEX值,我们也可以应用css3的rgba值给box-shadow的阴影颜色上,这样的好处是,box-shadow阴影色多了一个alpha透明值 ,如下面的实例:

     .demo8 { 
       box-shadow: 0 0 5px rgba(250,0,0,0.5);
     }
    

     

    对比上面两个例子,前一个例子我们没有应用透明值,而后面一个例子我们应用了0.5的透明值,相比之下后面的阴影是不是更浅。当然在实践应用中您可以根据自己的需求进行设置。

    效果三:四边具有相同的阴影(只设置阴影扩展半径和阴影颜色)

     .demo9 {
      box-shadow: 0 0 0 1px red;
     }
    

     

    从效果中大家想想这种效果是不是跟我们在元素中的boder: 1px solid red;属性产生的效果很相似的呀。对的,box-shadow不单可以制作出阴影的效果,我们还可以利用其扩展半径这个值,来给对象制作出类似于边框的样式。下面我们来看一个对比的实例:

      /*边框效果*/
      .demo10 {
        border: 1px solid red;
      }
      /*阴影效果*/
      .demo11 {
        box-shadow: 0 0 0 1px red;
      }
    

     

    实际上利用box-shadow来制作边框,只能说看上去像边框,但实质其并非边框,他和border还是有本质上的区别。从上面的效果图中我们明显的可以看出左边的box要比右边的box低那么1px的,这样一来随着其扩展半径值越大,两者之间的相差就更大,如:

     .demo12 {
       border: 20px solid red;
     }
    	
     .demo13 {
       box-shadow: 0 0 0 20px red;
     }
    

     

    我们接着来看demo12和demo13两个demo在firebug下的layout图:

    结合上图两者在firebug下的layout图,更证实了我们前面所讲的阴影不会影响页面的任何布局:demo12的边框被计算了宽度,但demo13的阴影浏览器却忽略不计,所以借住这个特点,我们阴影所模拟的边框理可以自由的使用,但必须要注意其层级关系。

    前面我们主要举例说明了如何利用box-shadow给对象单边加上阴影效果多边应用阴影效果四边同时应用相同的阴影效果以及如何应用阴影模仿对象边框效果等,这些都是我们box-shadow常用的一些阴影效果,下面我们在来例举几个特殊的实例:内阴影insetbody设置阴影投影drop shadow

    内阴影inset效果:

      .demo14 {
        box-shadow: inset 0 0 10px red;
      }
    

     

    上图中我们实现了div上添加内阴影的效果,我们这里要提醒一点的是,img标签上直接应用box-shadow的inset是没有任何效果的,为了证实这一点,我们一起来看下面的一个实例:

       <img src="/images/box-shadow-img.png" alt="box shadow img" />
    

     

     img {
       box-shadow: inset 0 0 10px red;
     }      
    

     

    上面的效果图再次证实了我们前面所说的,直接在img元素上使用inset是没有任何效果的,那么我们现在来针对这个bug做一次修改,我们把img放到一个div中,然后不直接在img上运用box-shadow属性,而是在img的父元素div上运用box-shadow,接着我们在给img进行相对定位,并让其在父元素下一层,如:

       <div class="img-wrap"><img src="/images/box-shadow-img.png" alt="box shadow img" /></div>
    

     

    我们来看其主要的样式:

      .img-wrap {
         -webkit-box-shadow: inset 0 0 10px red;
         -moz-box-shadow: inset 0 0 10px red;
         box-shadow: inset 0 0 10px red;
         display: inline-block;
      }
      .img-wrap img {
        position: relative;
        z-index: -1;
    }
    

     

    根据上面实例思路,我们换过一种实现方法,这种方法我们是在img父元素上应用一上伪元素“:before”来实现:

       <div class="shadow"><img src="/images/box-shadow-img.png" alt="box shadow img" /></div>
    

     

      .shadow {
        position: relative;
        display: inline-block;
        *display: inline;
      }
      .shadow::before {
        content:"";
        position: absolute;
        width: 100%;
        height: 100%;
        -moz-box-shadow:inset 0 0 5px 1px red;
        -webkit-box-shadow: inset 0 0 5px 1px red;
        box-shadow: inset 0 0 5px 1px red;
    }
    

     

    从效果上看,我们是不是同样实现了img加box-shadow的inset阴影呀,最后我们在来利用jQuery来解决img内阴影,这种方法的原理是我们通过jQuery把img标签转换成一个div元素,同时把img转换成div元素的背景图片,然后在这个div元素上应用内阴影,因为我们都知道div上应用内阴影是没有任何问题的。下面我们就一起来看其实现的方法

    Html Code:

     <img src="/images/box-shadow-img.png" alt="" class="inset-shadow" />
    

     

    Css Code:

    .inset-shadow{
       -moz-box-shadow: 0 0 5px red inset;
       -webkit-box-shadow: 0 0 5px red inset;
       box-shadow: 0 0 5px red inset;
    }
    

     

    jQuery code

      <script type="text/javascript">
        $(document).ready(function(){
           $('img.inset-shadow').each(function(){
              var $img = $(this);
              $img.load(function(){
              var $div = $('<div/>');
              $div.width($img.width());
              $div.height($img.height());
              $div.css('background-image', 'url('+$img.attr('src')+')');
              var display = $img.css('display');
              //If the div is set to inline the width and height will be 0 :(
              //inline-block appears to be the only way around it but it's not
              //supported in all browsers :( The browsers it's not supported in
             //are probably the same ones that don't support box-shadow,
              //so a solution maybe to add a browser check.
             if(display === 'inline'){
                $div.css('display', 'inline-block');
              }else{
                $div.css('display', display);
              }
             $div.attr('class', $img.attr('class'));
             $img.replaceWith($div);
           });
         });
       });
     </script>
    

     

    大家可以通过自己的firebug查看其中img的变化。

    有关img上使用内阴影的使用方法,你可以参阅CSS Box-Shadow:Inset一文。

    给body顶部增加一个阴影

      body:before {
       content:"";
       position:fixed;
       top: -10px;
       left: 0;
       width: 100%;
       height: 10px;
       z-index: 999;
       box-shadow: 0 0 10px rgba(125,255,125,0.8);
    }
    

     

    这里提醒大家,为了不影响布局,top的取值最好和height的取值一致。只是top使用负值。利用同样的方法我们可以给任何一个元素加上阴影,但相应需要改变定位方式兴。

    Drop-shadow效果

    Drop-shadow效果,大家在Photoshop中肯定都见识过了,今天我们是来看一个实例,不增加任何元素标签的情况下,我们主要是利用box-shadow配合元素的两个伪元素:before和:after以及定位来实现,这种效果支持的浏览器现在主要有firefox3.5+/chrome5+/safari5+/opera10.6+/Ie9+。

    我们先来了解一下其原理:我们通过box-shadow实现drop shadow效果是仅用一个div标签元素,然后配合其两个伪元素":before"和":after";然后我们分别给其伪元素定位到div的后面,并把box-shadow应用到这两个伪元素上。具体我们来看其实现步骤:

    先来看其html代码:

     <div class="drop-shadow">drop shadow effect</div>
        

     

    我定义了一个叫"drop-shadow"的div,现在我们给其应用一个基本样式

     .drop-shadow {
        width: 300px;
        height: 150px;
        position: relative;
        background: #ccc;        
     }
        

     

    接着我们给drop-shadow的“:before”和":after"定位到drop-shadow下面:

     .drop-shadow:before,
     .drop-shadow:after {
        content: "";
        position: absolute;
        z-index: -1;
        bottom: 15px;
        left: 10px;
        width: 50%;
        height: 20%;
     }
        

     

    给drop-shadow的":before"和":after"加上阴影效果

     .drop-shadow:before,
     .drop-shadow:after {
         content: "";
         position: absolute;
         z-index: -1;
         bottom: 15px;
         left: 10px;
         width: 50%;
         height: 20%;
         /*add box-shadow*/
         -webkit-box-shadow: 0 15px 10px rgba(125,125,125,0.8);
         -moz-box-shadow: 0 15px 10px rgba(125,125,125,0.8);
         box-shadow: 0 15px 10px rgba(125,125,125,0.8);
      }
      

     

    现在我们只得到了一边的阴影效果,那我么们可以通过应用css3 transforms来实现另一边的效果(有关CSS3的transform属性使用,我们将在下文介绍)

     .drop-shadow:before,
     .drop-shadow:after {
        content: "";
        position: absolute;
        z-index: -1;
        bottom: 15px;
        left: 10px;
        width: 50%;
        height: 20%;
        /*add box-shadow*/
        -webkit-box-shadow: 0 15px 10px rgba(125,125,125,0.8);
        -moz-box-shadow: 0 15px 10px rgba(125,125,125,0.8);
        box-shadow: 0 15px 10px rgba(125,125,125,0.8);
        /*add css3 transform*/
        -webkit-transform: rotate(-3deg);
        -moz-transform: rotate(-3deg);
        -o-transform: rotate(-3deg);
        transform: rotate(-3deg);
     }
        

     

    我们现在只需要改变":after"伪元素定位方向。(伪元素":after"在相反方向旋转,相对于":before")

     .drop-shadow:after {
        right:10px;
        left: auto;
        -webkit-transform:rotate(3deg);
        -moz-transform:rotate(3deg);
        -o-transform:rotate(3deg);
        transform:rotate(3deg);
      }
        

     

    Drop shadow最终核心代码如下所示,只是我们在“:before”和“:after”中加了一个"max-width":的限制,

     .drop-shadow {
        width: 300px;
        height: 150px;
        position: relative;
        background: #ccc; 
        margin-left: 100px;       
      }
    
      .drop-shadow:before,
      .drop-shadow:after {
        content: "";
        position: absolute;
        z-index: -1;
        bottom: 15px;
        left: 10px;
        width: 50%;
        max-width: 150px;
        height: 20%;
        /*add box-shadow*/
        -webkit-box-shadow: 0 15px 10px rgba(125,125,125,0.8);
        -moz-box-shadow: 0 15px 10px rgba(125,125,125,0.8);
        box-shadow: 0 15px 10px rgba(125,125,125,0.8);
        /*add css3 transform*/
        -webkit-transform: rotate(-3deg);
        -moz-transform: rotate(-3deg);
        -o-transform: rotate(-3deg);
        transform: rotate(-3deg);
      }
    
     .drop-shadow:after {
        right:10px;
        left: auto;
        -webkit-transform:rotate(3deg);
        -moz-transform:rotate(3deg);
        -o-transform:rotate(3deg);
        transform:rotate(3deg);
     }
        


    有关drop shadow的更多的demoPure CSS3 box-shadow page curl effect可以查阅。如果对drop shadow感兴趣,大家可以点击:Drop Shadows with CSS3CSS drop-shadows without images查看更详细的文档。

    box-shadow配合其他CSS3属性制作出来的实例:demo

    那们今天我们有关CSS3box-shadow就说到这里了,到今天为些我们一起探讨和学习了CSS3渐变Gradient透明色RGBA圆角border-radius文本阴影text-shadow,下一节我们将一起探讨CSS3transform属性,感兴趣的朋友请观注本注有关CSS3的博文更新情况,如果你有更好的学习想法,或者对本站介绍的CSS3有更好的建议可以随时联系我。

    更新一:

    div {
              filter: 
                  progid:DXImageTransform.Microsoft.Shadow(color=#eeeeee,direction=0,strength=7)
                  progid:DXImageTransform.Microsoft.Shadow(color=#dddddd,direction=90,strength=10)
                  progid:DXImageTransform.Microsoft.Shadow(color=#dddddd,direction=180,strength=10)
                  progid:DXImageTransform.Microsoft.Shadow(color=#eeeeee,direction=270,strength=7);
          }
    

    使用滤镜来实现IE下的效果,基中“color”为阴影色,“direction”是阴影方向,“strength”是阴影强度。特别注意,颜色“#eeeeee”在此处不能写成“#eee”,不然会无效果。详细的请参阅Nick Dunn的《Cross-browser drop shadows using pure CSS》。


    展开全文
  • 这篇文章的题目正确表述应该是: Win10自动登陆 本地账号和邮件账号同时存在,默认登陆邮件账号并且要输入密码,并且邮件账号删不掉 以前装机的时候直接是按网络邮件账号登陆的,邮件账号有好就是可以同步多...。 ...
  • 测试场景:1、100个用户在5秒内同时访问14个页面2、添加固定计时器:每个网页之间间隔500毫秒,即上一个网页访问结束后,休息500毫秒在访问下一个网页3、添加断言持续时间:这个时间是毫秒为单位,即响应时间。...
  • 拿到问题时,我就觉得应该是session的问题(网站使用session进行身份验证),于是我用两个不同的浏览器分别登录这两个账户,发现没再出现这一问题,看了果然应了我的想法,session设置有问题。 想了一下网站的应用...
  •  尽管某个时刻只有一activity可以运行,Android却是一多任务环境.这对使用音频的应用带来了特殊的挑战,因为只有一音频输出而可能多媒体都想用它.在Android2.2之前,没有内建的机制来处理这问题,所以...
  • 1小时学会不打代码制作一个网页精美简历(1)

    万次阅读 多人点赞 2021-05-13 22:39:48
    那这个时候一行有两个元素了,是使用列还是使用行呢? 小媛:是行嘛? 1_bit:是的,其实我们在这个列表里面添加一个行,然后在这个行中添加一个图片和一个文本就可以了,首先我们点击列1,再从出现的组件中选择行...
  • 用HBuilder X编辑器打开的网页出现中文乱码一、问题描述二、尝试解决1.修改文件打开的指定编码方式(文件——以指定编码重新打开)2.网上有说在头部加上标签meta和属性 charset="utf-8"的,也还是不行。三、问题解决...
  • Python制作网页Day 1(一简单的网页

    千次阅读 多人点赞 2019-07-02 12:00:06
    一、一简单的网页 (一)一简单的网页 from flask import Flask app = Flask(__name__) @app.route("/haha") def haha(): return "哈哈哈哈哈" ...1、每有"_“的地方都有条,即”__"。 2、if与下划...
  • 7步骤PC网站自动适配手机网页

    千次阅读 2016-10-05 18:27:15
    通过移动适配技术可以实现,切图网是国内首家基于web技术服务的公司,而移动适配主要通过底层的web技术开发手段来完成,下面切图网将从技术角度来告诉你通过7步骤来完成一PC网站向移动设备的跳跃! 1允许网页...
  • 浏览某些网页是会出现莫名其妙的的声音,像是flash广告; 但是总是很古怪... 完全禁掉flash插件似乎不方便; 打开插件,然后相信信息,禁掉非windows系统目录下的看看
  • 基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度 摘 要 在搜索引擎的检索结果页面中,用户经常会得到内容相似的重复页面,...
  • 01/23/2014, Posted in 移动 Comments: No comments ...最近在做一个div css...一、并排在一行的两个div样式有这种情况:ie或者ff下对于子div设置float左的时候,如果另外的子div没有设置float左的 话,两个
  • 大神求帮助,html页面有俩个form表单一个提交按钮,如何点击提交按钮能把这两个表单提交 大神求指教,谢谢啦
  • 天因需要到网上购物,首先是进财付通,一登录之后的页面需要安装加载项,但是没等有机会点允许安装就出现内存错误。“0x7c0c5a6c指令不能引用0x7c0c5a6c内存”,然后就提示网页恢复失败。然后是登陆网银,出现了...
  • 基于特征向量的近似网页去重算法 曹玉娟1,2 牛振东1 彭学平1 江 鹏1 (1北京理工大学计算机科学技术学院 100081)  (2北京航天飞行控制中心 100094) 摘 要 在搜索引擎的检索结果页面中,用户经常会...
  • 将一个同一个动画应用于两个不同的View中,想让两个View同时向一个方向移动相同的距离。关键代码如下: Animation topAnimation = new TranslateAnimation(0, 0, 0, -heightOfTopTrans); topAnimation....
  • 12> 作一个网页让它可以每隔5分钟自动刷新一次,如何实现?  上网浏览时,我们经常会遇到一些网页。在隔一段时间没有响应时,它会自动刷新一次。除了可以起到提醒访问者的目的外,当新的刷新地址不是当前URL时,...
  • IE 浏览器在同时打开多选项卡后,Windows 会同时运行多不同的 IEXPLORE.EXE 进程,这现象并非是不正常的故障,而是 IE 浏览器在 IE 8 及后续的版本中引入的“松散耦合进程框架(Loosely Coupled IE)”进程...
  • 验证第一个表单时没有通过就切换到第二个,那么第二个表单会出现验证错误的信息我们可以通过为两个表单添加ref属性之后在通过调用resetFields()方法来解决问题代码如下&lt;el-form :model="form" :...
  • 居然被劫持了,我有一丢丢小强迫症,无法忍受同时跳出两个页面,还是特别丑的页面。。。欧欧欧 丑吧 这才是宝贝 方法如下 直接上干货: 打开快捷方式的图标属性,你会发现 在目标一栏的后边除了路径还会...
  • 一、运营的角度1.1、概括订阅号:微信最初的形态是一纯粹的社交工具,也就是人与人之间的联系工具,其中又分熟人之间的联系和陌生人之间的联系,于是就诞生了朋友圈和订阅号。而订阅号的作用就是媒体社交,订阅号...
  • 使用JavaScript解决网页图片拉伸问题

    千次阅读 2016-11-08 18:30:10
    开发网页的过程中经常会因为图片的拉伸问题而苦恼,这里就将介绍如何通过JS来动态的处理网页图片尺寸的问题,让网页不再存在拉伸的图片,网站更加美观
  • 一个页面中有两个iframe

    千次阅读 2015-03-09 10:48:08
    点击左边iframe,内容显示在右边的iframe 代码:   //初始化 function initItem(){ var params="?...window.frames["leftFrame"].location.href = "/monitor/showLeftMonthList.action"+params;...}
  • python—get/post请求下载指定URL返回的网页内容,出现gzip乱码处理。设置Accept-Encoding为gzip,deflate,返回的网页是乱码 1、脚本 # --*-- coding:utf-8 --*-- #coding:utf-8 import string import urllib ...
  • 网页游戏

    千次阅读 2012-05-24 15:19:18
    网页游戏又称Web游戏,无端网游,其实就是用浏览器玩的游戏,它不用下载客户端,任何地方任何时间任何一台能上网的电脑就可以快乐的游戏,尤其适合上班一族。网页游戏只要能打开IE,10秒钟即可进入游戏,不用下载...
  • 提高网页下载速度的种方法

    千次阅读 2006-10-31 13:17:00
    方法一:优化表格提速 表格的使用增加了显示页面的时间,有时这样的时间很长。因为浏览器需要在填充表格的内容之前完全理解... 使用表格时间长了,你会发现大量小表格渲染起来比一有很多行的大表格快。至少看起来是这

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 226,634
精华内容 90,653
关键字:

怎么让两个网页同时出现