- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用链接创建了一个响应式 Accordion
JSFiddle/* * 优步 Accordion * * 加布里埃尔·阿萨洛斯 **/
(函数($){
var UberAccordion = function(parent, options) {
// Default settings
var defaults = {
verticalClass : 'accordion-vertical', // Class to apply when orientation is vertical
horizontalClass : 'accordion-horizontal', // Class to apply when orientation is horizontal
activeSlideClass : 'active', // Class to apply on active accordion slide
orientation : 'vertical', // Accordion orientation
orientationQuery : '(max-width: 700px)', // Media query which causes orientation change
startSlide : 1, // Starter slide
openMultiple : false, // Set to true for multiple open slides at a time
autoPlay : false, // Auto-play
autoPlaySpeed : 5000, // Auto-play interval
slideEvent : 'click', // Open slide event
animationSpeed : 333, // Animation Speed
headerItem : typeof options.headerClass === 'undefined' ? 'h1' : '.' + options.headerClass, // Header class
contentItem : typeof options.contentClass === 'undefined' ? 'div' : '.' + options.contentClass // Content class
};
var settings = $.extend(true, {}, defaults, options); // Add user settings with overwrite
var el = parent.children('ul'); // Accordion container
var slides = el.children().children(settings.contentItem); // Accordion slides
var headers = el.children('li').children(settings.headerItem); // Accordion headers
var state = {}; // Keeps current accordion state (ie. currentSlide, orientation, etc)
var showSlideCallback = function() {
el.trigger('ua-slide-changed');
}
this.toggleSlide = function(slideNumber, override) {
if(!settings.openMultiple) {
// If multiple is disabled, open current slide and close other
if(slideNumber !== state.currentSlide || override) {
this.hideSlide($(slides[el.children('li.' + settings.activeSlideClass).index()]));
this.showSlide($(slides[slideNumber]));
}
} else {
// If multiple is enabled, toggle clicked slide
if($(slides[slideNumber]).parent().hasClass(settings.activeSlideClass)) {
this.hideSlide($(slides[slideNumber]));
} else {
this.showSlide($(slides[slideNumber]));
}
}
state.currentSlide = slideNumber;
}
this.showSlide = function(slide) {
if(state.orientation === "horizontal") {
slide.slideDown(settings.animationSpeed, showSlideCallback);
} else {
slide.parent().animate({
width: slide.parent().attr('data-width')
}, settings.animationSpeed, showSlideCallback);
}
slide.parent().addClass(settings.activeSlideClass);
}
this.hideSlide = function(slide) {
if(state.orientation === "horizontal") {
slide.slideUp(settings.animationSpeed);
} else {
slide.parent().animate({
width: slide.parent().children(settings.headerItem).attr('data-width')
}, settings.animationSpeed);
}
slide.parent().removeClass(settings.activeSlideClass);
}
this.setOrientation = function(orientation) {
el.removeClass(settings.horizontalClass + ' ' + settings.verticalClass);
switch(orientation) {
case 'vertical':
el.addClass(settings.verticalClass);
$('p').html('switch vertical mode');
installVertical();
break;
case 'horizontal':
el.addClass(settings.horizontalClass);
// Don't wipe styles on first load
if(typeof state.orientation !== 'undefined') {
uninstallVertical();
}
$('p').html('switch horizontal mode');
applyHorizontalBase();
break;
}
$(slides[state.currentSlide])
.show()
.parent().addClass(settings.activeSlideClass);
state.orientation = orientation;
}
this.setAutoplay = function(enabled) {
var _this = this;
if(enabled) {
state.autoPlayInterval = setInterval(function() {
var totalSlides = el.children('li').children(settings.headerItem).length;
state.currentSlide = state.currentSlide < (totalSlides - 1) ? state.currentSlide + 1 : 0;
_this.toggleSlide(state.currentSlide, true);
}, settings.autoPlaySpeed);
} else {
if(typeof state.autoPlayInterval !== "undefined") {
clearInterval(state.autoPlayInterval);
}
}
}
// Installs styling and events for vertical slider
var installVertical = function() {
uninstallVertical();
$(window).bind('resize', resizeContainer);
applyVerticalBase();
calculateSizes();
}
var applyVerticalBase = function() {
slides.parent().css(CSSObject.SlideContainers);
CSSObject.Headers.functions.setTransforms(-$(headers[0]).outerHeight(), 0);
CSSObject.Slides.functions.setHeight(el.outerHeight(true));
CSSObject.Slides.functions.setLeft($(headers[0]).outerHeight(true));
headers.css(CSSObject.Headers.defaults);
headers.setOuterWidth(el.innerHeight());
slides.css(CSSObject.Slides.defaults);
}
var applyHorizontalBase = function() {
slides.css({ 'display': 'none' });
}
// Calculate sizes and save widths in data attributes
// for safe animating
var calculateSizes = function() {
var totalHeaderWidth = 0;
var currentContainer = el.children('li.' + settings.activeSlideClass);
var currentHeader = currentContainer.children(settings.headerItem);
var parentWidth = parent.innerWidth();
var slideWidth, headerWidth;
headers.each(function() {
headerWidth = $(this).outerHeight(true);
totalHeaderWidth += headerWidth;
$(this).parent().width(headerWidth);
$(this).attr('data-width', headerWidth);
});
slides.each(function() {
slideWidth = parentWidth - totalHeaderWidth;
headerWidth = $(this).parent().children(settings.headerItem).outerHeight(true);
$(this).setOuterWidth(slideWidth);
$(this).attr('data-width', slideWidth);
$(this).parent().attr('data-width', slideWidth + headerWidth - 1);
});
currentContainer.width(parentWidth - totalHeaderWidth + currentHeader.outerHeight(true) - 1);
}
// Called on resize event - adjusts accordion width according
// to parent to allow fluid design
var resizeContainer = function() {
if(state.orientation === "vertical") {
// If we don't hide the accordion before reading the parent's width value
// the parent will not auto-adjust in width
el.css('display', 'none');
el.width(parent.innerWidth());
el.css('display', 'block');
calculateSizes();
}
}
// Uninstalls vertical events and styles
var uninstallVertical = function() {
$(window).unbind('resize', resizeContainer);
el.removeAttr('style');
el.children('li').removeAttr('style');
slides.removeAttr('style');
headers.removeAttr('style');
}
// Constructor
var initialize = function(scope) {
if(typeof options.headerClass !== 'undefined' && typeof options.contentClass === 'undefined') {
throw("Content class must be defined along with header class.");
}
el.addClass('uberAccordion');
headers.on(settings.slideEvent, function(e) {
scope.toggleSlide(el.children('li').children(settings.headerItem).index(this));
scope.setAutoplay(false);
e.stopImmediatePropagation();
});
// If set to responsive, handle orientation changes
if(settings.orientationQuery) {
state.matchesQuery = window.matchMedia(settings.orientationQuery).matches;
// If media query match state changes, switch orientation
$(window).resize(function() {
if(window.matchMedia(settings.orientationQuery).matches !== state.matchesQuery) {
state.matchesQuery = window.matchMedia(settings.orientationQuery).matches;
scope.setOrientation(state.orientation === 'vertical' ? 'horizontal' : 'vertical');
}
});
if(state.matchesQuery) {
settings.orientation = settings.orientation === 'vertical' ? 'horizontal' : 'vertical';
}
}
state.currentSlide = settings.startSlide - 1;
$(slides[state.currentSlide]).parent().addClass(settings.activeSlideClass);
scope.setOrientation(settings.orientation);
// Set-up auto-play if enabled
if(settings.autoPlay && !settings.openMultiple) {
scope.setAutoplay(true);
}
el.attr('data-accordion-active', "true");
}
initialize(this);
}
$.fn.uberAccordion = function(options) {
// Avoid double instantiating
return $(this).children("ul").attr('data-accordion-active') === "true" ? false : new UberAccordion(this, options);
}
// Set total width with padding and borders (outerWidth)
$.fn.setOuterWidth = function(value) {
$(this).each(function() {
var paddingLeft = isNaN(parseInt($(this).css('padding-left'), 10)) || $(this).css('padding-left') === '100%' ? 0 : parseInt($(this).css('padding-left'), 10);
var paddingRight = isNaN(parseInt($(this).css('padding-right'), 10)) || $(this).css('padding-right') === '100%' ? 0 : parseInt($(this).css('padding-right'), 10);
var borderLeft = isNaN(parseInt($(this).css('border-left-width'), 10)) ? 0 : parseInt($(this).css('border-left-width'), 10);
var borderRight = isNaN(parseInt($(this).css('border-right-width'), 10)) ? 0 : parseInt($(this).css('border-right-width'), 10);
$(this).width(value - paddingLeft - paddingRight - borderLeft - borderRight);
});
}
// CSS Object for vertical accordion
// These base styles are necessary for all vertical accordions
var CSSObject = {
SlideContainers: {
'display': 'inline',
'overflow': 'hidden',
'float': 'left',
'height': '100%',
'position': 'relative'
},
Headers: {
defaults: {
'display': 'block',
'float': 'left',
'white-space': 'nowrap',
'position': 'absolute',
'top': '0',
'left': '0',
'transform-origin': '0 100% 0',
'-webkit-transform-origin': '0 100%',
'-moz-transform-origin': '0 100%',
'-ms-transform-origin': '0 100%'
},
functions: {
setTransforms: function(x, y) {
CSSObject.Headers.defaults['-webkit-transform'] = "rotate(90deg) translate(" + x + "px, " + y + "px)";
CSSObject.Headers.defaults['-moz-transform'] = "rotate(90deg) translate(" + x + "px, " + y + "px)";
CSSObject.Headers.defaults['-ms-transform'] = "rotate(90deg) translate(" + x + "px, " + y + "px)";
CSSObject.Headers.defaults['-sand-transform'] = "rotate(90deg) translate(" + x + "px, " + y + "px)";
CSSObject.Headers.defaults['transform'] = "rotate(90deg) translate(" + x + "px, " + y + "px)";
//CSSObject.Headers.defaults['filter'] = "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
}
}
},
Slides: {
defaults: {
'float': 'left',
'height': 0,
'display': 'block',
'position': 'absolute',
'top': '0'
},
functions: {
setHeight: function(height) { CSSObject.Slides.defaults.height = height; },
setLeft: function(left) { CSSObject.Slides.defaults.left = left; }
}
}
}
$('.accordionContainer').uberAccordion({
headerClass: 'title',
contentClass: 'content'
});
}(jQuery));
在这里,我想将每个 div 的标题部分设置为面向其自己的内容,而不影响切换 View 。
例如标题 Slider1 面向它自己的内容,Slider2 面向它的内容等等。我试过在
中改变 AngularCSSObject.Headers.defaults['transform'] = "rotate(90deg) translate(" + x + "px, " + y + "px)";
但只改变到水平位置。有什么想法吗?
最佳答案
可以使用 CSS3 的变换属性旋转文本。请检查此链接:http://www.w3schools.com/cssref/css3_pr_transform.asp
关于jquery - 在 UberAccordion 中旋转标题文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28337800/
...沮丧。我希望我的游戏仅在横向模式下运行。我已将适当的键/值添加到 Info.plist 文件中,以强制设备方向在启动时正确。 我现在正在尝试旋转 OpenGL 坐标空间以匹配设备的坐标空间。我正
我如何创建一个旋转矩阵,将 X 旋转 a,Y 旋转 b,Z 旋转 c? 我需要公式,除非您使用的是 ardor3d api 的函数/方法。 矩阵是这样设置的 xx, xy, xz, yx, yy, y
假设我有一个包含 3 个 vector 的类(一个用于位置,一个用于缩放,一个用于旋转)我可以使用它们生成一个变换矩阵,该矩阵表示对象在 3D 空间中的位置、旋转和大小。然后我添加对象之间的父/子关系
所以我只是在玩一个小的 javascript 游戏,构建一个 pacman 游戏。你可以在这里看到它:http://codepen.io/acha5066/pen/rOyaPW 不过我对旋转有疑问。你
在我的应用程序中,我有一个 MKMapView,其中显示了多个注释。 map 根据设备的航向旋转。要旋转 map ,请执行以下语句(由方法 locationManager 调用:didUpdateHe
使用此 jquery 插件时:http://code.google.com/p/jqueryrotate/wiki/Documentation我将图像旋转 90 度,无论哪个方向,它们最终都会变得模糊
我有以下代码:CSS: .wrapper { margin:80px auto; width:300px; border:none; } .square { widt
本篇介绍Manim中的两个旋转类的动画,名称差不多,分别是Rotate和Rotating。 Rotate类主要用于对图形对象进行指定角度、围绕特定点的精确旋转,适用于几何图形演示、物理模拟和机械运动
我只想通过小部件的轴移动图像并围绕小部件的中心旋转(就像任何数字绘画软件中的 Canvas ),但它围绕其左顶点旋转...... QPainter p(this); QTransform trans;
我需要先旋转图像,然后再将其加载到 Canvas 中。据我所知,我无法使用 canvas.rotate() 旋转它,因为它会旋转整个场景。 有没有好的JS方法来旋转图片? [不依赖于浏览器的方式] 最
我需要知道我的 Android 设备屏幕何时从一个横向旋转到另一个横向(rotation_90 到 rotation_270)。在我的 Android 服务中,我重新实现了 onConfigurati
**摘要:**本篇文章主要讲解Python调用OpenCV实现图像位移操作、旋转和翻转效果,包括四部分知识:图像缩放、图像旋转、图像翻转、图像平移。 本文分享自华为云社区《[Python图像处理] 六
我只是在玩MTKView中的模板设置;并且,我一直在尝试了解以下内容: 相机的默认位置。 使用MDLMesh和MTKMesh创建基元时的默认位置。 为什么轮换还涉及翻译。 相关代码: matrix_f
我正在尝试使用包 dendexend 创建一个树状图。它创建了非常好的 gg 树状图,但不幸的是,当你把它变成一个“圆圈”时,标签跟不上。我将在下面提供一个示例。 我的距离对象在这里:http://s
我想将一个完整的 ggplot 对象旋转 90°。 我不想使用 coord_flip因为这似乎会干扰 scale="free"和 space="free"使用刻面时。 例如: qplot(as.fac
我目前可以通过首先平移到轴心点然后执行旋转最后平移回原点来围绕轴心点旋转。在我的例子中,我很容易为肩膀做到这一点。但是,我不知道如何为前臂添加绕肘部的旋转。 我已经尝试了以下围绕肘部旋转的前臂: 平移
我想使用此功能旋转然后停止在特定点或角度。现在该元素只是旋转而不停止。代码如下: $(function() { var $elie = $("#bkgimg");
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我正在尝试创建一个非常简单的关键帧动画,其中图形通过给定的中点从一个角度旋转到另一个角度。 (目的是能够通过大于 180 度的 OBTUSE 弧角来制作旋转动画,而不是让动画“作弊”并走最短路线,即通
我需要旋转 NSView 实例的框架,使其宽度变为其高度,其高度变为其宽度。该 View 包含一个字符串,并且该字符串也被旋转,这一点很重要。 我查看了 NSView 的 setFrameRotati
我是一名优秀的程序员,十分优秀!