前言

module 怎能少得了动画呢~

代码解读

weex code

API 接口transition(node, options, callback)
Arguments 参数node(Node):将要动画的元素。options(object):操作选项styles(object):指定要应用的过渡效果的样式的名称和值。
color(string):色彩的元素时,animaiton完成。
transform(object):变换函数被应用到元素。支持下列值。
translate/ translatex / translatey(字符串):translate的元素到新的位置。该值可以是像素或百分比
rotate(string):单位为度。
scale(string):放大或缩小元素。
duration(number):指定一个过渡动画需要完成的毫秒数。默认情况下,该值是毫秒,这意味着没有动画会发生。
timingfuncion(string):用来描述的方式被过渡效果影响的中间值的计算。默认值为 linear, 也可以是一个 ease-in, ease-out, ease-in-out, linear or cubic-bezier(x1, y1, x2, y2).
delay(number):指定一个变化的要求,是转变和过渡效果的启动性能之间等待的毫秒数。默认情况下,该值为0毫秒。
transform-origin(string):尺度和旋转的中心。该值可以是x、y的像素或关键字,如 left, right, bottom, top, center。Callback 
过渡完成后调用的回调回调函数。
Example 实例<template><div class="ct"><div id="test"></div></div>
</template><script>module.exports = {ready: function () {var animation = require('@weex-module/animation');var testEl = this.$el('test');animation.transition(testEl, {styles: {color: '#FF0000',transform: 'translate(1, 1)'},duration: 0, //mstimingFunction: 'ease',transform-origin: 'center center',delay: 0 //ms}, function () {nativeLog('animation finished.')})}}
</script>

android code

一、注册

WXModuleManager.registerModule("animation", WXAnimationModule.class, true);

二、动画WXAnimationBean类

看的出来与weex定义的options 一一对应

public class WXAnimationBean {public final static String LINEAR = "linear";public final static String EASE_IN_OUT = "ease-in-out";public final static String EASE_IN = "ease-in";public final static String EASE_OUT = "ease-out";public long delay;// 延迟时间public long duration; // 显示时间public String timingFunction; // 过渡效果public Style styles; //样式public static class Style {// 支持动画样式public final static String ANDROID_TRANSLATION_X = "translationX";public final static String ANDROID_TRANSLATION_Y = "translationY";public final static String ANDROID_ROTATION = "rotation";public final static String ANDROID_SCALE_X = "scaleX";public final static String ANDROID_SCALE_Y = "scaleY";public final static String WX_TRANSLATE = "translate";public final static String WX_TRANSLATE_X = "translateX";public final static String WX_TRANSLATE_Y = "translateY";public final static String WX_ROTATE = "rotate";public final static String WX_SCALE_X = "scaleX";public final static String WX_SCALE_Y = "scaleY";public final static String WX_SCALE = "scale";public final static String ALPHA = "alpha";public final static String BACKGROUND_COLOR = "backgroundColor";public final static String TOP = "top";public final static String BOTTOM = "bottom";public final static String RIGHT = "right";public final static String LEFT = "left";public final static String CENTER = "center";// 动画 key mappublic static Map<String, List<String>> wxToAndroidMap = new HashMap<>();static {wxToAndroidMap.put(WX_TRANSLATE, Arrays.asList(ANDROID_TRANSLATION_X, ANDROID_TRANSLATION_Y));wxToAndroidMap.put(WX_TRANSLATE_X, Collections.singletonList(ANDROID_TRANSLATION_X));wxToAndroidMap.put(WX_TRANSLATE_Y, Collections.singletonList(ANDROID_TRANSLATION_Y));wxToAndroidMap.put(WX_ROTATE, Collections.singletonList(ANDROID_ROTATION));wxToAndroidMap.put(WX_SCALE, Arrays.asList(ANDROID_SCALE_X, ANDROID_SCALE_Y));wxToAndroidMap.put(WX_SCALE_X, Collections.singletonList(ANDROID_SCALE_X));wxToAndroidMap.put(WX_SCALE_Y, Collections.singletonList(ANDROID_SCALE_Y));wxToAndroidMap = Collections.unmodifiableMap(wxToAndroidMap);}public String opacity; // 透明度public String backgroundColor; //背景public String transform;// 动画效果public String transformOrigin;//过渡效果private Map<String, Float> transformMap = new HashMap<>(); // 动画mapprivate Pair<Float, Float> pivot; // 中心点坐标public Map<String, Float> getTransformMap() {return transformMap;}public void setTransformMap(Map<String, Float> transformMap) {this.transformMap = transformMap;}public Pair<Float, Float> getPivot() {return pivot;}public void setPivot(Pair<Float, Float> pivot) {this.pivot = pivot;}}
}

二、WXModuleManager 部分方法


public class WXAnimationModule extends WXModule {// 添加动画样式public static void applyTransformStyle(Map<String, Object> style, WXComponent component) {if (component != null) {View target = component.getRealView();if (style != null && target != null) {Object transform = style.get("transform");if (transform instanceof String &&!TextUtils.isEmpty((String) transform) && target.getLayoutParams() != null) {String transformOrigin;try {transformOrigin = (String) component.mDomObj.style.get("transformOrigin");} catch (NullPointerException e) {transformOrigin = null;}WXAnimationBean animationBean = new WXAnimationBean();animationBean.styles = new WXAnimationBean.Style();animationBean.styles.setPivot(WXAnimationModule.parsePivot(transformOrigin, target.getLayoutParams()));animationBean.styles.setTransformMap(WXAnimationModule.parseTransForm((String) transform, target.getLayoutParams()));Animator animator = WXAnimationModule.createAnimator(animationBean, target);if (animator != null) {animator.setDuration(0);animator.start();}}}}}// ** 解析动画beanpublic staticWXAnimationBean parseAnimation(@Nullable String animation, ViewGroup.LayoutParams layoutParams) {try {WXAnimationBean animationBean = JSONObject.parseObject(animation, WXAnimationBean.class);if (animationBean != null && animationBean.styles != null) {WXAnimationBean.Style style = animationBean.styles;style.setTransformMap(parseTransForm(style.transform, layoutParams));style.setPivot(parsePivot(style.transformOrigin, layoutParams));}return animationBean;} catch (RuntimeException e) {WXLogUtils.e(WXLogUtils.getStackTrace(e));return null;}}// ** 创建动画public staticObjectAnimator createAnimator(@NonNull WXAnimationBean animation, @NonNull View target) {WXAnimationBean.Style style = animation.styles;if (style != null) {ObjectAnimator animator;List<PropertyValuesHolder> holders = new LinkedList<>();if (style.getTransformMap() != null) {if (style.getTransformMap().isEmpty()) {holders.addAll(moveBackToOrigin());} else {for (Map.Entry<String, Float> entry : style.getTransformMap().entrySet()) {holders.add(PropertyValuesHolder.ofFloat(entry.getKey(), entry.getValue()));}}}if (!TextUtils.isEmpty(style.opacity)) {holders.add(PropertyValuesHolder.ofFloat(WXAnimationBean.Style.ALPHA,Float.valueOf(style.opacity)));}if (!TextUtils.isEmpty(style.backgroundColor)) {if (target.getBackground() instanceof WXBackgroundDrawable) {holders.add(PropertyValuesHolder.ofObject(WXAnimationBean.Style.BACKGROUND_COLOR, new ArgbEvaluator(),((WXBackgroundDrawable) target.getBackground()).getColor(),WXResourceUtils.getColor(style.backgroundColor)));} else if (target.getBackground() instanceof ColorDrawable) {holders.add(PropertyValuesHolder.ofObject(WXAnimationBean.Style.BACKGROUND_COLOR, new ArgbEvaluator(),((ColorDrawable) target.getBackground()).getColor(),WXResourceUtils.getColor(style.backgroundColor)));}}if (style.getPivot() != null) {Pair<Float, Float> pair = style.getPivot();target.setPivotX(pair.first);target.setPivotY(pair.second);}animator = ObjectAnimator.ofPropertyValuesHolder(target, holders.toArray(new PropertyValuesHolder[holders.size()]));animator.setStartDelay(animation.delay);return animator;} else {return null;}}// ** 创建动画监听器public static Animator.AnimatorListener createAnimatorListener(final WXSDKInstance mWXSDKInstance, final String callBack) {if (!TextUtils.isEmpty(callBack)) {return new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {if (mWXSDKInstance == null) {WXLogUtils.e("WXRenderStatement-onAnimationEnd mWXSDKInstance == null NPE");} else {// ** 动画结束后回调WXSDKManager.getInstance().callback(mWXSDKInstance.getInstanceId(),callBack,new HashMap<String, Object>());}}};} else {return null;}}// 创建动画过去效果public staticInterpolator createTimeInterpolator(@NonNull WXAnimationBean animation) {String interpolator = animation.timingFunction;if (!TextUtils.isEmpty(interpolator)) {switch (interpolator) {case WXAnimationBean.EASE_IN:return new AccelerateInterpolator();case WXAnimationBean.EASE_OUT:return new DecelerateInterpolator();case WXAnimationBean.EASE_IN_OUT:return new AccelerateDecelerateInterpolator();case WXAnimationBean.LINEAR:return new LinearInterpolator();}}return null;}// 解析动画private static Map<String, Float> parseTransForm(String rawTransform, final ViewGroup.LayoutParams layoutParams) {if (!TextUtils.isEmpty(rawTransform)) {FunctionParser<Float> parser = new FunctionParser<>(rawTransform, new FunctionParser.Mapper<Float>() {@Overridepublic Map<String, Float> map(String functionName, List<String> raw) {Map<String, Float> result = new HashMap<>();if (raw != null && !raw.isEmpty()) {// 判断是否有此类型动画if (WXAnimationBean.Style.wxToAndroidMap.containsKey(functionName)) {// 根据参数转换动画result.putAll(convertParam(layoutParams, WXAnimationBean.Style.wxToAndroidMap.get(functionName),raw));}}return result;}});return parser.parse();}return new LinkedHashMap<>();}private static String parsePercentOrPx(String raw, int unit) {String lower = raw.toLowerCase();if (lower.endsWith("%")) {return parsePercent(raw, unit);} else if (lower.endsWith("px")) {return Float.toString(WXViewUtils.getRealPxByWidth(Float.parseFloat(raw.replace("px", ""))));}return Float.toString(WXViewUtils.getRealPxByWidth(Float.parseFloat(raw)));}// 按百分比进行转化private static String parsePercent(String percent, int unit) {return Float.toString(Float.parseFloat(percent.replace("%", "")) / 100 * unit);}// 解析坐标private static Pair<Float, Float> parsePivot(@Nullable String transformOrigin,ViewGroup.LayoutParams layoutParams) {String[] split;List<String> list;if (!TextUtils.isEmpty(transformOrigin) &&((split = transformOrigin.split("\\s+")).length >= 2)) {list = Arrays.asList(split).subList(0, 2);return parsePivot(list, layoutParams);} else {return parsePivot(Arrays.asList(WXAnimationBean.Style.CENTER, WXAnimationBean.Style.CENTER), layoutParams);}}private static Pair<Float, Float> parsePivot(@NonNull List<String> list, ViewGroup.LayoutParams layoutParams) {return new Pair<>(parsePivotX(list.get(0), layoutParams), parsePivotY(list.get(1), layoutParams));}private static float parsePivotX(String x, ViewGroup.LayoutParams layoutParams) {String value = x;if (TextUtils.equals(x, WXAnimationBean.Style.LEFT)) {value = "0%";} else if (TextUtils.equals(x, WXAnimationBean.Style.RIGHT)) {value = "100%";} else if (TextUtils.equals(x, WXAnimationBean.Style.CENTER)) {value = "50%";}value = parsePercentOrPx(value, layoutParams.width);return Float.parseFloat(value);}private static float parsePivotY(String y, ViewGroup.LayoutParams layoutParams) {String value = y;if (TextUtils.equals(y, WXAnimationBean.Style.TOP)) {value = "0%";} else if (TextUtils.equals(y, WXAnimationBean.Style.BOTTOM)) {value = "100%";} else if (TextUtils.equals(y, WXAnimationBean.Style.CENTER)) {value = "50%";}value = parsePercentOrPx(value, layoutParams.height);return Float.parseFloat(value);}// 参数转化private static Map<String, Float> convertParam(ViewGroup.LayoutParams layoutParams,@NonNull List<String> nameSet,@NonNull List<String> rawValue) {Map<String, Float> result = new HashMap<>();List<String> convertedList = new ArrayList<>();if (nameSet.contains(WXAnimationBean.Style.ANDROID_ROTATION)) {convertedList.addAll(parseRotation(rawValue));} else if (nameSet.contains(WXAnimationBean.Style.ANDROID_TRANSLATION_X) ||nameSet.contains(WXAnimationBean.Style.ANDROID_TRANSLATION_Y)) {convertedList.addAll(parseTranslation(nameSet, layoutParams, rawValue));} else if (nameSet.contains(WXAnimationBean.Style.ANDROID_SCALE_X) ||nameSet.contains(WXAnimationBean.Style.ANDROID_SCALE_Y)) {convertedList.addAll(parseScale(nameSet.size(), rawValue));}if (nameSet.size() == convertedList.size()) {for (int i = 0; i < nameSet.size(); i++) {result.put(nameSet.get(i), Float.parseFloat(convertedList.get(i)));}}return result;}private static List<String> parseTranslation(List<String> nameSet, ViewGroup.LayoutParams layoutParams,@NonNull List<String> rawValue) {List<String> convertedList = new ArrayList<>();String first = rawValue.get(0);if (nameSet.size() == 1) {parseSingleTranslation(nameSet, layoutParams, convertedList, first);} else {parseDoubleTranslation(layoutParams, rawValue, convertedList, first);}return convertedList;}private static void parseSingleTranslation (List<String> nameSet, ViewGroup.LayoutParams layoutParams, List<String> convertedList, String first) {if (nameSet.contains(WXAnimationBean.Style.ANDROID_TRANSLATION_X)) {convertedList.add(parsePercentOrPx(first, layoutParams.width));} else if (nameSet.contains(WXAnimationBean.Style.ANDROID_TRANSLATION_Y)) {convertedList.add(parsePercentOrPx(first, layoutParams.height));}}private static void parseDoubleTranslation(ViewGroup.LayoutParams layoutParams,@NonNull List<String> rawValue, List<String> convertedList, String first) {String second;if (rawValue.size() == 1) {second = first;} else {second = rawValue.get(1);}if (layoutParams != null) {convertedList.add(parsePercentOrPx(first, layoutParams.width));convertedList.add(parsePercentOrPx(second, layoutParams.height));}}// 解析缩放private static List<String> parseScale(int size, @NonNull List<String> rawValue) {List<String> convertedList = new ArrayList<>();convertedList.addAll(rawValue);if (size != 1 && rawValue.size() == 1) {convertedList.addAll(rawValue);}return convertedList;}// 解析旋转private static List<String> parseRotation(@NonNull List<String> rawValue) {List<String> convertedList = new ArrayList<>();String lower;for (String raw : rawValue) {lower = raw.toLowerCase();if (lower.endsWith("deg")) {convertedList.add(lower.replace("deg", ""));} else {convertedList.add(Double.valueOf(Math.toDegrees(Double.parseDouble(raw))).toString());}}return convertedList;}private static List<PropertyValuesHolder> moveBackToOrigin() {List<PropertyValuesHolder> holders = new LinkedList<>();holders.add(PropertyValuesHolder.ofFloat(WXAnimationBean.Style.ANDROID_TRANSLATION_X, 0));holders.add(PropertyValuesHolder.ofFloat(WXAnimationBean.Style.ANDROID_TRANSLATION_Y, 0));holders.add(PropertyValuesHolder.ofFloat(WXAnimationBean.Style.ANDROID_SCALE_X, 1));holders.add(PropertyValuesHolder.ofFloat(WXAnimationBean.Style.ANDROID_SCALE_Y, 1));holders.add(PropertyValuesHolder.ofFloat(WXAnimationBean.Style.ANDROID_ROTATION, 0));return holders;}// 接受weex桥接回调方法@WXModuleAnnopublic void transition(String ref, String animation, String callBack) {WXSDKManager.getInstance().getWXRenderManager().startAnimation(mWXSDKInstance.getInstanceId(), ref, animation, callBack);}
}

三、渲染管理器(WXRenderManager)

// 渲染声明队列
private ConcurrentHashMap<String, WXRenderStatement> mRegistries;// 从登记的渲染声明中拿到当前的需要执行动画的animation控件,开启动画
public void startAnimation(String instanceId, String ref, String animation, String callBack) {WXRenderStatement statement = mRegistries.get(instanceId);if (statement == null) {return;}statement.startAnimation(ref, animation, callBack);
}

四、渲染声明(WXRenderStatement)

// 存储组件map
private Map<String, WXComponent> mRegistry;// 从map中取到相应控件
void startAnimation(String ref, String animation, String callBack) {WXComponent component = mRegistry.get(ref);if (component == null || component.getRealView() == null) {return;}try {// 获取 animationBeanWXAnimationBean animationBean = WXAnimationModule.parseAnimation(animation, component.getRealView().getLayoutParams());if (animationBean != null) {// 创建 animator 对象Animator animator = WXAnimationModule.createAnimator(animationBean, component.getRealView());if (animator != null) {// 创建监听Animator.AnimatorListener animatorListener = WXAnimationModule.createAnimatorListener(mWXSDKInstance, callBack);// 创建插补器 (过渡效果)Interpolator interpolator = WXAnimationModule.createTimeInterpolator(animationBean);if (animatorListener != null) {animator.addListener(animatorListener);}if (interpolator != null) {animator.setInterpolator(interpolator);}animator.setDuration(animationBean.duration);animator.start();}}} catch (RuntimeException e) {WXLogUtils.e(WXLogUtils.getStackTrace(e));}}

流程 :

    1、js 调用 本地module方法进行绘制;2、调用渲染声明生成动画bean;3、创建动画、设置监听、创建过渡效果;4、开启动画,结束回调callback;
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. tomcat配置上传文件的保存路径

    问题分析:如果将图片上传到服务器的tomcat下的目录作为上传保存图片的路径,则每次更新程序重启tomcat时,都需要进行用户上传图片的备份和恢复。否则将被删除掉。解决方法:通过配置Tomcta的虚拟路径,即将请求映射到实际的物理路径下,实现上传文件的保存地址和服务器的分离…...

    2024/4/17 18:40:27
  2. 移动平台前端开发总结(ios,Android)

    首先我们来看看webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用<meta content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0" name="viewport" /> 强制让文档的宽度与设备的宽度保…...

    2024/4/28 5:03:26
  3. 12306曝光sql注入漏洞,我试着发布解决方案

    12306曝光sql注入漏洞,我试着发布解决方案 在项目中,运用Ibatis中Like写法,没有研究下,结果SQL语句存在SQL注入,整理下,下次谨记啊!sql语句:select * from ( select 1 from poll <dynamic prepend= " where " > <isNotEmpty prepend=" a…...

    2024/4/28 20:14:54
  4. 与Java相关的四十个名字-Java基础-Java-编程开发

    <script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="tex…...

    2024/4/17 18:41:22
  5. (译)一个cocos2d节点不显示的各种原因

    这是Learn.cocos2d.Game.Development.with.iOS.5这本书作者Steffen Itterheim写的一篇文章,也收录在了这本书中,我尝试翻译了一下,由于水平有限,还有一些地方翻译得不是很清楚,特别是Node Vertex Z和Node custom draw #2 (visit)这两段,有理解错的地方还请各位指正! 原文…...

    2024/4/28 15:34:56
  6. Tomcat配置与JSP运行

    Tomcat5.5的基本配置详细说明Tomcat是apache的一个子项目,也是一个开源项目,主要是用于J2EE web容器,由于是一个开源项目,在学习与开发测试中经常被用到,(而目前商业最为经常用到的web服务器是BEA WebLogic)。在开源项目中,鼎鼎大名的apache基金会大家肯定有所了解,网站…...

    2024/4/28 16:54:48
  7. java将多张图片合成视频

    java将多张图片合成视频 需求 近几天,无聊就看看抖音,视频信息传播信息,相亲去抖音,网红去抖音,秀恩爱去抖音。。。走在大街上,几个小妹妹拿着手机自拍干是玩抖音还是直播呢?每个人都想当导演的梦,但又没DV的钱,又没导演的才华,就是有梦。拍照你总会吧,就想能不能把…...

    2024/4/28 20:12:11
  8. SQL注入漏洞全接触(转)

    SQL注入漏洞全接触--入门篇 [1]引 言 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程…...

    2024/4/27 23:44:42
  9. 前端开发工程师最常问的问题

    本文收集总结了一些优质的前端面试题,初学者阅后也要用心钻研其中的原理,重要知识需要系统学习,透彻学习,形成自己的知识链。万不可投机取巧,只求面试过关是错误的!前端界新的行业标准, 框架, 库不断在更新和新增,正如赫门在2015深JS大会上《前端服务化之路》主题演讲中…...

    2024/4/28 19:19:53
  10. tomcat配置日志存放地址

    问题 tomcat每次启动时,自动在logs目录下生产以下日志文件,且每天都会生成对应日期的一个文件,造成日志文件众多:localhost.2012-07-05.txtcatalina.2012-07-05.txtmanager.2012-07-05.txthost-manager.2012-07-05.txt 目的Tomcat以上日志都输出到同一个文件中。修改步骤打…...

    2024/4/20 12:59:10
  11. 微信小程序踩坑记录 ------- canvas 生成带小程序码的微信朋友圈分享图

    最近做了一个问卷类的小程序,其中的结果页想让用户进行朋友圈分享转发,网上搜索资料,得出解决思路,用 canvas 将页面绘制生成图片,然后保存到手机相册,最终效果如下:在这里我只写页面里关于 canvas 生成图片并进行保存这个流程的相关代码,并且会在我踩过的坑那里进行具…...

    2024/4/28 21:21:44
  12. DVWA之SQL注入考点小结

    SQL InjectionSQL Injection,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。SQL注入漏洞的危害是巨大的,常常会导致整个数据库被“脱裤”,尽管如此,SQL注入仍是现在最常见的Web漏洞之一。近期很火的大使馆接连被黑事…...

    2024/4/28 13:50:42
  13. 网络攻防学习心得一(20159320)黑客信息

    中国黑客联盟核心人物 goodwell   网名:goodwell 所属组织;绿色兵团 介绍:中国最早黑客组织绿色兵团的创始人,中国黑客界泰斗级元老。作为中国黑客界最早组织创始人,goodwell领导下绿色兵团在网络界甚至更广领域都得到认同。他与其组织揭开中国黑客历史的序幕。他个人…...

    2024/4/28 0:07:29
  14. 后端开发接口规范

    因不同人员的开发习惯不同,造成前后端连调时许多问题要重复确认。也会出现因前后端人员对默认值的期望不同而造成的代码缺陷。因此制定本接口规范,规范前后端的开发标准。参考如下接口文档格式:接口名称:审核列表接口描述:接口的使用场景接口URL: {service}/rider/check/…...

    2024/4/17 18:42:36
  15. Tomcat9.0配置MySQL和Oracle数据库数据源

    描述:Tomcat配置数据库数据源,通过配置数据源可以保证始终有数据库连接对象,需要用的时候直接引用,用完以后直接关闭即可。而如果是JDBC普通连接方法,每一个对象连接都需要经过从加载到关闭,这样一来势必会降低程序效率步骤:1.下载MySQL或者Oracle驱动放到Tomcat安装目录…...

    2024/4/27 23:19:57
  16. 阿里云VOD 视频点播(三),后台java接口代码

    一,我使用的是SpringCloud微服框架开发接口,开发前准备一下几点 (1),查看官方文档,获取相关信息,引入相关jar (1),Java上传SDK (2),服务端上传SDK下载 注意:以下列举出部分依赖jar包的版本,您可直接在您的项目中添加maven依赖,也可以将VODUploadDemo-java-1.4.7.zip包…...

    2024/4/28 1:52:17
  17. ecshop SQL注入通杀漏洞以及后台拿SHELL

    ecshop SQL注入通杀漏洞以及后台拿SHELL 文章来源:小灰博客|时间:2013-12-10 16:09:59|作者:Leo |2条评论 文章分类:安全技术 标签:安全教程 发现本地有家商城太自大了,真是目中无人啊…果断拿下给个警告,下面记载下这个Ecshop通杀漏洞吧! 先用下面的代码看下表的前…...

    2024/4/18 4:34:39
  18. 使用红孩儿工具箱完成基于Cocos2d-x的简单游戏动画界面

    [Cocos2d-x相关教程来源于红孩儿的游戏编程之路CSDN博客地址:http://blog.csdn.net/honghaier红孩儿Cocos2d-X学习园地QQ3群:205100149,47870848使用红孩儿工具箱完成基于Cocos2d-x的简单游戏动画界面游戏的UI界面编程是一个既重要,又麻烦的工具。如何能够更快的完成界面的处…...

    2024/4/17 18:41:34
  19. Tomcat配置虚拟路径,使上传文件与服务器分离

    【1】eclipse下配置Tomcat虚拟路径映射 遇到问题介绍:项目中上传文件到服务器。如果使用tomcat下的目录作为上传图片的路径,则每次重启服务器图片将消失。因为开发工具的项目中没有该图片,每次重启服务器重新部署的时候将会删除开发工具的项目中不存在的文件解决:可以使用t…...

    2024/4/20 8:53:34
  20. 最新传智播客java就业班全套视频 全85天全套

    传智播客java就业班全套视频 共85天课程很不错的一门课程,推荐给大家需要的朋友速度了下载地址:百度网盘...

    2024/4/17 18:41:33

最新文章

  1. 牛客NC99 多叉树的直径【较难 深度优先 Java/Go/PHP】

    题目 题目链接&#xff1a; https://www.nowcoder.com/practice/a77b4f3d84bf4a7891519ffee9376df3 思路 核心就是树的最大直径(globalMax)一定是以某一个node为root最长的两个path-to-leaf. 就是普通dfs的同时算路径长度。时间: O(n), DFS一次 空间: O(n)参考答案Java impo…...

    2024/4/28 21:31:48
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 线程池的方式爬虫

    <!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version> </dependency><!-- 爬虫需…...

    2024/4/25 2:10:52
  4. AI如何影响装饰器模式与组合模式的选择与应用

    ​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#xff1a;设计模式深度解析&#xff1a;AI如何影响…...

    2024/4/23 13:29:03
  5. Windows Server 2022 使用ApacheDS用户远程桌面登录服务器

    Windows Server 2022 使用ApacheDS用户远程桌面登录服务器 1、接上篇 Windows Server 2022 使用ApacheDS用户认证 使用Administrator用户远程登录192.168.1.100windows server&#xff0c;打开pGina软件 2、输入刚刚在ApacheDS中的新添加的用户测试一下&#xff0c;会自动添加…...

    2024/4/24 14:07:06
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/28 13:52:11
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/28 13:51:37
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/28 15:57:13
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57